diff options
507 files changed, 6639 insertions, 5678 deletions
diff --git a/Android.bp b/Android.bp index 8afea341be70..933d1aff842b 100644 --- a/Android.bp +++ b/Android.bp @@ -591,7 +591,7 @@ stubs_defaults { libs: [ "art.module.public.api", "sdk_module-lib_current_framework-tethering", - "sdk_module-lib_current_framework-connectivity-tiramisu", + "sdk_module-lib_current_framework-connectivity-t", "sdk_public_current_framework-bluetooth", // There are a few classes from modules used by the core that // need to be resolved by metalava. We use a prebuilt stub of the diff --git a/StubLibraries.bp b/StubLibraries.bp index 726ab2a70a5e..94f4374594ec 100644 --- a/StubLibraries.bp +++ b/StubLibraries.bp @@ -258,7 +258,7 @@ java_library { srcs: [":module-lib-api-stubs-docs-non-updatable"], libs: [ "sdk_module-lib_current_framework-tethering", - "sdk_module-lib_current_framework-connectivity-tiramisu", + "sdk_module-lib_current_framework-connectivity-t", "sdk_public_current_framework-bluetooth", // NOTE: The below can be removed once the prebuilt stub contains bluetooth. "sdk_system_current_android", diff --git a/api/Android.bp b/api/Android.bp index 66c7823ed416..bbe26b73c721 100644 --- a/api/Android.bp +++ b/api/Android.bp @@ -113,7 +113,7 @@ combined_apis { "framework-appsearch", "framework-bluetooth", "framework-connectivity", - "framework-connectivity-tiramisu", + "framework-connectivity-t", "framework-graphics", "framework-media", "framework-mediaprovider", diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp index c202f6f03b5b..2694c7be12a7 100644 --- a/cmds/idmap2/Android.bp +++ b/cmds/idmap2/Android.bp @@ -23,6 +23,7 @@ package { cc_defaults { name: "idmap2_defaults", + cpp_std: "gnu++2b", tidy: true, tidy_checks: [ "modernize-*", @@ -31,6 +32,7 @@ cc_defaults { "android-*", "misc-*", "readability-*", + "-readability-identifier-length", ], tidy_checks_as_errors: [ "modernize-*", @@ -53,7 +55,6 @@ cc_defaults { "-readability-const-return-type", "-readability-convert-member-functions-to-static", "-readability-else-after-return", - "-readability-identifier-length", "-readability-named-parameter", "-readability-redundant-access-specifiers", "-readability-uppercase-literal-suffix", @@ -114,6 +115,7 @@ cc_library { "libidmap2/proto/*.proto", ], host_supported: true, + tidy: false, proto: { type: "lite", export_proto_headers: true, diff --git a/cmds/idmap2/tests/ResultTests.cpp b/cmds/idmap2/tests/ResultTests.cpp index f2f8854cec3a..f9c4fa3c798b 100644 --- a/cmds/idmap2/tests/ResultTests.cpp +++ b/cmds/idmap2/tests/ResultTests.cpp @@ -259,7 +259,8 @@ TEST(ResultTests, CascadeError) { } struct NoCopyContainer { - uint32_t value; // NOLINT(misc-non-private-member-variables-in-classes) + uint32_t value = 0; // NOLINT(misc-non-private-member-variables-in-classes) + NoCopyContainer() = default; NoCopyContainer(const NoCopyContainer&) = delete; NoCopyContainer& operator=(const NoCopyContainer&) = delete; }; @@ -268,7 +269,7 @@ Result<std::unique_ptr<NoCopyContainer>> CreateNoCopyContainer(bool succeed) { if (!succeed) { return Error("foo"); } - std::unique_ptr<NoCopyContainer> p(new NoCopyContainer{0U}); + std::unique_ptr<NoCopyContainer> p(new NoCopyContainer{}); p->value = 42U; return std::move(p); } diff --git a/cmds/incidentd/src/incidentd_util.cpp b/cmds/incidentd/src/incidentd_util.cpp index 150ab9991a2d..ec0b79b34c02 100644 --- a/cmds/incidentd/src/incidentd_util.cpp +++ b/cmds/incidentd/src/incidentd_util.cpp @@ -184,11 +184,26 @@ static bool waitpid_with_timeout(pid_t pid, int timeout_ms, int* status) { sigemptyset(&child_mask); sigaddset(&child_mask, SIGCHLD); + // block SIGCHLD before we check if a process has exited if (sigprocmask(SIG_BLOCK, &child_mask, &old_mask) == -1) { - ALOGW("sigprocmask failed: %s", strerror(errno)); + ALOGW("*** sigprocmask failed: %s\n", strerror(errno)); return false; } + // if the child has exited already, handle and reset signals before leaving + pid_t child_pid = waitpid(pid, status, WNOHANG); + if (child_pid != pid) { + if (child_pid > 0) { + ALOGW("*** Waiting for pid %d, got pid %d instead\n", pid, child_pid); + sigprocmask(SIG_SETMASK, &old_mask, nullptr); + return false; + } + } else { + sigprocmask(SIG_SETMASK, &old_mask, nullptr); + return true; + } + + // wait for a SIGCHLD timespec ts; ts.tv_sec = timeout_ms / 1000; ts.tv_nsec = (timeout_ms % 1000) * 1000000; @@ -197,7 +212,7 @@ static bool waitpid_with_timeout(pid_t pid, int timeout_ms, int* status) { // Set the signals back the way they were. if (sigprocmask(SIG_SETMASK, &old_mask, nullptr) == -1) { - ALOGW("sigprocmask failed: %s", strerror(errno)); + ALOGW("*** sigprocmask failed: %s\n", strerror(errno)); if (ret == 0) { return false; } @@ -207,21 +222,21 @@ static bool waitpid_with_timeout(pid_t pid, int timeout_ms, int* status) { if (errno == EAGAIN) { errno = ETIMEDOUT; } else { - ALOGW("sigtimedwait failed: %s", strerror(errno)); + ALOGW("*** sigtimedwait failed: %s\n", strerror(errno)); } return false; } - pid_t child_pid = waitpid(pid, status, WNOHANG); - if (child_pid == pid) { - return true; - } - if (child_pid == -1) { - ALOGW("waitpid failed: %s", strerror(errno)); - } else { - ALOGW("Waiting for pid %d, got pid %d instead", pid, child_pid); + child_pid = waitpid(pid, status, WNOHANG); + if (child_pid != pid) { + if (child_pid != -1) { + ALOGW("*** Waiting for pid %d, got pid %d instead\n", pid, child_pid); + } else { + ALOGW("*** waitpid failed: %s\n", strerror(errno)); + } + return false; } - return false; + return true; } status_t kill_child(pid_t pid) { diff --git a/cmds/telecom/src/com/android/commands/telecom/Telecom.java b/cmds/telecom/src/com/android/commands/telecom/Telecom.java index 52f883b5fbb7..50c2e75c3a01 100644 --- a/cmds/telecom/src/com/android/commands/telecom/Telecom.java +++ b/cmds/telecom/src/com/android/commands/telecom/Telecom.java @@ -52,7 +52,7 @@ public final class Telecom extends BaseCommand { (new Telecom()).run(args); } - + private static final String CALLING_PACKAGE = Telecom.class.getPackageName(); private static final String COMMAND_SET_PHONE_ACCOUNT_ENABLED = "set-phone-account-enabled"; private static final String COMMAND_SET_PHONE_ACCOUNT_DISABLED = "set-phone-account-disabled"; private static final String COMMAND_REGISTER_PHONE_ACCOUNT = "register-phone-account"; @@ -286,7 +286,7 @@ public final class Telecom extends BaseCommand { final String label = nextArgRequired(); PhoneAccount account = PhoneAccount.builder(handle, label) .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER).build(); - mTelecomService.registerPhoneAccount(account); + mTelecomService.registerPhoneAccount(account, CALLING_PACKAGE); System.out.println("Success - " + handle + " registered."); } @@ -316,7 +316,7 @@ public final class Telecom extends BaseCommand { .addSupportedUriScheme(PhoneAccount.SCHEME_TEL) .addSupportedUriScheme(PhoneAccount.SCHEME_VOICEMAIL) .build(); - mTelecomService.registerPhoneAccount(account); + mTelecomService.registerPhoneAccount(account, CALLING_PACKAGE); System.out.println("Success - " + handle + " registered."); } @@ -358,7 +358,7 @@ public final class Telecom extends BaseCommand { private void runUnregisterPhoneAccount() throws RemoteException { final PhoneAccountHandle handle = getPhoneAccountHandleFromArgs(); - mTelecomService.unregisterPhoneAccount(handle); + mTelecomService.unregisterPhoneAccount(handle, CALLING_PACKAGE); System.out.println("Success - " + handle + " unregistered."); } @@ -395,11 +395,11 @@ public final class Telecom extends BaseCommand { } private void runGetDefaultDialer() throws RemoteException { - System.out.println(mTelecomService.getDefaultDialerPackage()); + System.out.println(mTelecomService.getDefaultDialerPackage(CALLING_PACKAGE)); } private void runGetSystemDialer() throws RemoteException { - System.out.println(mTelecomService.getSystemDialerPackage()); + System.out.println(mTelecomService.getSystemDialerPackage(CALLING_PACKAGE)); } private void runWaitOnHandler() throws RemoteException { diff --git a/core/api/current.txt b/core/api/current.txt index ddfbb44e44a6..f0cc128ee2cf 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -189,6 +189,7 @@ package android { field public static final String START_VIEW_APP_FEATURES = "android.permission.START_VIEW_APP_FEATURES"; field public static final String START_VIEW_PERMISSION_USAGE = "android.permission.START_VIEW_PERMISSION_USAGE"; field public static final String STATUS_BAR = "android.permission.STATUS_BAR"; + field public static final String SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE = "android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"; field public static final String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW"; field public static final String TRANSMIT_IR = "android.permission.TRANSMIT_IR"; field public static final String UNINSTALL_SHORTCUT = "com.android.launcher.permission.UNINSTALL_SHORTCUT"; @@ -5559,11 +5560,11 @@ package android.app { public final class GameState implements android.os.Parcelable { ctor public GameState(boolean, int); - ctor public GameState(boolean, int, @Nullable String, @NonNull android.os.Bundle); + ctor public GameState(boolean, int, int, int); method public int describeContents(); - method @Nullable public String getDescription(); - method @NonNull public android.os.Bundle getMetadata(); + method public int getLabel(); method public int getMode(); + method public int getQuality(); method public boolean isLoading(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.app.GameState> CREATOR; @@ -5677,6 +5678,7 @@ package android.app { } public class KeyguardManager { + method @RequiresPermission(android.Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) public void addKeyguardLockedStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.KeyguardManager.KeyguardLockedStateListener); method @Deprecated public android.content.Intent createConfirmDeviceCredentialIntent(CharSequence, CharSequence); method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult); method @Deprecated public boolean inKeyguardRestrictedInputMode(); @@ -5685,6 +5687,7 @@ package android.app { method public boolean isKeyguardLocked(); method public boolean isKeyguardSecure(); method @Deprecated public android.app.KeyguardManager.KeyguardLock newKeyguardLock(String); + method @RequiresPermission(android.Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) public void removeKeyguardLockedStateListener(@NonNull android.app.KeyguardManager.KeyguardLockedStateListener); method public void requestDismissKeyguard(@NonNull android.app.Activity, @Nullable android.app.KeyguardManager.KeyguardDismissCallback); } @@ -5700,6 +5703,10 @@ package android.app { method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void reenableKeyguard(); } + @java.lang.FunctionalInterface public static interface KeyguardManager.KeyguardLockedStateListener { + method public void onKeyguardLockedStateChanged(boolean); + } + @Deprecated public static interface KeyguardManager.OnKeyguardExitResult { method @Deprecated public void onKeyguardExitResult(boolean); } @@ -12280,6 +12287,7 @@ package android.content.pm { method @Nullable public java.util.Set<java.lang.String> getCategories(); method @Nullable public CharSequence getDisabledMessage(); method public int getDisabledReason(); + method public int getExcludedFromSurfaces(); method @Nullable public android.os.PersistableBundle getExtras(); method @NonNull public String getId(); method @Nullable public android.content.Intent getIntent(); @@ -12297,8 +12305,8 @@ package android.content.pm { method public boolean isDeclaredInManifest(); method public boolean isDynamic(); method public boolean isEnabled(); + method public boolean isExcludedFromSurfaces(int); method public boolean isImmutable(); - method public boolean isIncludedIn(int); method public boolean isPinned(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> CREATOR; @@ -14390,6 +14398,8 @@ package android.graphics { method @NonNull @Size(min=3) public abstract float[] fromXyz(@NonNull @Size(min=3) float[]); method @NonNull public static android.graphics.ColorSpace get(@NonNull android.graphics.ColorSpace.Named); method @IntRange(from=1, to=4) public int getComponentCount(); + method public int getDataSpace(); + method @Nullable public static android.graphics.ColorSpace getFromDataSpace(int); method @IntRange(from=android.graphics.ColorSpace.MIN_ID, to=android.graphics.ColorSpace.MAX_ID) public int getId(); method public abstract float getMaxValue(@IntRange(from=0, to=3) int); method public abstract float getMinValue(@IntRange(from=0, to=3) int); @@ -16391,12 +16401,8 @@ package android.graphics.pdf { package android.graphics.text { public final class LineBreakConfig { - ctor public LineBreakConfig(); method public int getLineBreakStyle(); method public int getLineBreakWordStyle(); - method public void set(@NonNull android.graphics.text.LineBreakConfig); - method public void setLineBreakStyle(int); - method public void setLineBreakWordStyle(int); field public static final int LINE_BREAK_STYLE_LOOSE = 1; // 0x1 field public static final int LINE_BREAK_STYLE_NONE = 0; // 0x0 field public static final int LINE_BREAK_STYLE_NORMAL = 2; // 0x2 @@ -16405,6 +16411,13 @@ package android.graphics.text { field public static final int LINE_BREAK_WORD_STYLE_PHRASE = 1; // 0x1 } + public static final class LineBreakConfig.Builder { + ctor public LineBreakConfig.Builder(); + method @NonNull public android.graphics.text.LineBreakConfig build(); + method @NonNull public android.graphics.text.LineBreakConfig.Builder setLineBreakStyle(int); + method @NonNull public android.graphics.text.LineBreakConfig.Builder setLineBreakWordStyle(int); + } + public class LineBreaker { method @NonNull public android.graphics.text.LineBreaker.Result computeLineBreaks(@NonNull android.graphics.text.MeasuredText, @NonNull android.graphics.text.LineBreaker.ParagraphConstraints, @IntRange(from=0) int); field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2 @@ -45049,7 +45062,7 @@ package android.text { public static final class PrecomputedText.Params { method public int getBreakStrategy(); method public int getHyphenationFrequency(); - method @Nullable public android.graphics.text.LineBreakConfig getLineBreakConfig(); + method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); method @NonNull public android.text.TextDirectionHeuristic getTextDirection(); method @NonNull public android.text.TextPaint getTextPaint(); } @@ -57357,7 +57370,8 @@ package android.widget { method public final android.text.Layout getLayout(); method public float getLetterSpacing(); method public int getLineBounds(int, android.graphics.Rect); - method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); + method public int getLineBreakStyle(); + method public int getLineBreakWordStyle(); method public int getLineCount(); method public int getLineHeight(); method public float getLineSpacingExtra(); @@ -57485,7 +57499,8 @@ package android.widget { method public void setKeyListener(android.text.method.KeyListener); method public void setLastBaselineToBottomHeight(@IntRange(from=0) @Px int); method public void setLetterSpacing(float); - method public void setLineBreakConfig(@NonNull android.graphics.text.LineBreakConfig); + method public void setLineBreakStyle(int); + method public void setLineBreakWordStyle(int); method public void setLineHeight(@IntRange(from=0) @Px int); method public void setLineSpacing(float, float); method public void setLines(int); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 2c0e6416b455..07b129021818 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1647,13 +1647,13 @@ package android.app.cloudsearch { public final class SearchRequest implements android.os.Parcelable { method public int describeContents(); + method @NonNull public String getCallerPackageName(); method public float getMaxLatencyMillis(); method @NonNull public String getQuery(); method @NonNull public String getRequestId(); method public int getResultNumber(); method public int getResultOffset(); method @NonNull public android.os.Bundle getSearchConstraints(); - method @NonNull public String getSource(); method public void writeToParcel(@NonNull android.os.Parcel, int); field public static final String CONSTRAINT_IS_PRESUBMIT_SUGGESTION = "android.app.cloudsearch.IS_PRESUBMIT_SUGGESTION"; field public static final String CONSTRAINT_SEARCH_PROVIDER_FILTER = "android.app.cloudsearch.SEARCH_PROVIDER_FILTER"; @@ -2793,7 +2793,7 @@ package android.companion.virtual { method public void addActivityListener(@NonNull android.companion.virtual.VirtualDeviceManager.ActivityListener, @NonNull java.util.concurrent.Executor); method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.audio.VirtualAudioDevice createVirtualAudioDevice(@NonNull android.hardware.display.VirtualDisplay, @Nullable java.util.concurrent.Executor, @Nullable android.companion.virtual.audio.VirtualAudioDevice.AudioConfigurationChangeCallback); - method @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int, @Nullable android.view.Surface, int, @NonNull java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); + method @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int, @Nullable android.view.Surface, int, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualKeyboard createVirtualKeyboard(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualMouse createVirtualMouse(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 9757b2ff318f..6ebf18820b0c 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -618,7 +618,7 @@ package android.app.blob { package android.app.cloudsearch { public static final class SearchRequest.Builder { - method @NonNull public android.app.cloudsearch.SearchRequest.Builder setSource(@NonNull String); + method @NonNull public android.app.cloudsearch.SearchRequest.Builder setCallerPackageName(@NonNull String); } } @@ -1462,6 +1462,7 @@ package android.media { method @NonNull @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public android.media.AudioTrack getCallUplinkInjectionAudioTrack(@NonNull android.media.AudioFormat); method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int); method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes); + method @Nullable public static String getHalVersion(); method public static final int[] getPublicStreamTypes(); method @NonNull public java.util.List<java.lang.Integer> getReportedSurroundFormats(); method public int getStreamMinVolumeInt(int); diff --git a/core/java/android/app/GameState.java b/core/java/android/app/GameState.java index 979dd34e8276..fe6e5543a662 100644 --- a/core/java/android/app/GameState.java +++ b/core/java/android/app/GameState.java @@ -18,8 +18,6 @@ package android.app; import android.annotation.IntDef; import android.annotation.NonNull; -import android.annotation.Nullable; -import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -88,12 +86,11 @@ public final class GameState implements Parcelable { // One of the states listed above. private final @GameStateMode int mMode; - // This is a game specific description. For example can be level or scene name. - private final @Nullable String mDescription; + // A developer-supplied enum, e.g. to indicate level or scene. + private final int mLabel; - // This contains any other game specific parameters not covered by the fields above. It can be - // quality parameter data, settings, or game modes. - private final @NonNull Bundle mMetaData; + // The developer-supplied enum, e.g. to indicate the current quality level. + private final int mQuality; /** * Create a GameState with the specified loading status. @@ -101,29 +98,28 @@ public final class GameState implements Parcelable { * @param mode The game state mode of type @GameStateMode. */ public GameState(boolean isLoading, @GameStateMode int mode) { - this(isLoading, mode, null, new Bundle()); + this(isLoading, mode, -1, -1); } /** * Create a GameState with the given state variables. * @param isLoading Whether the game is in the loading state. - * @param mode The game state mode of type @GameStateMode. - * @param description An optional description of the state. - * @param metaData Optional metadata. + * @param mode The game state mode. + * @param label An optional developer-supplied enum e.g. for the current level. + * @param quality An optional developer-supplied enum, e.g. for the current quality level. */ - public GameState(boolean isLoading, @GameStateMode int mode, @Nullable String description, - @NonNull Bundle metaData) { + public GameState(boolean isLoading, @GameStateMode int mode, int label, int quality) { mIsLoading = isLoading; mMode = mode; - mDescription = description; - mMetaData = metaData; + mLabel = label; + mQuality = quality; } private GameState(Parcel in) { mIsLoading = in.readBoolean(); mMode = in.readInt(); - mDescription = in.readString(); - mMetaData = in.readBundle(); + mLabel = in.readInt(); + mQuality = in.readInt(); } /** @@ -141,17 +137,19 @@ public final class GameState implements Parcelable { } /** - * @return The state description, or null if one is not set. + * @return The developer-supplied enum, e.g. to indicate level or scene. The default value (if + * not supplied) is -1. */ - public @Nullable String getDescription() { - return mDescription; + public int getLabel() { + return mLabel; } /** - * @return metadata associated with the state. + * @return The developer-supplied enum, e.g. to indicate the current quality level. The default + * value (if not suplied) is -1. */ - public @NonNull Bundle getMetadata() { - return mMetaData; + public int getQuality() { + return mQuality; } @Override @@ -163,8 +161,8 @@ public final class GameState implements Parcelable { public void writeToParcel(@NonNull Parcel parcel, int flags) { parcel.writeBoolean(mIsLoading); parcel.writeInt(mMode); - parcel.writeString(mDescription); - parcel.writeBundle(mMetaData); + parcel.writeInt(mLabel); + parcel.writeInt(mQuality); } /** diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 7c48a5738e51..fe0edfea59c8 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -510,7 +510,6 @@ interface IActivityManager { void noteAlarmFinish(in IIntentSender sender, in WorkSource workSource, int sourceUid, in String tag); @UnsupportedAppUsage int getPackageProcessState(in String packageName, in String callingPackage); - void updateDeviceOwner(in String packageName); // Start of N transactions // Start Binder transaction tracking for all applications. diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 99100003e5b3..87ba197d8052 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -52,6 +52,7 @@ import android.view.WindowManager.LayoutParams; import android.view.WindowManagerGlobal; import com.android.internal.policy.IKeyguardDismissCallback; +import com.android.internal.policy.IKeyguardLockedStateListener; import com.android.internal.util.Preconditions; import com.android.internal.widget.IWeakEscrowTokenActivatedListener; import com.android.internal.widget.IWeakEscrowTokenRemovedListener; @@ -183,6 +184,10 @@ public class KeyguardManager { }) @interface LockTypes {} + // TODO(b/220379118): register only one binder listener and keep a map of listener to executor. + private final ArrayMap<KeyguardLockedStateListener, IKeyguardLockedStateListener> + mKeyguardLockedStateListeners = new ArrayMap<>(); + /** * Get an intent to prompt the user to confirm credentials (pin, pattern, password or biometrics * if enrolled) for the current user of the device. The caller is expected to launch this @@ -534,7 +539,7 @@ public class KeyguardManager { /** * Return whether the keyguard is currently locked. * - * @return true if keyguard is locked. + * @return {@code true} if the keyguard is locked. */ public boolean isKeyguardLocked() { try { @@ -550,7 +555,7 @@ public class KeyguardManager { * * <p>See also {@link #isDeviceSecure()} which ignores SIM locked states. * - * @return true if a PIN, pattern or password is set or a SIM card is locked. + * @return {@code true} if a PIN, pattern or password is set or a SIM card is locked. */ public boolean isKeyguardSecure() { try { @@ -565,7 +570,7 @@ public class KeyguardManager { * keyguard password emergency screen). When in such mode, certain keys, * such as the Home key and the right soft keys, don't work. * - * @return true if in keyguard restricted input mode. + * @return {@code true} if in keyguard restricted input mode. * @deprecated Use {@link #isKeyguardLocked()} instead. */ public boolean inKeyguardRestrictedInputMode() { @@ -576,7 +581,7 @@ public class KeyguardManager { * Returns whether the device is currently locked and requires a PIN, pattern or * password to unlock. * - * @return true if unlocking the device currently requires a PIN, pattern or + * @return {@code true} if unlocking the device currently requires a PIN, pattern or * password. */ public boolean isDeviceLocked() { @@ -603,7 +608,7 @@ public class KeyguardManager { * * <p>See also {@link #isKeyguardSecure} which treats SIM locked states as secure. * - * @return true if a PIN, pattern or password was set. + * @return {@code true} if a PIN, pattern or password was set. */ public boolean isDeviceSecure() { return isDeviceSecure(mContext.getUserId()); @@ -762,7 +767,7 @@ public class KeyguardManager { * as the output of String#getBytes * @param complexity - complexity level imposed by the requester * as defined in {@code DevicePolicyManager.PasswordComplexity} - * @return true if the password is valid, false otherwise + * @return {@code true} if the password is valid, false otherwise * @hide */ @RequiresPermission(Manifest.permission.SET_INITIAL_LOCK) @@ -821,7 +826,7 @@ public class KeyguardManager { * as the output of String#getBytes * @param complexity - complexity level imposed by the requester * as defined in {@code DevicePolicyManager.PasswordComplexity} - * @return true if the lock is successfully set, false otherwise + * @return {@code true} if the lock is successfully set, false otherwise * @hide */ @RequiresPermission(Manifest.permission.SET_INITIAL_LOCK) @@ -903,8 +908,8 @@ public class KeyguardManager { /** * Remove a weak escrow token. * - * @return true if the given handle refers to a valid weak token previously returned from - * {@link #addWeakEscrowToken}, whether it's active or not. return false otherwise. + * @return {@code true} if the given handle refers to a valid weak token previously returned + * from {@link #addWeakEscrowToken}, whether it's active or not. return false otherwise. * @hide */ @RequiresFeature(PackageManager.FEATURE_AUTOMOTIVE) @@ -944,7 +949,7 @@ public class KeyguardManager { /** * Register the given WeakEscrowTokenRemovedListener. * - * @return true if the listener is registered successfully, return false otherwise. + * @return {@code true} if the listener is registered successfully, return false otherwise. * @hide */ @RequiresFeature(PackageManager.FEATURE_AUTOMOTIVE) @@ -982,7 +987,7 @@ public class KeyguardManager { /** * Unregister the given WeakEscrowTokenRemovedListener. * - * @return true if the listener is unregistered successfully, return false otherwise. + * @return {@code true} if the listener is unregistered successfully, return false otherwise. * @hide */ @RequiresFeature(PackageManager.FEATURE_AUTOMOTIVE) @@ -1076,4 +1081,61 @@ public class KeyguardManager { throw new IllegalArgumentException("Unknown lock type " + lockType); } } + + /** + * Listener for keyguard locked state changes. + */ + @FunctionalInterface + public interface KeyguardLockedStateListener { + /** + * Callback function that executes when the keyguard locked state changes. + */ + void onKeyguardLockedStateChanged(boolean isKeyguardLocked); + } + + /** + * Registers a listener to execute when the keyguard visibility changes. + * + * @param listener The listener to add to receive keyguard visibility changes. + */ + @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) + public void addKeyguardLockedStateListener(@NonNull @CallbackExecutor Executor executor, + @NonNull KeyguardLockedStateListener listener) { + synchronized (mKeyguardLockedStateListeners) { + try { + final IKeyguardLockedStateListener innerListener = + new IKeyguardLockedStateListener.Stub() { + @Override + public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) { + executor.execute( + () -> listener.onKeyguardLockedStateChanged(isKeyguardLocked)); + } + }; + mWM.addKeyguardLockedStateListener(innerListener); + mKeyguardLockedStateListeners.put(listener, innerListener); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + + /** + * Unregisters a listener that executes when the keyguard visibility changes. + */ + @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) + public void removeKeyguardLockedStateListener(@NonNull KeyguardLockedStateListener listener) { + synchronized (mKeyguardLockedStateListeners) { + IKeyguardLockedStateListener innerListener = mKeyguardLockedStateListeners.get( + listener); + if (innerListener == null) { + return; + } + try { + mWM.removeKeyguardLockedStateListener(innerListener); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + mKeyguardLockedStateListeners.remove(listener); + } + } } diff --git a/core/java/android/app/cloudsearch/SearchRequest.java b/core/java/android/app/cloudsearch/SearchRequest.java index 4d6507abfd61..bf783255b3d9 100644 --- a/core/java/android/app/cloudsearch/SearchRequest.java +++ b/core/java/android/app/cloudsearch/SearchRequest.java @@ -100,7 +100,7 @@ public final class SearchRequest implements Parcelable { * */ @NonNull - private String mSource; + private String mCallerPackageName; private SearchRequest(Parcel in) { this.mQuery = in.readString(); @@ -109,17 +109,17 @@ public final class SearchRequest implements Parcelable { this.mMaxLatencyMillis = in.readFloat(); this.mSearchConstraints = in.readBundle(); this.mId = in.readString(); - this.mSource = in.readString(); + this.mCallerPackageName = in.readString(); } private SearchRequest(String query, int resultOffset, int resultNumber, float maxLatencyMillis, - Bundle searchConstraints, String source) { + Bundle searchConstraints, String callerPackageName) { mQuery = query; mResultOffset = resultOffset; mResultNumber = resultNumber; mMaxLatencyMillis = maxLatencyMillis; mSearchConstraints = searchConstraints; - mSource = source; + mCallerPackageName = callerPackageName; } /** Returns the original query. */ @@ -151,8 +151,8 @@ public final class SearchRequest implements Parcelable { /** Gets the caller's package name. */ @NonNull - public String getSource() { - return mSource; + public String getCallerPackageName() { + return mCallerPackageName; } /** Returns the search request id, which is used to identify the request. */ @@ -169,8 +169,8 @@ public final class SearchRequest implements Parcelable { * * @hide */ - public void setSource(@NonNull String source) { - this.mSource = source; + public void setCallerPackageName(@NonNull String callerPackageName) { + this.mCallerPackageName = callerPackageName; } private SearchRequest(Builder b) { @@ -179,7 +179,7 @@ public final class SearchRequest implements Parcelable { mResultNumber = b.mResultNumber; mMaxLatencyMillis = b.mMaxLatencyMillis; mSearchConstraints = requireNonNull(b.mSearchConstraints); - mSource = requireNonNull(b.mSource); + mCallerPackageName = requireNonNull(b.mCallerPackageName); } /** @@ -207,7 +207,7 @@ public final class SearchRequest implements Parcelable { dest.writeFloat(this.mMaxLatencyMillis); dest.writeBundle(this.mSearchConstraints); dest.writeString(getRequestId()); - dest.writeString(this.mSource); + dest.writeString(this.mCallerPackageName); } @Override @@ -231,7 +231,7 @@ public final class SearchRequest implements Parcelable { && mResultNumber == that.mResultNumber && mMaxLatencyMillis == that.mMaxLatencyMillis && Objects.equals(mSearchConstraints, that.mSearchConstraints) - && Objects.equals(mSource, that.mSource); + && Objects.equals(mCallerPackageName, that.mCallerPackageName); } @Override @@ -246,14 +246,15 @@ public final class SearchRequest implements Parcelable { } return String.format("SearchRequest: {query:%s,offset:%d;number:%d;max_latency:%f;" - + "is_presubmit:%b;search_provider:%s;source:%s}", mQuery, mResultOffset, - mResultNumber, mMaxLatencyMillis, isPresubmit, searchProvider, mSource); + + "is_presubmit:%b;search_provider:%s;callerPackageName:%s}", mQuery, + mResultOffset, mResultNumber, mMaxLatencyMillis, isPresubmit, searchProvider, + mCallerPackageName); } @Override public int hashCode() { return Objects.hash(mQuery, mResultOffset, mResultNumber, mMaxLatencyMillis, - mSearchConstraints, mSource); + mSearchConstraints, mCallerPackageName); } /** @@ -268,7 +269,7 @@ public final class SearchRequest implements Parcelable { private int mResultNumber; private float mMaxLatencyMillis; private Bundle mSearchConstraints; - private String mSource; + private String mCallerPackageName; /** * @@ -284,7 +285,7 @@ public final class SearchRequest implements Parcelable { mResultNumber = 10; mMaxLatencyMillis = 200; mSearchConstraints = Bundle.EMPTY; - mSource = "DEFAULT_CALLER"; + mCallerPackageName = "DEFAULT_CALLER"; } /** Sets the input query. */ @@ -329,8 +330,8 @@ public final class SearchRequest implements Parcelable { */ @NonNull @TestApi - public Builder setSource(@NonNull String source) { - this.mSource = source; + public Builder setCallerPackageName(@NonNull String callerPackageName) { + this.mCallerPackageName = callerPackageName; return this; } @@ -343,7 +344,7 @@ public final class SearchRequest implements Parcelable { } return new SearchRequest(mQuery, mResultOffset, mResultNumber, mMaxLatencyMillis, - mSearchConstraints, mSource); + mSearchConstraints, mCallerPackageName); } } } diff --git a/core/java/android/companion/virtual/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java index 99ce14743a6f..02d140f047cc 100644 --- a/core/java/android/companion/virtual/VirtualDeviceManager.java +++ b/core/java/android/companion/virtual/VirtualDeviceManager.java @@ -48,7 +48,6 @@ import android.os.ResultReceiver; import android.util.ArrayMap; import android.view.Surface; -import java.util.Objects; import java.util.concurrent.Executor; /** @@ -223,7 +222,8 @@ public final class VirtualDeviceManager { * {@link DisplayManager#VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY * VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY}. * @param executor The executor on which {@code callback} will be invoked. This is ignored - * if {@code callback} is {@code null}. + * if {@code callback} is {@code null}. If {@code callback} is specified, this executor must + * not be null. * @param callback Callback to call when the state of the {@link VirtualDisplay} changes * @return The newly created virtual display, or {@code null} if the application could * not create the virtual display. @@ -237,7 +237,7 @@ public final class VirtualDeviceManager { @IntRange(from = 1) int densityDpi, @Nullable Surface surface, @VirtualDisplayFlag int flags, - @NonNull @CallbackExecutor Executor executor, + @Nullable @CallbackExecutor Executor executor, @Nullable VirtualDisplay.Callback callback) { // TODO(b/205343547): Handle display groups properly instead of creating a new display // group for every new virtual display created using this API. @@ -253,7 +253,7 @@ public final class VirtualDeviceManager { .setFlags(getVirtualDisplayFlags(flags)) .build(), callback, - Objects.requireNonNull(executor)); + executor); } /** diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 67a2dc84728d..76c998bc7a82 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -2421,15 +2421,6 @@ public class PackageInstaller { /** {@hide} */ private static final int[] NO_SESSIONS = {}; - /** @hide */ - @IntDef(prefix = { "SESSION_" }, value = { - SESSION_NO_ERROR, - SESSION_VERIFICATION_FAILED, - SESSION_ACTIVATION_FAILED, - SESSION_UNKNOWN_ERROR, - SESSION_CONFLICT}) - @Retention(RetentionPolicy.SOURCE) - public @interface SessionErrorCode {} /** * @deprecated use {@link #SESSION_NO_ERROR}. */ @@ -3113,7 +3104,7 @@ public class PackageInstaller { * If something went wrong with a staged session, clients can check this error code to * understand which kind of failure happened. Only meaningful if {@code isStaged} is true. */ - public @SessionErrorCode int getStagedSessionErrorCode() { + public int getStagedSessionErrorCode() { checkSessionIsStaged(); return mSessionErrorCode; } @@ -3128,7 +3119,7 @@ public class PackageInstaller { } /** {@hide} */ - public void setSessionErrorCode(@SessionErrorCode int errorCode, String errorMessage) { + public void setSessionErrorCode(int errorCode, String errorMessage) { mSessionErrorCode = errorCode; mSessionErrorMessage = errorMessage; } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index a162c41e095e..31cb66304096 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2202,6 +2202,14 @@ public abstract class PackageManager { */ public static final int INSTALL_FAILED_BAD_PERMISSION_GROUP = -127; + /** + * Installation failed return code: an error occurred during the activation phase of this + * session. + * + * @hide + */ + public static final int INSTALL_ACTIVATION_FAILED = -128; + /** @hide */ @IntDef(flag = true, prefix = { "DELETE_" }, value = { DELETE_KEEP_DATA, diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index 41dd5bb3f21d..dc7cd71101b2 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -2257,10 +2257,20 @@ public final class ShortcutInfo implements Parcelable { } /** - * Return true if the shortcut is included in specified surface. + * Return true if the shortcut is excluded from specified surface. */ - public boolean isIncludedIn(@Surface int surface) { - return (mExcludedSurfaces & surface) == 0; + public boolean isExcludedFromSurfaces(@Surface int surface) { + return (mExcludedSurfaces & surface) != 0; + } + + /** + * Returns a bitmask of all surfaces this shortcut is excluded from. + * + * @see ShortcutInfo.Builder#setExcludedFromSurfaces(int) + */ + @Surface + public int getExcludedFromSurfaces() { + return mExcludedSurfaces; } /** @@ -2522,7 +2532,7 @@ public final class ShortcutInfo implements Parcelable { if (isLongLived()) { sb.append("Liv"); } - if (!isIncludedIn(SURFACE_LAUNCHER)) { + if (isExcludedFromSurfaces(SURFACE_LAUNCHER)) { sb.append("Hid-L"); } sb.append("]"); diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index c053c9287fac..c3417310dd40 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -957,7 +957,7 @@ public final class DisplayManager { public VirtualDisplay createVirtualDisplay(@Nullable IVirtualDevice virtualDevice, @NonNull VirtualDisplayConfig virtualDisplayConfig, @Nullable VirtualDisplay.Callback callback, - @NonNull Executor executor) { + @Nullable Executor executor) { return mGlobal.createVirtualDisplay(mContext, null /* projection */, virtualDevice, virtualDisplayConfig, callback, executor, null); } diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 889100d0f242..a62bbf623000 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -1054,6 +1054,14 @@ public final class DisplayManagerGlobal { @Nullable private final VirtualDisplay.Callback mCallback; @Nullable private final Executor mExecutor; + /** + * Creates a virtual display callback. + * + * @param callback The callback to call for virtual display events, or {@code null} if the + * caller does not wish to receive callback events. + * @param executor The executor to call the {@code callback} on. Must not be {@code null} if + * the callback is not {@code null}. + */ VirtualDisplayCallback(VirtualDisplay.Callback callback, Executor executor) { mCallback = callback; mExecutor = mCallback != null ? Objects.requireNonNull(executor) : null; diff --git a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java index bf4b51431c6f..eed92c12eb83 100644 --- a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java +++ b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java @@ -37,6 +37,8 @@ import android.os.Message; import android.os.RemoteException; import android.util.Log; +import java.io.IOException; + /** * The SoundTriggerModule provides APIs to control sound models and sound detection * on a given sound trigger hardware module. @@ -137,13 +139,39 @@ public class SoundTriggerModule { if (model instanceof SoundTrigger.GenericSoundModel) { SoundModel aidlModel = ConversionUtil.api2aidlGenericSoundModel( (SoundTrigger.GenericSoundModel) model); - soundModelHandle[0] = mService.loadModel(aidlModel); + try { + soundModelHandle[0] = mService.loadModel(aidlModel); + } finally { + // TODO(b/219825762): We should be able to use the entire object in a + // try-with-resources + // clause, instead of having to explicitly close internal fields. + if (aidlModel.data != null) { + try { + aidlModel.data.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to close file", e); + } + } + } return SoundTrigger.STATUS_OK; } if (model instanceof SoundTrigger.KeyphraseSoundModel) { PhraseSoundModel aidlModel = ConversionUtil.api2aidlPhraseSoundModel( (SoundTrigger.KeyphraseSoundModel) model); - soundModelHandle[0] = mService.loadPhraseModel(aidlModel); + try { + soundModelHandle[0] = mService.loadPhraseModel(aidlModel); + } finally { + // TODO(b/219825762): We should be able to use the entire object in a + // try-with-resources + // clause, instead of having to explicitly close internal fields. + if (aidlModel.common.data != null) { + try { + aidlModel.common.data.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to close file", e); + } + } + } return SoundTrigger.STATUS_OK; } return SoundTrigger.STATUS_BAD_VALUE; diff --git a/core/java/android/text/PrecomputedText.java b/core/java/android/text/PrecomputedText.java index 9307e566b5c3..f31a690c7774 100644 --- a/core/java/android/text/PrecomputedText.java +++ b/core/java/android/text/PrecomputedText.java @@ -99,7 +99,7 @@ public class PrecomputedText implements Spannable { private final @Layout.HyphenationFrequency int mHyphenationFrequency; // The line break configuration for calculating text wrapping. - private final @Nullable LineBreakConfig mLineBreakConfig; + private final @NonNull LineBreakConfig mLineBreakConfig; /** * A builder for creating {@link Params}. @@ -119,7 +119,7 @@ public class PrecomputedText implements Spannable { Layout.HYPHENATION_FREQUENCY_NORMAL; // The line break configuration for calculating text wrapping. - private @Nullable LineBreakConfig mLineBreakConfig; + private @NonNull LineBreakConfig mLineBreakConfig = LineBreakConfig.NONE; /** * Builder constructor. @@ -212,7 +212,7 @@ public class PrecomputedText implements Spannable { // For the external developers, use Builder instead. /** @hide */ public Params(@NonNull TextPaint paint, - @Nullable LineBreakConfig lineBreakConfig, + @NonNull LineBreakConfig lineBreakConfig, @NonNull TextDirectionHeuristic textDir, @Layout.BreakStrategy int strategy, @Layout.HyphenationFrequency int frequency) { @@ -260,11 +260,12 @@ public class PrecomputedText implements Spannable { } /** - * Return the line break configuration for this text. + * Returns the {@link LineBreakConfig} for this text. * - * @return the current line break configuration, null if no line break configuration is set. + * @return the current line break configuration. The {@link LineBreakConfig} with default + * values will be returned if no line break configuration is set. */ - public @Nullable LineBreakConfig getLineBreakConfig() { + public @NonNull LineBreakConfig getLineBreakConfig() { return mLineBreakConfig; } @@ -297,9 +298,9 @@ public class PrecomputedText implements Spannable { /** @hide */ public @CheckResultUsableResult int checkResultUsable(@NonNull TextPaint paint, @NonNull TextDirectionHeuristic textDir, @Layout.BreakStrategy int strategy, - @Layout.HyphenationFrequency int frequency, @Nullable LineBreakConfig lbConfig) { + @Layout.HyphenationFrequency int frequency, @NonNull LineBreakConfig lbConfig) { if (mBreakStrategy == strategy && mHyphenationFrequency == frequency - && isLineBreakEquals(mLineBreakConfig, lbConfig) + && mLineBreakConfig.equals(lbConfig) && mPaint.equalsForTextMeasurement(paint)) { return mTextDir == textDir ? USABLE : NEED_RECOMPUTE; } else { @@ -308,29 +309,6 @@ public class PrecomputedText implements Spannable { } /** - * Check the two LineBreakConfig instances are equal. - * This method assumes they are equal if one parameter is null and the other parameter has - * a LineBreakStyle value of LineBreakConfig.LINE_BREAK_STYLE_NONE. - * - * @param o1 the first LineBreakConfig instance. - * @param o2 the second LineBreakConfig instance. - * @return true if the two LineBreakConfig instances are equal. - */ - private boolean isLineBreakEquals(LineBreakConfig o1, LineBreakConfig o2) { - if (Objects.equals(o1, o2)) { - return true; - } - if (o1 == null && (o2 != null - && o2.getLineBreakStyle() == LineBreakConfig.LINE_BREAK_STYLE_NONE)) { - return true; - } else if (o2 == null && (o1 != null - && o1.getLineBreakStyle() == LineBreakConfig.LINE_BREAK_STYLE_NONE)) { - return true; - } - return false; - } - - /** * Check if the same text layout. * * @return true if this and the given param result in the same text layout diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index b10fc37bff2f..d63d66e965c2 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -410,7 +410,8 @@ public class StaticLayout extends Layout { * * @param lineBreakConfig the line break configuration for text wrapping. * @return this builder, useful for chaining. - * @see android.widget.TextView#setLineBreakConfig + * @see android.widget.TextView#setLineBreakStyle + * @see android.widget.TextView#setLineBreakWordStyle */ @NonNull public Builder setLineBreakConfig(@NonNull LineBreakConfig lineBreakConfig) { diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index 188bc3f51c52..ef2170687aba 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -71,8 +71,8 @@ public class FeatureFlagUtils { * Hide back key in the Settings two pane design. * @hide */ - public static final String SETTINGS_HIDE_SECONDARY_PAGE_BACK_BUTTON_IN_TWO_PANE = - "settings_hide_secondary_page_back_button_in_two_pane"; + public static final String SETTINGS_HIDE_SECOND_LAYER_PAGE_NAVIGATE_UP_BUTTON_IN_TWO_PANE = + "settings_hide_second_layer_page_navigate_up_button_in_two_pane"; private static final Map<String, String> DEFAULT_FLAGS; @@ -99,7 +99,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_APP_LANGUAGE_SELECTION, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); DEFAULT_FLAGS.put(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME, "false"); - DEFAULT_FLAGS.put(SETTINGS_HIDE_SECONDARY_PAGE_BACK_BUTTON_IN_TWO_PANE, "true"); + DEFAULT_FLAGS.put(SETTINGS_HIDE_SECOND_LAYER_PAGE_NAVIGATE_UP_BUTTON_IN_TWO_PANE, "true"); } private static final Set<String> PERSISTENT_FLAGS; @@ -109,7 +109,7 @@ public class FeatureFlagUtils { PERSISTENT_FLAGS.add(SETTINGS_SUPPORT_LARGE_SCREEN); PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); PERSISTENT_FLAGS.add(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME); - PERSISTENT_FLAGS.add(SETTINGS_HIDE_SECONDARY_PAGE_BACK_BUTTON_IN_TWO_PANE); + PERSISTENT_FLAGS.add(SETTINGS_HIDE_SECOND_LAYER_PAGE_NAVIGATE_UP_BUTTON_IN_TWO_PANE); } /** diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index ce21086931da..53b842a0f3a2 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -18,6 +18,7 @@ package android.view; import com.android.internal.os.IResultReceiver; import com.android.internal.policy.IKeyguardDismissCallback; +import com.android.internal.policy.IKeyguardLockedStateListener; import com.android.internal.policy.IShortcutService; import android.app.IAssistDataReceiver; @@ -199,6 +200,9 @@ interface IWindowManager boolean isKeyguardSecure(int userId); void dismissKeyguard(IKeyguardDismissCallback callback, CharSequence message); + void addKeyguardLockedStateListener(in IKeyguardLockedStateListener listener); + void removeKeyguardLockedStateListener(in IKeyguardLockedStateListener listener); + // Requires INTERACT_ACROSS_USERS_FULL permission void setSwitchingUser(boolean switching); diff --git a/core/java/android/view/ImeFocusController.java b/core/java/android/view/ImeFocusController.java index 3fc9f6bcbdeb..b48b5258237f 100644 --- a/core/java/android/view/ImeFocusController.java +++ b/core/java/android/view/ImeFocusController.java @@ -54,13 +54,11 @@ public final class ImeFocusController { @NonNull private InputMethodManagerDelegate getImmDelegate() { - InputMethodManagerDelegate delegate = mDelegate; - if (delegate != null) { - return delegate; + if (mDelegate == null) { + mDelegate = mViewRootImpl.mContext.getSystemService( + InputMethodManager.class).getDelegate(); } - delegate = mViewRootImpl.mContext.getSystemService(InputMethodManager.class).getDelegate(); - mDelegate = delegate; - return delegate; + return mDelegate; } /** Called when the view root is moved to a different display. */ diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 1566f9e50f66..785735c2b1e1 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -184,6 +184,7 @@ public final class ThreadedRenderer extends HardwareRenderer { */ public static final String DEBUG_FORCE_DARK = "debug.hwui.force_dark"; + public static int EGL_CONTEXT_PRIORITY_REALTIME_NV = 0x3357; public static int EGL_CONTEXT_PRIORITY_HIGH_IMG = 0x3101; public static int EGL_CONTEXT_PRIORITY_MEDIUM_IMG = 0x3102; public static int EGL_CONTEXT_PRIORITY_LOW_IMG = 0x3103; diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index cd8dd86b8e02..6c647cea06fd 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -385,6 +385,25 @@ import java.util.List; * <li>{@link #getText()} - The text of the announcement.</li> * </ul> * </p> + * <p> + * <b>speechStateChanged</b> + * <em>Type:</em> {@link #TYPE_SPEECH_STATE_CHANGE}</br> + * Represents a change in the speech state defined by the + * bit mask of the speech state change types. + * A change in the speech state occurs when an application wants to signal that + * it is either speaking or listening for human speech. + * This event helps avoid conflicts where two applications want to speak or one listens + * when another speaks. + * When sending this event, the sender should ensure that the accompanying state change types + * make sense. For example, the sender should not send + * {@link #SPEECH_STATE_SPEAKING_START} and {@link #SPEECH_STATE_SPEAKING_END} together. + * <em>Properties:</em></br> + * <ul> + * <li>{@link #getSpeechStateChangeTypes()} - The type of state changes</li> + * <li>{@link #getPackageName()} - The package name of the source.</li> + * <li>{@link #getEventTime()} - The event time.</li> + * </ul> + * </p> * * @see android.view.accessibility.AccessibilityManager * @see android.accessibilityservice.AccessibilityService @@ -553,14 +572,20 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par public static final int TYPE_ASSIST_READING_CONTEXT = 0x01000000; /** - * Represents a change in the speech state defined by the content-change types. A change in the - * speech state occurs when another service is either speaking or listening for human speech. - * This event helps avoid conflicts where two services want to speak or one listens + * Represents a change in the speech state defined by the speech state change types. + * A change in the speech state occurs when an application wants to signal that it is either + * speaking or listening for human speech. + * This event helps avoid conflicts where two applications want to speak or one listens * when another speaks. + * When sending this event, the sender should ensure that the accompanying state change types + * make sense. For example, the sender should not send + * {@link #SPEECH_STATE_SPEAKING_START} and {@link #SPEECH_STATE_SPEAKING_END} together. * @see #SPEECH_STATE_SPEAKING_START * @see #SPEECH_STATE_SPEAKING_END * @see #SPEECH_STATE_LISTENING_START * @see #SPEECH_STATE_LISTENING_END + * @see #getSpeechStateChangeTypes + * @see #setSpeechStateChangeTypes */ public static final int TYPE_SPEECH_STATE_CHANGE = 0x02000000; @@ -1062,7 +1087,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par } /** - * Gets the speech state signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event + * Gets the bit mask of the speech state signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event * * @see #SPEECH_STATE_SPEAKING_START * @see #SPEECH_STATE_SPEAKING_END @@ -1073,7 +1098,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par return mSpeechStateChangeTypes; } - private static String speechStateChangedTypesToString(int types) { + private static String speechStateChangeTypesToString(int types) { return BitUtils.flagsToString( types, AccessibilityEvent::singleSpeechStateChangeTypeToString); } @@ -1094,14 +1119,18 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par } /** - * Sets the speech state type signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event + * Sets the bit mask of the speech state change types + * signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event. + * The sender is responsible for ensuring that the state change types make sense. For example, + * the sender should not send + * {@link #SPEECH_STATE_SPEAKING_START} and {@link #SPEECH_STATE_SPEAKING_END} together. * * @see #SPEECH_STATE_SPEAKING_START * @see #SPEECH_STATE_SPEAKING_END * @see #SPEECH_STATE_LISTENING_START * @see #SPEECH_STATE_LISTENING_END */ - public void setSpeechStateChangeTypes(int state) { + public void setSpeechStateChangeTypes(@SpeechStateChangeTypes int state) { enforceNotSealed(); mSpeechStateChangeTypes = state; } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3dfb4a5a084a..dbaf0aaccb1a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -788,7 +788,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private Layout mLayout; private boolean mLocalesChanged = false; private int mTextSizeUnit = -1; - private LineBreakConfig mLineBreakConfig = new LineBreakConfig(); + private int mLineBreakStyle = DEFAULT_LINE_BREAK_STYLE; + private int mLineBreakWordStyle = DEFAULT_LINE_BREAK_WORD_STYLE; // This is used to reflect the current user preference for changing font weight and making text // more bold. @@ -1457,13 +1458,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case com.android.internal.R.styleable.TextView_lineBreakStyle: - mLineBreakConfig.setLineBreakStyle( - a.getInt(attr, LineBreakConfig.LINE_BREAK_STYLE_NONE)); + mLineBreakStyle = a.getInt(attr, LineBreakConfig.LINE_BREAK_STYLE_NONE); break; case com.android.internal.R.styleable.TextView_lineBreakWordStyle: - mLineBreakConfig.setLineBreakWordStyle( - a.getInt(attr, LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE)); + mLineBreakWordStyle = a.getInt(attr, + LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE); break; case com.android.internal.R.styleable.TextView_autoSizeTextType: @@ -4301,13 +4301,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @LineBreakConfig.LineBreakStyle int lineBreakStyle, @LineBreakConfig.LineBreakWordStyle int lineBreakWordStyle) { boolean updated = false; - if (isLineBreakStyleSpecified && mLineBreakConfig.getLineBreakStyle() != lineBreakStyle) { - mLineBreakConfig.setLineBreakStyle(lineBreakStyle); + if (isLineBreakStyleSpecified && mLineBreakStyle != lineBreakStyle) { + mLineBreakStyle = lineBreakStyle; updated = true; } - if (isLineBreakWordStyleSpecified - && mLineBreakConfig.getLineBreakWordStyle() != lineBreakWordStyle) { - mLineBreakConfig.setLineBreakWordStyle(lineBreakWordStyle); + if (isLineBreakWordStyleSpecified && mLineBreakWordStyle != lineBreakWordStyle) { + mLineBreakWordStyle = lineBreakWordStyle; updated = true; } if (updated && mLayout != null) { @@ -4871,50 +4870,72 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** - * Sets line break configuration indicates which strategy needs to be used when calculating the - * text wrapping. - * <P> - * There are two types of line break rules that can be configured at the same time. One is - * line break style(lb) and the other is line break word style(lw). The line break style - * affects rule-based breaking. The line break word style affects dictionary-based breaking - * and provide phrase-based breaking opportunities. There are several types for the - * line break style: + * Set the line break style for text wrapping. + * + * The line break style to indicates the line break strategies can be used when + * calculating the text wrapping. The line break style affects rule-based breaking. It + * specifies the strictness of line-breaking rules. + * There are several types for the line break style: * {@link LineBreakConfig#LINE_BREAK_STYLE_LOOSE}, * {@link LineBreakConfig#LINE_BREAK_STYLE_NORMAL} and - * {@link LineBreakConfig#LINE_BREAK_STYLE_STRICT}. - * The type for the line break word style is - * {@link LineBreakConfig#LINE_BREAK_WORD_STYLE_PHRASE}. - * The default values of the line break style and the line break word style are - * {@link LineBreakConfig#LINE_BREAK_STYLE_NONE} and - * {@link LineBreakConfig#LINE_BREAK_WORD_STYLE_NONE} respectively, indicating that no line - * breaking rules are specified. - * See <a href="https://drafts.csswg.org/css-text/#line-break-property"> + * {@link LineBreakConfig#LINE_BREAK_STYLE_STRICT}. The default values of the line break style + * is {@link LineBreakConfig#LINE_BREAK_STYLE_NONE}, indicating no breaking rule is specified. + * See <a href="https://www.w3.org/TR/css-text-3/#line-break-property"> * the line-break property</a> * - * @param lineBreakConfig the line break config for text wrapping. + * @param lineBreakStyle the line break style for the text. */ - public void setLineBreakConfig(@NonNull LineBreakConfig lineBreakConfig) { - Objects.requireNonNull(lineBreakConfig); - if (mLineBreakConfig.equals(lineBreakConfig)) { - return; + public void setLineBreakStyle(@LineBreakConfig.LineBreakStyle int lineBreakStyle) { + if (mLineBreakStyle != lineBreakStyle) { + mLineBreakStyle = lineBreakStyle; + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } - mLineBreakConfig.set(lineBreakConfig); - if (mLayout != null) { - nullLayouts(); - requestLayout(); - invalidate(); + } + + /** + * Set the line break word style for text wrapping. + * + * The line break word style affects dictionary-based breaking and provide phrase-based + * breaking opportunities. The type for the line break word style is + * {@link LineBreakConfig#LINE_BREAK_WORD_STYLE_PHRASE}. The default values of the line break + * word style is {@link LineBreakConfig#LINE_BREAK_WORD_STYLE_NONE}, indicating no breaking rule + * is specified. + * See <a href="https://www.w3.org/TR/css-text-3/#word-break-property"> + * the word-break property</a> + * + * @param lineBreakWordStyle the line break word style for the tet + */ + public void setLineBreakWordStyle(@LineBreakConfig.LineBreakWordStyle int lineBreakWordStyle) { + if (mLineBreakWordStyle != lineBreakWordStyle) { + mLineBreakWordStyle = lineBreakWordStyle; + if (mLayout != null) { + nullLayouts(); + requestLayout(); + invalidate(); + } } } /** - * Get the current line break configuration for text wrapping. + * Get the current line break style for text wrapping. * - * @return the current line break configuration to be used for text wrapping. + * @return the current line break style to be used for text wrapping. */ - public @NonNull LineBreakConfig getLineBreakConfig() { - LineBreakConfig lbConfig = new LineBreakConfig(); - lbConfig.set(mLineBreakConfig); - return lbConfig; + public @LineBreakConfig.LineBreakStyle int getLineBreakStyle() { + return mLineBreakStyle; + } + + /** + * Get the current line word break style for text wrapping. + * + * @return the current line break word style to be used for text wrapping. + */ + public @LineBreakConfig.LineBreakWordStyle int getLineBreakWordStyle() { + return mLineBreakWordStyle; } /** @@ -4924,7 +4945,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @see PrecomputedText */ public @NonNull PrecomputedText.Params getTextMetricsParams() { - return new PrecomputedText.Params(new TextPaint(mTextPaint), mLineBreakConfig, + return new PrecomputedText.Params(new TextPaint(mTextPaint), + LineBreakConfig.getLineBreakConfig(mLineBreakStyle, mLineBreakWordStyle), getTextDirectionHeuristic(), mBreakStrategy, mHyphenationFrequency); } @@ -4941,13 +4963,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mTextDir = params.getTextDirection(); mBreakStrategy = params.getBreakStrategy(); mHyphenationFrequency = params.getHyphenationFrequency(); - if (params.getLineBreakConfig() != null) { - mLineBreakConfig.set(params.getLineBreakConfig()); - } else { - // Set default value if the line break config in the PrecomputedText.Params is null. - mLineBreakConfig.setLineBreakStyle(DEFAULT_LINE_BREAK_STYLE); - mLineBreakConfig.setLineBreakWordStyle(DEFAULT_LINE_BREAK_WORD_STYLE); - } + LineBreakConfig lineBreakConfig = params.getLineBreakConfig(); + mLineBreakStyle = lineBreakConfig.getLineBreakStyle(); + mLineBreakWordStyle = lineBreakConfig.getLineBreakWordStyle(); if (mLayout != null) { nullLayouts(); requestLayout(); @@ -6486,7 +6504,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } final @PrecomputedText.Params.CheckResultUsableResult int checkResult = precomputed.getParams().checkResultUsable(getPaint(), mTextDir, mBreakStrategy, - mHyphenationFrequency, mLineBreakConfig); + mHyphenationFrequency, LineBreakConfig.getLineBreakConfig( + mLineBreakStyle, mLineBreakWordStyle)); switch (checkResult) { case PrecomputedText.Params.UNUSABLE: throw new IllegalArgumentException( @@ -9383,7 +9402,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setHyphenationFrequency(mHyphenationFrequency) .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) - .setLineBreakConfig(mLineBreakConfig); + .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( + mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(mEllipsize) .setEllipsizedWidth(ellipsisWidth); @@ -9498,7 +9518,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setHyphenationFrequency(mHyphenationFrequency) .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) - .setLineBreakConfig(mLineBreakConfig); + .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( + mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(effectiveEllipsize) .setEllipsizedWidth(ellipsisWidth); @@ -9866,7 +9887,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setJustificationMode(getJustificationMode()) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setTextDirection(getTextDirectionHeuristic()) - .setLineBreakConfig(mLineBreakConfig); + .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( + mLineBreakStyle, mLineBreakWordStyle)); final StaticLayout layout = layoutBuilder.build(); diff --git a/core/java/com/android/internal/app/MediaRouteChooserDialog.java b/core/java/com/android/internal/app/MediaRouteChooserDialog.java index 7108d1443d3a..23d966fdbc0d 100644 --- a/core/java/com/android/internal/app/MediaRouteChooserDialog.java +++ b/core/java/com/android/internal/app/MediaRouteChooserDialog.java @@ -16,25 +16,26 @@ package com.android.internal.app; -import com.android.internal.R; - -import android.app.Dialog; +import android.app.AlertDialog; import android.content.Context; import android.media.MediaRouter; import android.media.MediaRouter.RouteInfo; import android.os.Bundle; import android.text.TextUtils; import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.Window; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; +import com.android.internal.R; + import java.util.Comparator; /** @@ -48,9 +49,10 @@ import java.util.Comparator; * * TODO: Move this back into the API, as in the support library media router. */ -public class MediaRouteChooserDialog extends Dialog { +public class MediaRouteChooserDialog extends AlertDialog { private final MediaRouter mRouter; private final MediaRouterCallback mCallback; + private final boolean mShowProgressBarWhenEmpty; private int mRouteTypes; private View.OnClickListener mExtendedSettingsClickListener; @@ -60,10 +62,15 @@ public class MediaRouteChooserDialog extends Dialog { private boolean mAttachedToWindow; public MediaRouteChooserDialog(Context context, int theme) { + this(context, theme, true); + } + + public MediaRouteChooserDialog(Context context, int theme, boolean showProgressBarWhenEmpty) { super(context, theme); mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); mCallback = new MediaRouterCallback(); + mShowProgressBarWhenEmpty = showProgressBarWhenEmpty; } /** @@ -120,28 +127,38 @@ public class MediaRouteChooserDialog extends Dialog { @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + // Note: setView must be called before super.onCreate(). + setView(LayoutInflater.from(getContext()).inflate(R.layout.media_route_chooser_dialog, + null)); - getWindow().requestFeature(Window.FEATURE_LEFT_ICON); - - setContentView(R.layout.media_route_chooser_dialog); setTitle(mRouteTypes == MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY ? R.string.media_route_chooser_title_for_remote_display : R.string.media_route_chooser_title); - // Must be called after setContentView. - getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, - isLightTheme(getContext()) ? R.drawable.ic_media_route_off_holo_light - : R.drawable.ic_media_route_off_holo_dark); + setIcon(isLightTheme(getContext()) ? R.drawable.ic_media_route_off_holo_light + : R.drawable.ic_media_route_off_holo_dark); + + super.onCreate(savedInstanceState); + View emptyView = findViewById(android.R.id.empty); mAdapter = new RouteAdapter(getContext()); - mListView = (ListView)findViewById(R.id.media_route_list); + mListView = (ListView) findViewById(R.id.media_route_list); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(mAdapter); - mListView.setEmptyView(findViewById(android.R.id.empty)); + mListView.setEmptyView(emptyView); - mExtendedSettingsButton = (Button)findViewById(R.id.media_route_extended_settings_button); + mExtendedSettingsButton = (Button) findViewById(R.id.media_route_extended_settings_button); updateExtendedSettingsButton(); + + if (!mShowProgressBarWhenEmpty) { + findViewById(R.id.media_route_progress_bar).setVisibility(View.GONE); + + // Center the empty view when the progress bar is not shown. + LinearLayout.LayoutParams params = + (LinearLayout.LayoutParams) emptyView.getLayoutParams(); + params.gravity = Gravity.CENTER; + emptyView.setLayoutParams(params); + } } private void updateExtendedSettingsButton() { diff --git a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java index bb2d7fab9cc1..5628b7ed9d15 100644 --- a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java +++ b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java @@ -66,24 +66,37 @@ public abstract class MediaRouteDialogPresenter { } } + /** Create a media route dialog as appropriate. */ public static Dialog createDialog(Context context, int routeTypes, View.OnClickListener extendedSettingsClickListener) { - final MediaRouter router = (MediaRouter)context.getSystemService( - Context.MEDIA_ROUTER_SERVICE); - int theme = MediaRouteChooserDialog.isLightTheme(context) ? android.R.style.Theme_DeviceDefault_Light_Dialog : android.R.style.Theme_DeviceDefault_Dialog; + return createDialog(context, routeTypes, extendedSettingsClickListener, theme); + } + + /** Create a media route dialog as appropriate. */ + public static Dialog createDialog(Context context, + int routeTypes, View.OnClickListener extendedSettingsClickListener, int theme) { + return createDialog(context, routeTypes, extendedSettingsClickListener, theme, + true /* showProgressBarWhenEmpty */); + } + + /** Create a media route dialog as appropriate. */ + public static Dialog createDialog(Context context, int routeTypes, + View.OnClickListener extendedSettingsClickListener, int theme, + boolean showProgressBarWhenEmpty) { + final MediaRouter router = context.getSystemService(MediaRouter.class); MediaRouter.RouteInfo route = router.getSelectedRoute(); if (route.isDefault() || !route.matchesTypes(routeTypes)) { - final MediaRouteChooserDialog d = new MediaRouteChooserDialog(context, theme); + final MediaRouteChooserDialog d = new MediaRouteChooserDialog(context, theme, + showProgressBarWhenEmpty); d.setRouteTypes(routeTypes); d.setExtendedSettingsClickListener(extendedSettingsClickListener); return d; } else { - MediaRouteControllerDialog d = new MediaRouteControllerDialog(context, theme); - return d; + return new MediaRouteControllerDialog(context, theme); } } } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 70b96392b0e5..55c2f4c46d52 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -5225,7 +5225,6 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") public void noteLongPartialWakelockStart(String name, String historyName, int uid, long elapsedRealtimeMs, long uptimeMs) { - uid = mapUid(uid); noteLongPartialWakeLockStartInternal(name, historyName, uid, elapsedRealtimeMs, uptimeMs); } @@ -5260,15 +5259,21 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") private void noteLongPartialWakeLockStartInternal(String name, String historyName, int uid, long elapsedRealtimeMs, long uptimeMs) { + final int mappedUid = mapUid(uid); if (historyName == null) { historyName = name; } - if (!mActiveEvents.updateState(HistoryItem.EVENT_LONG_WAKE_LOCK_START, historyName, uid, - 0)) { + if (!mActiveEvents.updateState(HistoryItem.EVENT_LONG_WAKE_LOCK_START, historyName, + mappedUid, 0)) { return; } addHistoryEventLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.EVENT_LONG_WAKE_LOCK_START, - historyName, uid); + historyName, mappedUid); + if (mappedUid != uid) { + // Prevent the isolated uid mapping from being removed while the wakelock is + // being held. + incrementIsolatedUidRefCount(uid); + } } @GuardedBy("this") @@ -5280,7 +5285,6 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") public void noteLongPartialWakelockFinish(String name, String historyName, int uid, long elapsedRealtimeMs, long uptimeMs) { - uid = mapUid(uid); noteLongPartialWakeLockFinishInternal(name, historyName, uid, elapsedRealtimeMs, uptimeMs); } @@ -5315,15 +5319,20 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") private void noteLongPartialWakeLockFinishInternal(String name, String historyName, int uid, long elapsedRealtimeMs, long uptimeMs) { + final int mappedUid = mapUid(uid); if (historyName == null) { historyName = name; } - if (!mActiveEvents.updateState(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH, historyName, uid, - 0)) { + if (!mActiveEvents.updateState(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH, historyName, + mappedUid, 0)) { return; } addHistoryEventLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH, - historyName, uid); + historyName, mappedUid); + if (mappedUid != uid) { + // Decrement the ref count for the isolated uid and delete the mapping if uneeded. + maybeRemoveIsolatedUidLocked(uid, elapsedRealtimeMs, uptimeMs); + } } @GuardedBy("this") diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LauncherEventUtil.java b/core/java/com/android/internal/policy/IKeyguardLockedStateListener.aidl index a51d668c8224..ee5021918879 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LauncherEventUtil.java +++ b/core/java/com/android/internal/policy/IKeyguardLockedStateListener.aidl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -11,14 +11,11 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ -package com.android.systemui.shared.system; +package com.android.internal.policy; -public class LauncherEventUtil { - - // Constants for the Action - public static final int VISIBLE = 0; - public static final int DISMISS = 1; -} +oneway interface IKeyguardLockedStateListener { + void onKeyguardLockedStateChanged(boolean isKeyguardLocked); +}
\ No newline at end of file diff --git a/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp b/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp index 248db76da71d..0c05da551c8f 100644 --- a/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp +++ b/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp @@ -45,7 +45,7 @@ using android::zygote::ZygoteFailure; // WARNING: Knows a little about the wire protocol used to communicate with Zygote. // TODO: Fix error handling. -constexpr size_t MAX_COMMAND_BYTES = 12200; +constexpr size_t MAX_COMMAND_BYTES = 32768; constexpr size_t NICE_NAME_BYTES = 50; // A buffer optionally bundled with a file descriptor from which we can fill it. @@ -273,8 +273,6 @@ class NativeCommandBuffer { char mBuffer[MAX_COMMAND_BYTES]; }; -static_assert(sizeof(NativeCommandBuffer) < 3 * 4096); - static int buffersAllocd(0); // Get a new NativeCommandBuffer. Can only be called once between freeNativeBuffer calls, diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index d4c03e412fcb..58a3bb4818df 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -4119,6 +4119,13 @@ <permission android:name="android.permission.MANAGE_HOTWORD_DETECTION" android:protectionLevel="internal|preinstalled" /> + <!-- Allows an application to subscribe to keyguard locked (i.e., showing) state. + <p>Protection level: internal|role + <p>Intended for use by ROLE_ASSISTANT only. + --> + <permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" + android:protectionLevel="internal|role"/> + <!-- Must be required by a {@link android.service.autofill.AutofillService}, to ensure that only the system can bind to it. <p>Protection level: signature @@ -6912,6 +6919,10 @@ android:permission="android.permission.BIND_JOB_SERVICE"> </service> + <service android:name="com.android.server.appsearch.contactsindexer.ContactsIndexerMaintenanceService" + android:permission="android.permission.BIND_JOB_SERVICE"> + </service> + <service android:name="com.android.server.pm.PackageManagerShellCommandDataLoader" android:exported="false"> <intent-filter> diff --git a/core/res/res/layout/media_route_chooser_dialog.xml b/core/res/res/layout/media_route_chooser_dialog.xml index cd1c74fd7d7d..bf73f4b26c9c 100644 --- a/core/res/res/layout/media_route_chooser_dialog.xml +++ b/core/res/res/layout/media_route_chooser_dialog.xml @@ -28,20 +28,21 @@ <!-- Content to show when list is empty. --> <LinearLayout android:id="@android:id/empty" - android:layout_width="match_parent" - android:layout_height="64dp" - android:orientation="horizontal" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:visibility="gone"> - <ProgressBar android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:visibility="gone"> + <ProgressBar android:id="@+id/media_route_progress_bar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" /> <TextView android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:paddingStart="16dp" - android:text="@string/media_route_chooser_searching" /> + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingStart="16dp" + android:text="@string/media_route_chooser_searching" /> </LinearLayout> <!-- Settings button. --> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 50f6a42c18ad..181a26fe87e6 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Slaan oor"</string> <string name="no_matches" msgid="6472699895759164599">"Geen passings nie"</string> <string name="find_on_page" msgid="5400537367077438198">"Vind op bladsy"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# passing}other{# van {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Klaar"</string> <string name="progress_erasing" msgid="6891435992721028004">"Vee tans gedeelde berging uit …"</string> <string name="share" msgid="4157615043345227321">"Deel"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> werk tans op die agtergrond en gebruik batterykrag. Tik om na te gaan."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> werk al vir \'n lang tyd op die agtergrond. Tik om na te gaan."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Gaan aktiewe programme na"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Kan nie toegang tot kamera van hierdie toestel af kry nie"</string> </resources> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 2e6f3e019d26..bf06d0edd227 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ዝለል"</string> <string name="no_matches" msgid="6472699895759164599">"ምንም ተመሳሳይ የለም።"</string> <string name="find_on_page" msgid="5400537367077438198">"በገፅ ላይ አግኝ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# ተዛማጅ}one{# ከ{total}}other{# ከ{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ተከናውኗል"</string> <string name="progress_erasing" msgid="6891435992721028004">"የተጋራ ማከማቻን በመደምሰስ ላይ…"</string> <string name="share" msgid="4157615043345227321">"አጋራ"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ከበስተጀርባ በማሄድ ላይ ነው እና ባትሪ እየጨረሰ ነው። ለመገምገም መታ ያድርጉ።"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ከበስተጀርባ ለረጅም ጊዜ በማሄድ ላይ ነው። ለመገምገም መታ ያድርጉ።"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ንቁ መተግበሪያዎችን ይፈትሹ"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ከዚህ መሣሪያ ሆኖ ካሜራን መድረስ አይቻልም"</string> </resources> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index e2234e43373a..94a02a63deb0 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -308,10 +308,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"الوصول إلى تقويمك"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"إرسال رسائل قصيرة SMS وعرضها"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"الملفات والمستندات"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"الوصول إلى الملفات والمستندات على جهازك"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"الموسيقى والملفات الصوتية الأخرى"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"الوصول إلى الملفات الصوتية على جهازك"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"الصور والفيديوهات"</string> @@ -343,7 +341,7 @@ <string name="capability_title_canPerformGestures" msgid="9106545062106728987">"تنفيذ إيماءات"</string> <string name="capability_desc_canPerformGestures" msgid="6619457251067929726">"يمكن النقر والتمرير بسرعة والتصغير أو التكبير بإصبعين وتنفيذ إيماءات أخرى."</string> <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"إيماءات بصمات الإصبع:"</string> - <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"يمكن أن تلتقط الإيماءات التي تم تنفيذها على جهاز استشعار بصمة الإصبع في الجهاز."</string> + <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"يمكن أن تلتقط الإيماءات من أداة استشعار بصمة الإصبع في الجهاز."</string> <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"أخذ لقطة شاشة"</string> <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"يمكن أخذ لقطة شاشة."</string> <string name="permlab_statusBar" msgid="8798267849526214017">"إيقاف شريط الحالة أو تعديله"</string> @@ -592,12 +590,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"أدخِل قفل الشاشة للمتابعة"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"تم اكتشاف بصمة إصبع جزئية."</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"تعذرت معالجة بصمة الإصبع. يُرجى إعادة المحاولة."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"يُرجى تنظيف مستشعر بصمات الإصبع ثم إعادة المحاولة."</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"تنظيف المستشعر ثم إعادة المحاولة"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"اضغط بقوة على المستشعر."</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"تم تحريك الإصبع ببطء شديد. يُرجى إعادة المحاولة."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"يمكنك تجربة بصمة إصبع أخرى."</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"الصورة ساطعة للغاية."</string> @@ -605,10 +600,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"لم يتمّ التعرّف على البصمة."</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"اضغط بقوة على المستشعر."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"تم مصادقة بصمة الإصبع"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"تمّت مصادقة الوجه"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"تمّت مصادقة الوجه، يُرجى الضغط على \"تأكيد\"."</string> @@ -1512,8 +1505,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"التخطي"</string> <string name="no_matches" msgid="6472699895759164599">"ليس هناك أي مطابقات"</string> <string name="find_on_page" msgid="5400537367077438198">"بحث في الصفحة"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{مطابقة واحدة}zero{# من إجمالي {total}}two{# من إجمالي {total}}few{# من إجمالي {total}}many{# من إجمالي {total}}other{# من إجمالي {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"تم"</string> <string name="progress_erasing" msgid="6891435992721028004">"جارٍ محو بيانات مساحة التخزين المشتركة…"</string> <string name="share" msgid="4157615043345227321">"مشاركة"</string> @@ -2267,6 +2259,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"يعمل تطبيق <xliff:g id="APP">%1$s</xliff:g> في الخلفية ويستنفد شحن البطارية. انقر لمراجعة الإعدادات."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"يعمل تطبيق <xliff:g id="APP">%1$s</xliff:g> في الخلفية لفترة طويلة. انقر لمراجعة الإعدادات."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"التحقّق من التطبيقات النشطة"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"لا يمكن الوصول إلى الكاميرا من هذا الجهاز."</string> </resources> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 90f6fcaf6007..1a36fe56678e 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"এৰি যাওক"</string> <string name="no_matches" msgid="6472699895759164599">"কোনো মিল নাই"</string> <string name="find_on_page" msgid="5400537367077438198">"পৃষ্ঠাত বিচাৰক"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# টা মিল}one{{total}ৰ #}other{{total}ৰ #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"সম্পন্ন হ’ল"</string> <string name="progress_erasing" msgid="6891435992721028004">"শ্বেয়াৰ কৰি থোৱা ষ্ট’ৰেজ মচি থকা হৈছে…"</string> <string name="share" msgid="4157615043345227321">"শ্বেয়াৰ কৰক"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> নেপথ্যত চলি আছে আৰু অত্যধিক বেটাৰী খৰচ কৰিছে। পৰ্যালোচনা কৰিবলৈ টিপক।"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> নেপথ্যত দীৰ্ঘ সময় ধৰি চলি আছে। পৰ্যালোচনা কৰিবলৈ টিপক।"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"সক্ৰিয় এপ্সমূহ পৰীক্ষা কৰক"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"এইটো ডিভাইচৰ পৰা কেমেৰা এক্সেছ কৰিব নোৱাৰি"</string> </resources> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 8c4f0b619792..610ac941b761 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"təqvimə daxil olun"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"göndərin və SMS mesajlarına baxın"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fayllar & sənədlər"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"cihazınızda fayllara və sənədlərə giriş"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musiqi və digər audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"cihazınızdakı audio fayllarına giriş"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Foto və videolar"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Davam etmək üçün ekran kilidinizi daxil edin"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Barmaq izinin bir hissəsi aşkarlanıb"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmaq izi tanınmadı. Lütfən, yenidən cəhd edin."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Barmaq izi sensorunu silib yenidən cəhd edin"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensoru silib yenidən cəhd edin"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensora basıb saxlayın"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Barmağınızı çox yavaş hərəkət etdirdiniz. Lütfən, yenidən cəhd edin."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Başqa bir barmaq izini sınayın"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çox işıqlıdır"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Hər dəfə barmağınızın yerini bir az dəyişdirin"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmaq izi tanınmır"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Sensora basıb saxlayın"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmaq izi doğrulandı"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Üz doğrulandı"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Üz təsdiq edildi, təsdiq düyməsinə basın"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Keç"</string> <string name="no_matches" msgid="6472699895759164599">"Uyğunluq yoxdur"</string> <string name="find_on_page" msgid="5400537367077438198">"Səhifədə tap"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# uyğunluq}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Hazırdır"</string> <string name="progress_erasing" msgid="6891435992721028004">"Paylaşılan yaddaş silinir…"</string> <string name="share" msgid="4157615043345227321">"Paylaşın"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> arxa fonda işləyir və enerjini tükədir. Nəzərdən keçirmək üçün toxunun."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> uzun müddət arxa fonda işləyir. Nəzərdən keçirmək üçün toxunun."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Aktiv tətbiqləri yoxlayın"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Bu cihazdan kameraya giriş mümkün deyil"</string> </resources> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 0c3b88cbc600..32a563f5451c 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -305,10 +305,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"pristupi kalendaru"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"šalje i pregleda SMS poruke"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fajlovi i dokumenti"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"pristupanje fajlovima i dokumentima na uređaju"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muzika i drugi audio sadržaj"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"pristup audio fajlovima na uređaju"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Slike i video snimci"</string> @@ -589,12 +587,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Upotrebite zaključavanje ekrana da biste nastavili"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Otkriven je delimičan otisak prsta"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nije uspela obrada otiska prsta. Probajte ponovo."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Obrišite senzor za otisak prsta i probajte ponovo"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Obrišite senzor i probajte ponovo"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Jako pritisnite senzor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Previše sporo ste pomerili prst. Probajte ponovo."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probajte sa drugim otiskom prsta"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Previše je svetlo"</string> @@ -602,10 +597,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Svaki put lagano promenite položaj prsta"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Jako pritisnite senzor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisak prsta je potvrđen"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je potvrđeno"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je potvrđeno. Pritisnite Potvrdi"</string> @@ -1509,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Preskoči"</string> <string name="no_matches" msgid="6472699895759164599">"Nema podudaranja"</string> <string name="find_on_page" msgid="5400537367077438198">"Pronađi na stranici"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# podudaranje}one{# od {total}}few{# od {total}}other{# od {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Gotovo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Briše se deljeni memorijski prostor…"</string> <string name="share" msgid="4157615043345227321">"Deli"</string> @@ -2096,7 +2088,7 @@ <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"Obaveštenja"</string> <string name="accessibility_system_action_quick_settings_label" msgid="4583900123506773783">"Brza podešavanja"</string> <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Dijalog napajanja"</string> - <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaključani ekran"</string> + <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Zaključavanje ekrana"</string> <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Snimak ekrana"</string> <string name="accessibility_system_action_headset_hook_label" msgid="8524691721287425468">"Kuka za slušalice"</string> <string name="accessibility_system_action_on_screen_a11y_shortcut_label" msgid="8488701469459210309">"Prečica za pristupačnost na ekranu"</string> @@ -2264,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> je pokrenuta u pozadini i troši bateriju. Dodirnite da biste pregledali."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> je predugo pokrenuta u pozadini. Dodirnite da biste pregledali."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Proverite aktivne aplikacije"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Ne možete da pristupite kameri sa ovog uređaja"</string> </resources> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index cf8c2dd5b382..23887dc9c06b 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"атрымліваць доступ да вашага календара"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"адпраўляць і праглядаць SMS-паведамленні"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файлы і дакументы"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"доступ да файлаў і дакументаў на вашай прыладзе"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музыка і іншае аўдыя"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"доступ да аўдыяфайлаў на вашай прыладзе"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Фота і відэа"</string> @@ -549,7 +547,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Дазволіць праграме адпраўляць рэкламу на прылады з Bluetooth, якія знаходзяцца паблізу"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"вызначаць адлегласць паміж прыладамі з звышшырокапалоснай сувяззю"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Дазволіць праграме вызначаць адлегласць паміж прыладамі паблізу, якія выкарыстоўваюць звышшырокапалосную сувязь"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Узаемадзеянне з прыладамі з Wi‑Fi паблізу"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"узаемадзейнічаць з прыладамі з Wi‑Fi паблізу"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Праграма зможа адпраўляць даныя на прылады Wi-Fi паблізу, падключацца да іх і вызначаць іх месцазнаходжанне"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Інфармацыя пра прыярытэтны сэрвіс аплаты NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дазваляе праграме атрымаць доступ да інфармацыі пра прыярытэтны сэрвіс аплаты NFC, напрыклад зарэгістраваныя ідэнтыфікатары праграм і маршруты адпраўкі даных."</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Каб працягнуць, скарыстайце свой сродак блакіроўкі экрана"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Адбітак пальца адсканіраваны не цалкам"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не атрымалася апрацаваць адбітак пальца. Паспрабуйце яшчэ раз."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Ачысціце сканер адбіткаў пальцаў і паўтарыце спробу"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Ачысціце сканер і паўтарыце спробу"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Моцна націсніце на сканер"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Палец рухаўся занадта павольна. Паспрабуйце яшчэ раз."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Паспрабуйце іншы адбітак пальца"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Занадта светла"</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Кожны раз крыху мяняйце пазіцыю пальца"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Адбітак пальца не распазнаны"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Моцна націсніце на сканер"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Адбітак пальца распазнаны"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Твар распазнаны"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Твар распазнаны. Націсніце, каб пацвердзіць"</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Прапусціць"</string> <string name="no_matches" msgid="6472699895759164599">"Няма супадзенняў"</string> <string name="find_on_page" msgid="5400537367077438198">"Знайсці на старонцы"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# супадзенне}one{# з {total}}few{# з {total}}many{# з {total}}other{# з {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Гатова"</string> <string name="progress_erasing" msgid="6891435992721028004">"Сціраюцца даныя абагуленага сховішча…"</string> <string name="share" msgid="4157615043345227321">"Абагуліць"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> працуе ў фонавым рэжыме і расходуе зарад акумулятара. Націсніце, каб праглядзець."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> працуе ў фонавым рэжыме працяглы час. Націсніце, каб праглядзець."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Праверце актыўныя праграмы"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"З гэтай прылады няма доступу да камеры."</string> </resources> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 7183dce212d5..307df89e6624 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"има достъп до календара ви"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"да изпраща и преглежда SMS съобщения"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файлове и документи"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"достъп до файловете и документите на устройството ви"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музика и друго аудиосъдържание"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"да има достъп до аудиофайловете на устройството ви"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Снимки и видеоклипове"</string> @@ -547,8 +545,8 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Разрешава на приложението да рекламира на устройства с Bluetooth в близост"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"опред. на относителната позиция м/у у-вата с ултрашироколентови сигнали в близост"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Разрешаване на приложението да определя относителната позиция между устройствата с ултрашироколентови сигнали в близост"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Взаимодействие с устройствата с Wi-Fi в близост"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Разрешава на приложението да рекламира, да се свързва и да определя относителната позиция на у-вата с Wi-Fi в близост"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"взаимодействие с устройствата с Wi-Fi в близост"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Разрешава на приложението да рекламира, да се свързва и да определя относителната позиция на устройствата с Wi-Fi в близост"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Информация за предпочитаната услуга за плащане чрез NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дава възможност на приложението да получава информация за предпочитаната услуга за плащане чрез NFC, като например регистрирани помощни средства и местоназначение."</string> <string name="permlab_nfc" msgid="1904455246837674977">"контролиране на комуникацията в близкото поле"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Въведете опцията си за заключване на екрана, за да продължите"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Установен е частичен отпечатък"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатъкът не бе обработен. Моля, опитайте отново."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Почистете сензора за отпечатъци и опитайте отново"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Почистете сензора и опитайте отново"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Натиснете добре върху сензора"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Преместихте пръста си твърде бавно. Моля, опитайте отново."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Опитайте с друг отпечатък"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Твърде светло е"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Всеки път променяйте леко позицията на пръста си"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатъкът не е разпознат"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Натиснете добре върху сензора"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечатъкът е удостоверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицето е удостоверено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е удостоверено. Моля, натиснете „Потвърждаване“"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Пропускане"</string> <string name="no_matches" msgid="6472699895759164599">"Няма съответствия"</string> <string name="find_on_page" msgid="5400537367077438198">"Намиране в страницата"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# съответствие}other{# от {total} съответствия}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Готово"</string> <string name="progress_erasing" msgid="6891435992721028004">"Споделеното хранилище се изтрива…"</string> <string name="share" msgid="4157615043345227321">"Споделяне"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> работи на заден план и изразходва батерията. Докоснете за преглед."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> работи на заден план от дълго време. Докоснете за преглед."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Проверете активните приложения"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Не може да се осъществи достъп до камерата от това устройство"</string> </resources> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 82932dcd0bb7..bb5c10223c4a 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"এড়িয়ে যান"</string> <string name="no_matches" msgid="6472699895759164599">"কোনো মিল নেই"</string> <string name="find_on_page" msgid="5400537367077438198">"পৃষ্ঠায় খুঁজুন"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{#টি ম্যাচ}one{{total}টির মধ্যে #টি}other{{total}টির মধ্যে #টি}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"সম্পন্ন হয়েছে"</string> <string name="progress_erasing" msgid="6891435992721028004">"শেয়ার করা স্টোরেজ মুছে ফেলা হচ্ছে…"</string> <string name="share" msgid="4157615043345227321">"শেয়ার করুন"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ব্যাকগ্রাউন্ডে চলছে এবং এর ফলে ব্যাটারির চার্জ কমে যাচ্ছে। পর্যালোচনা করতে ট্যাপ করুন।"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> অনেকক্ষণ ধরে ব্যাকগ্রাউন্ডে চলছে। পর্যালোচনা করতে ট্যাপ করুন।"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"অ্যাক্টিভ অ্যাপ চেক করুন"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"এই ডিভাইস থেকে ক্যামেরা অ্যাক্সেস করা যাচ্ছে না"</string> </resources> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 4f4f7d655a9e..b53f34c10afd 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -1502,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Preskoči"</string> <string name="no_matches" msgid="6472699895759164599">"Nema podudaranja"</string> <string name="find_on_page" msgid="5400537367077438198">"Pronađi na stranici"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# podudaranje}one{# od ukupno {total}}few{# od ukupno {total}}other{# od ukupno {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Gotovo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Brisanje dijeljene pohrane…"</string> <string name="share" msgid="4157615043345227321">"Dijeli"</string> @@ -2257,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> je pokrenuta u pozadini i troši bateriju. Dodirnite da pregledate."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> dugo radi u pozadini. Dodirnite da pregledate."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Provjerite aktivne aplikacije"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nije moguće pristupiti kameri s ovog uređaja"</string> </resources> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index fa531ad8b77b..b124335f370c 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"accedir al calendari"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"enviar i llegir missatges SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fitxers i documents"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"accedir als fitxers i documents del dispositiu"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música i altres fitxers d\'àudio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"accedir a fitxers d\'àudio del dispositiu"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos i vídeos"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introdueix el teu bloqueig de pantalla per continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"S\'ha detectat una empremta digital parcial"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Neteja el sensor d\'empremtes digitals i torna-ho a provar"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Neteja el sensor i torna-ho a provar"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prem el sensor de manera ferma"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"El dit s\'ha mogut massa lentament. Torna-ho a provar."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prova una altra empremta digital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hi ha massa llum"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit en cada intent"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"L\'empremta digital no s\'ha reconegut"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Prem el sensor de manera ferma"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"L\'empremta digital s\'ha autenticat"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Cara autenticada; prem el botó per confirmar"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Omet"</string> <string name="no_matches" msgid="6472699895759164599">"No s\'ha trobat cap coincidència"</string> <string name="find_on_page" msgid="5400537367077438198">"Troba-ho a la pàgina"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# coincidència}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Fet"</string> <string name="progress_erasing" msgid="6891435992721028004">"S\'està esborrant l\'emmagatzematge compartit…"</string> <string name="share" msgid="4157615043345227321">"Comparteix"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> s\'està executant en segon pla i consumeix bateria. Toca per revisar-ho."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Fa molta estona que <xliff:g id="APP">%1$s</xliff:g> s\'està executant en segon pla. Toca per revisar-ho."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Consulta les aplicacions actives"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"No es pot accedir a la càmera des d\'aquest dispositiu"</string> </resources> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index ee9d7bc850b4..e7c36624b7a6 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"přístup ke kalendáři"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"odesílání a zobrazování zpráv SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Soubory a dokumenty"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"přístup k souborům a dokumentům v zařízení"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Hudba a ostatní zvuk"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"přístup ke zvukovým souborům v zařízení"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotky a videa"</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Pokračujte zadáním zámku obrazovky"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Byla zjištěna jen část otisku prstu"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Vyčistěte snímač otisků prstů a zkuste to znovu"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vyčistěte senzor a zkuste to znovu"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pevně zatlačte na senzor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zkuste jiný otisk prstu"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Je příliš světlo"</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Pokaždé lehce změňte polohu prstu"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisk prstu nebyl rozpoznán"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Pevně zatlačte na senzor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisk byl ověřen"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Obličej byl ověřen"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Obličej byl ověřen, stiskněte tlačítko pro potvrzení"</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Přeskočit"</string> <string name="no_matches" msgid="6472699895759164599">"Žádné shody"</string> <string name="find_on_page" msgid="5400537367077438198">"Hledat na stránce"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# shoda}few{# z {total}}many{# z {total}}other{# z {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Hotovo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Mazání sdíleného úložiště…"</string> <string name="share" msgid="4157615043345227321">"Sdílet"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikace <xliff:g id="APP">%1$s</xliff:g> je spuštěna na pozadí a vybíjí baterii. Klepnutím ji zkontrolujete."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikace <xliff:g id="APP">%1$s</xliff:g> je už dlouhou dobu spuštěna na pozadí. Klepnutím ji zkontrolujete."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Zkontrolujte aktivní aplikace"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Z tohoto zařízení nelze získat přístup k fotoaparátu"</string> </resources> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 66a31e7e4d0c..94d97b070f63 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"have adgang til din kalender"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Sms"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"sende og se sms-beskeder"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Filer og dokumenter"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"få adgang til filer og dokumenter på din enhed"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musik og anden lyd"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"Få adgang til lydfiler på din enhed"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Billeder og videoer"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"fastlægge den relative position mellem UWB-enheder i nærheden"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Tillad, at appen fastlægger den relative position mellem UWB-enheder (Ultra-Wideband) i nærheden"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"interagere med Wi‑Fi-enheder i nærheden"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Giver appen tilladelse til at informere om, oprette forbindelse til og fastslå den relative placering af Wi‑Fi -enheder i nærheden"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Giver appen tilladelse til at informere om, oprette forbindelse til og fastslå den relative placering af Wi‑Fi-enheder i nærheden"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Foretrukne oplysninger vedrørende NFC-betalingstjeneste"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Tillader, at appen får foretrukne oplysninger vedrørende NFC-betalingstjeneste, f.eks. registrerede hjælpemidler og rutedestinationer."</string> <string name="permlab_nfc" msgid="1904455246837674977">"administrere Near Field Communication"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Angiv din skærmlås for at fortsætte"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Et delvist fingeraftryk blev registreret"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingeraftrykket kunne ikke behandles. Prøv igen."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengør fingeraftrykslæseren, og prøv igen"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengør læseren, og prøv igen"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Hold fingeren nede på læseren"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du bevægede fingeren for langsomt. Prøv igen."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prøv med et andet fingeraftryk"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Der er for lyst"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Flyt fingeren en smule hver gang"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeraftrykket blev ikke genkendt"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Hold fingeren nede på læseren"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeraftrykket blev godkendt"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansigtet er godkendt"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansigtet er godkendt. Tryk på Bekræft."</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Spring over"</string> <string name="no_matches" msgid="6472699895759164599">"Der er ingen matches"</string> <string name="find_on_page" msgid="5400537367077438198">"Find på siden"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# resultat}one{# af {total}}other{# af {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Udfør"</string> <string name="progress_erasing" msgid="6891435992721028004">"Sletter delt lagerplads…"</string> <string name="share" msgid="4157615043345227321">"Del"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> kører i baggrunden og dræner batteriet. Tryk for at gennemgå."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> har kørt i baggrunden i lang tid. Tryk for at gennemgå."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Tjek aktive apps"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Kameraet kan ikke tilgås fra denne enhed"</string> </resources> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 781dd99dd65f..aa0e3ed227a4 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"auf deinen Kalender zugreifen"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS senden und abrufen"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Dateien und Dokumente"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"Auf Dateien und Dokumente auf deinem Gerät zugreifen"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musik & andere Audiodateien"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"Zugriff auf Audiodateien auf deinem Gerät"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos & Videos"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"Relative Distanz zwischen Ultrabreitband-Geräten in der Nähe bestimmen"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Ermöglicht der App, die relative Distanz zwischen Ultrabreitband-Geräten in der Nähe zu bestimmen"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Mit WLAN-Geräten in der Nähe interagieren"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Erlaubt der App, Inhalte an WLAN-Geräte in der Nähe zu senden, sich mit ihnen zu verbinden und ihre relative Positionierung zu ermitteln"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Erlaubt der App, Inhalte an WLAN-Geräte in der Nähe zu senden, sich mit ihnen zu verbinden und ihre relative Position zu ermitteln"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informationen zum bevorzugten NFC-Zahlungsdienst"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Ermöglicht der App, Informationen zum bevorzugten NFC-Zahlungsdienst abzurufen, etwa registrierte Hilfsmittel oder das Routenziel."</string> <string name="permlab_nfc" msgid="1904455246837674977">"Nahfeldkommunikation steuern"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Displaysperre eingeben, um fortzufahren"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Fingerabdruck wurde nur teilweise erkannt"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingerabdruck konnte nicht verarbeitet werden. Bitte versuche es noch einmal."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Reinige den Fingerabdrucksensor und versuch es noch einmal"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Reinige den Sensor und versuche es noch einmal"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Drücke fest auf den Sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger zu langsam bewegt. Bitte versuche es noch einmal."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Anderen Fingerabdruck verwenden"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Zu hell"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ändere jedes Mal die Position deines Fingers"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerabdruck nicht erkannt"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Drücke fest auf den Sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerabdruck wurde authentifiziert"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gesicht authentifiziert"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesicht authentifiziert, bitte bestätigen"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Überspringen"</string> <string name="no_matches" msgid="6472699895759164599">"Keine Treffer"</string> <string name="find_on_page" msgid="5400537367077438198">"Auf Seite suchen"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# Übereinstimmung}other{# von {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Fertig"</string> <string name="progress_erasing" msgid="6891435992721028004">"Freigegebener Speicher wird gelöscht…"</string> <string name="share" msgid="4157615043345227321">"Teilen"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> wird im Hintergrund ausgeführt und belastet den Akku. Zum Prüfen tippen."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> wird schon längere Zeit im Hintergrund ausgeführt. Zum Prüfen tippen."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Aktive Apps prüfen"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Von diesem Gerät aus ist kein Zugriff auf die Kamera möglich"</string> </resources> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index c9716d68cec7..41dc66488534 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"έχει πρόσβαση στο ημερολόγιό σας"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"στέλνει και να διαβάζει μηνύματα SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Αρχεία και έγγραφα"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"πρόσβαση σε αρχεία και έγγραφα στη συσκευή σας"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Μουσική και άλλο ηχητικό περιεχόμενο"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"πρόσβαση σε αρχεία ήχου στη συσκευή σας"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Φωτογραφίες και βίντεο"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Χρησιμοποιήστε το κλείδωμα οθόνης για να συνεχίσετε"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Εντοπίστηκε μέρους του δακτυλικού αποτυπώματος"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Δεν ήταν δυνατή η επεξεργασία του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Καθαρίστε τον αισθητήρα δακτυλικών αποτυπωμάτων και δοκιμάστε ξανά"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Καθαρίστε τον αισθητήρα και δοκιμάστε ξανά"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Πιέστε σταθερά τον αισθητήρα"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Πολύ αργή κίνηση δαχτύλου. Δοκιμάστε ξανά."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Δοκιμάστε άλλο δακτυλικό αποτύπωμα"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Υπερβολικά έντονος φωτισμός"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Πιέστε σταθερά τον αισθητήρα"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Η ταυτότητα του δακτυλικού αποτυπώματος ελέγχθηκε"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Έγινε έλεγχος ταυτότητας προσώπου"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Έγινε έλεγχος ταυτότητας προσώπου, πατήστε \"Επιβεβαίωση\""</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Παράβλεψη"</string> <string name="no_matches" msgid="6472699895759164599">"Δεν υπάρχουν αποτελέσματα"</string> <string name="find_on_page" msgid="5400537367077438198">"Εύρεση στη σελίδα"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# αποτέλεσμα}other{# από {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Τέλος"</string> <string name="progress_erasing" msgid="6891435992721028004">"Διαγραφή κοινόχρηστου αποθηκευτικού χώρου…"</string> <string name="share" msgid="4157615043345227321">"Κοινή χρ."</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> εκτελείται στο παρασκήνιο και καταναλώνει μπαταρία. Πατήστε για έλεγχο."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> εκτελείται στο παρασκήνιο για πολύ ώρα. Πατήστε για έλεγχο."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Έλεγχος ενεργών εφαρμογών"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Δεν είναι δυνατή η πρόσβαση στην κάμερα από αυτήν τη συσκευή."</string> </resources> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 79a2e38fd796..4ac76055a06c 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Skip"</string> <string name="no_matches" msgid="6472699895759164599">"No matches"</string> <string name="find_on_page" msgid="5400537367077438198">"Find on page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# match}other{# of {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Done"</string> <string name="progress_erasing" msgid="6891435992721028004">"Erasing shared storage…"</string> <string name="share" msgid="4157615043345227321">"Share"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> is running in the background and draining battery. Tap to review."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> is running in the background for a long time. Tap to review."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Check active apps"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Cannot access camera from this device"</string> </resources> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index da99fddd76bf..5bd7816ee987 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Skip"</string> <string name="no_matches" msgid="6472699895759164599">"No matches"</string> <string name="find_on_page" msgid="5400537367077438198">"Find on page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# match}other{# of {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Done"</string> <string name="progress_erasing" msgid="6891435992721028004">"Erasing shared storage…"</string> <string name="share" msgid="4157615043345227321">"Share"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> is running in the background and draining battery. Tap to review."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> is running in the background for a long time. Tap to review."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Check active apps"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Cannot access camera from this device"</string> </resources> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index f01b9af48698..39dd7d4f2629 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Skip"</string> <string name="no_matches" msgid="6472699895759164599">"No matches"</string> <string name="find_on_page" msgid="5400537367077438198">"Find on page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# match}other{# of {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Done"</string> <string name="progress_erasing" msgid="6891435992721028004">"Erasing shared storage…"</string> <string name="share" msgid="4157615043345227321">"Share"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> is running in the background and draining battery. Tap to review."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> is running in the background for a long time. Tap to review."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Check active apps"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Cannot access camera from this device"</string> </resources> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index e509c70c668f..c18ddbae0bed 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Skip"</string> <string name="no_matches" msgid="6472699895759164599">"No matches"</string> <string name="find_on_page" msgid="5400537367077438198">"Find on page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# match}other{# of {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Done"</string> <string name="progress_erasing" msgid="6891435992721028004">"Erasing shared storage…"</string> <string name="share" msgid="4157615043345227321">"Share"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> is running in the background and draining battery. Tap to review."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> is running in the background for a long time. Tap to review."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Check active apps"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Cannot access camera from this device"</string> </resources> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 23531ea2e9dd..e2fb2f889534 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"acceder al calendario"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"enviar y ver mensajes SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Archivos y documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"Accede a archivos y documentos en tu dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música y otro contenido de audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"acceder a los archivos de audio en tu dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos y videos"</string> @@ -341,7 +339,7 @@ <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"Gestos del sensor de huellas dactilares"</string> <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"Capturará los gestos que se hacen en el sensor de huellas dactilares del dispositivo."</string> <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"Tomar captura de pantalla"</string> - <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Puede tomar una captura de la pantalla."</string> + <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Puede tomar capturas de pantalla."</string> <string name="permlab_statusBar" msgid="8798267849526214017">"desactivar o modificar la barra de estado"</string> <string name="permdesc_statusBar" msgid="5809162768651019642">"Permite que la aplicación inhabilite la barra de estado o que agregue y elimine íconos del sistema."</string> <string name="permlab_statusBarService" msgid="2523421018081437981">"aparecer en la barra de estado"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ingresa tu bloqueo de pantalla para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Detección parcial de una huella dactilar"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se pudo procesar la huella dactilar. Vuelve a intentarlo."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpia el sensor de huellas dactilares y vuelve a intentarlo"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpia el sensor y vuelve a intentarlo"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Presiona con firmeza el sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moviste el dedo muy lento. Vuelve a intentarlo."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prueba con otra huella dactilar"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Demasiada luz"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia un poco la posición del dedo cada vez"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"No se reconoció la huella dactilar"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Presiona con firmeza el sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se autenticó la huella dactilar"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Se autenticó el rostro"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se autenticó el rostro; presiona Confirmar"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Omitir"</string> <string name="no_matches" msgid="6472699895759164599">"Sin coincidencias"</string> <string name="find_on_page" msgid="5400537367077438198">"Buscar en la página"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# coincidencia}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Listo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Borrando almacenamiento compartido…"</string> <string name="share" msgid="4157615043345227321">"Compartir"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> se está ejecutando en segundo plano y está agotando la batería. Presiona para revisar esta actividad."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Hace mucho tiempo que <xliff:g id="APP">%1$s</xliff:g> se está ejecutando en segundo plano. Presiona para revisar esta actividad."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Consulta las apps activas"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"No se puede acceder a la cámara desde este dispositivo"</string> </resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 7c0d36bbdaed..a37d4e8e21f7 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"acceder a tu calendario"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"enviar y ver mensajes SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Archivos y documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"acceder a archivos y documentos de tu dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música y otros archivos de audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"acceder a los archivos de audio de tu dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos y vídeos"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"calcular posición de dispositivos de banda ultraancha cercanos"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permite que la aplicación determine la posición relativa de los dispositivos de banda ultraancha cercanos"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Interactuar con dispositivos Wi-Fi cercanos"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite a la aplicación mostrar información de dispositivos Wi-Fi cercanos, conectarse a ellos y determinar su posición"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite a la aplicación mostrar, conectar y determinar la posición relativa de dispositivos Wi-Fi cercanos"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Información sobre el servicio de pago por NFC preferido"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que la aplicación obtenga información sobre el servicio de pago por NFC preferido, como identificadores de aplicación registrados y destinos de rutas."</string> <string name="permlab_nfc" msgid="1904455246837674977">"controlar Comunicación de campo cercano (NFC)"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduce tu bloqueo de pantalla para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Huella digital parcial detectada"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpia el sensor de huellas digitales e inténtalo de nuevo"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpia el sensor e inténtalo de nuevo"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Mantén pulsado firmemente el sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Has movido el dedo demasiado despacio. Vuelve a intentarlo."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prueba con otra huella digital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Demasiada luz"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia ligeramente el dedo de posición cada vez"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Huella digital no reconocida"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Mantén pulsado firmemente el sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se ha autenticado la huella digital"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se ha autenticado la cara, pulsa para confirmar"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Saltar"</string> <string name="no_matches" msgid="6472699895759164599">"No hay coincidencias."</string> <string name="find_on_page" msgid="5400537367077438198">"Buscar en la página"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# coincidencia}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Hecho"</string> <string name="progress_erasing" msgid="6891435992721028004">"Borrando almacenamiento compartido…"</string> <string name="share" msgid="4157615043345227321">"Compartir"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> se está ejecutando en segundo plano y consumiendo batería. Toca para revisarlo."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> lleva mucho tiempo ejecutándose en segundo plano. Toca para revisarlo."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Consultar aplicaciones activas"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"No se puede acceder a la cámara desde este dispositivo"</string> </resources> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 8c2e458876a0..0539582ac163 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"juurdepääs kalendrile"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"saata ja vaadata SMS-sõnumeid"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Failid ja dokumendid"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"juurdepääs teie seadmes olevatele failidele ja dokumentidele"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muusika ja muud helifailid"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"pääseda juurde teie seadmes olevatele helifailidele"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotod ja videod"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jätkamiseks sisestage oma ekraanilukk"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Tuvastati osaline sõrmejälg"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sõrmejälge ei õnnestunud töödelda. Proovige uuesti."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhastage sõrmejäljeandur ja proovige uuesti"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhastage andur ja proovige uuesti"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Vajutage tugevalt andurile"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Sõrm liikus liiga aeglaselt. Proovige uuesti."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Proovige teist sõrmejälge"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liiga ere"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Muutke iga kord pisut oma sõrme asendit"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sõrmejälge ei tuvastatud"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Vajutage tugevalt andurile"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sõrmejälg autenditi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Nägu on autenditud"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Nägu on autenditud, vajutage käsku Kinnita"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Jäta vahele"</string> <string name="no_matches" msgid="6472699895759164599">"Vasted puuduvad"</string> <string name="find_on_page" msgid="5400537367077438198">"Otsige lehelt"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# vaste}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Valmis"</string> <string name="progress_erasing" msgid="6891435992721028004">"Jagatud salvestusruumi tühjendamine …"</string> <string name="share" msgid="4157615043345227321">"Jaga"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> töötab taustal ja kulutab akut. Puudutage ülevaatamiseks."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> on taustal töötanud kaua aega. Puudutage ülevaatamiseks."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Vaadake aktiivseid rakendusi"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Sellest seadmest ei pääse kaamerale juurde"</string> </resources> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 4c07e4021e1a..d6c2711353be 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"atzitu egutegia"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMSak"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"bidali eta ikusi SMS mezuak"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fitxategiak eta dokumentuak"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"gailuko fitxategiak eta dokumentuak atzitu"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musika eta bestelako audioa"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"atzitu gailuko audio-fitxategiak"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Argazkiak eta bideoak"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Aurrera egiteko, desblokeatu pantailaren blokeoa"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Hatz-marka ez da osorik hauteman"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ezin izan da prozesatu hatz-marka. Saiatu berriro."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Garbitu hatz-marken sentsorea eta saiatu berriro"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Garbitu sentsorea eta saiatu berriro"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sakatu irmo sentsorea"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Mantsoegi mugitu duzu hatza. Saiatu berriro."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Erabili beste hatz-marka bat"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Argi gehiegi dago"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Aldi bakoitzean, aldatu hatzaren posizioa apur bat"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ez da ezagutu hatz-marka"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Sakatu irmo sentsorea"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentifikatu da hatz-marka"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autentifikatu da aurpegia"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Saltatu"</string> <string name="no_matches" msgid="6472699895759164599">"Ez dago emaitzarik"</string> <string name="find_on_page" msgid="5400537367077438198">"Aurkitu orri honetan"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# emaitza}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Eginda"</string> <string name="progress_erasing" msgid="6891435992721028004">"Biltegi partekatuko eduki guztia ezabatzen…"</string> <string name="share" msgid="4157615043345227321">"Partekatu"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> atzeko planoan exekutatzen eta bateria xahutzen ari da. Sakatu berrikusteko."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> aplikazioak denbora asko darama atzeko planoan exekutatzen. Sakatu berrikusteko."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Ikusi zer aplikazio dauden aktibo"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Ezin da atzitu kamera gailu honetatik"</string> </resources> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 9b35e07973e2..234fc56a2013 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"دسترسی به تقویم شما"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"پیامک"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"ارسال و مشاهده پیامکها"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"فایلها و اسناد"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"دسترسی به فایلها و اسناد موجود در دستگاه"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"موسیقی و فایلهای صوتی دیگر"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"دسترسی به فایلهای صوتی موجود در دستگاه"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"عکسها و ویدیوها"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"برای ادامه، قفل صفحهتان را وارد کنید"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"بخشی از اثر انگشت شناسایی شد"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"حسگر اثر انگشت را تمیز و دوباره امتحان کنید"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"حسگر را تمیز و دوباره امتحان کنید"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"محکم روی حسگر فشار دهید"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"حرکت انگشت خیلی آهسته بود. لطفاً دوباره امتحان کنید."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"اثر انگشت دیگری را امتحان کنید"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"خیلی روشن است"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"هربار موقعیت انگشتتان را کمی تغییر دهید"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"اثر انگشت تشخیص داده نشد"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"محکم روی حسگر فشار دهید"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"اثر انگشت اصالتسنجی شد"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"چهره اصالتسنجی شد"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چهره اصالتسنجی شد، لطفاً تأیید را فشار دهید"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"رد شدن"</string> <string name="no_matches" msgid="6472699895759164599">"مورد منطبقی موجود نیست"</string> <string name="find_on_page" msgid="5400537367077438198">"یافتن در صفحه"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# مورد منطبق}one{# از {total}}other{# از {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"تمام"</string> <string name="progress_erasing" msgid="6891435992721028004">"درحال پاک کردن فضای ذخیرهسازی همرسانیشده…"</string> <string name="share" msgid="4157615043345227321">"همرسانی"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> در پسزمینه اجرا میشود و شارژ باتری را تخلیه میکند. برای مرور، ضربه بزنید."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> برای مدتی طولانی در پسزمینه اجرا میشود. برای مرور، ضربه بزنید."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"بررسی برنامههای فعال"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"نمیتوان از این دستگاه به دوربین دسترسی پیدا کرد"</string> </resources> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 10adae883ade..a07d941b077d 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"käyttää kalenteria"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Tekstiviestit"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"lähettää ja tarkastella tekstiviestejä"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Tiedostot ja dokumentit"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"pääsyn laitteesi tiedostoihin ja dokumentteihin"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musiikki ja muu audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"pääsy laitteesi audiotiedostoihin"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Kuvat ja videot"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jatka lisäämällä näytön lukituksen avaustapa"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Osittainen sormenjälki havaittu"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sormenjäljen prosessointi epäonnistui. Yritä uudelleen."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhdista sormenjälkitunnistin ja yritä uudelleen"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhdista anturi ja yritä uudelleen"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina anturia voimakkaasti"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Kokeile toista sormenjälkeä"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liian kirkas"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Liikuta sormeasi hieman joka kerralla"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sormenjälkeä ei tunnistettu"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Paina anturia voimakkaasti"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sormenjälki tunnistettu"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Kasvot tunnistettu"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Kasvot tunnistettu, valitse Vahvista"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Ohita"</string> <string name="no_matches" msgid="6472699895759164599">"Ei tuloksia"</string> <string name="find_on_page" msgid="5400537367077438198">"Etsi sivulta"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# osuma}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Valmis"</string> <string name="progress_erasing" msgid="6891435992721028004">"Tyhjennetään jaettua tallennustilaa…"</string> <string name="share" msgid="4157615043345227321">"Jaa"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> on käynnissä taustalla ja kuluttaa akkua. Tarkista napauttamalla."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> on ollut käynnissä taustalla pitkän aikaa. Tarkista napauttamalla."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Tarkista aktiiviset sovellukset"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Ei pääsyä kameraan tältä laitteelta"</string> </resources> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 43b061d2a6eb..07af7ba65ad1 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"accéder à votre agenda"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Messagerie texte"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"envoyer et afficher des messages texte"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fichiers et documents"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"accédez aux fichiers et aux documents sur votre appareil"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musique et autres fichiers audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"accéder aux fichiers audio de votre appareil"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Photos et vidéos"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"déterminer la position relative entre des appareils à bande ultralarge à proximité"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Autorisez l\'application à déterminer la position relative entre des appareils à bande ultralarge à proximité"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"interagir avec les appareils Wi-Fi à proximité"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permet à l\'application d\'annoncer, de se connecter et de déterminer la position relative des appareils Wi-Fi à proximité"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permet à l\'application de diffuser des annonces, de se connecter et de déterminer la position relative des appareils Wi-Fi à proximité"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Information sur le service préféré de paiement CCP"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permet à l\'application d\'obtenir de l\'information sur le service préféré de paiement CCP comme les aides enregistrées et la route de destination."</string> <string name="permlab_nfc" msgid="1904455246837674977">"gérer la communication en champ proche"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Entrez votre verrouillage d\'écran pour continuer"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Empreinte digitale partielle détectée"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nettoyez le capteur d\'empreintes digitales et réessayez"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nettoyez le capteur et réessayez"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez fermement sur le capteur"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Essayez une autre empreinte digitale"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Trop lumineux"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Modifiez légèrement la position de votre doigt chaque fois"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Appuyez fermement sur le capteur"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur le bouton Confirmer"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Ignorer"</string> <string name="no_matches" msgid="6472699895759164599">"Aucune partie"</string> <string name="find_on_page" msgid="5400537367077438198">"Rechercher sur la page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# correspondance}one{# sur {total}}other{# sur {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Terminé"</string> <string name="progress_erasing" msgid="6891435992721028004">"Effacement du stockage partagé en cours…"</string> <string name="share" msgid="4157615043345227321">"Partager"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> s\'exécute en arrière-plan et décharge rapidement la pile. Touchez pour examiner."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> s\'exécute en arrière-plan depuis longtemps. Touchez pour examiner."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Vérifier les applications actives"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Impossible d\'accéder à l\'appareil photo à partir de cet appareil"</string> </resources> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 7770aed9f69a..6e55c1dc58e2 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"accéder à votre agenda"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"envoyer et consulter des SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fichiers et documents"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"accéder aux fichiers et documents sur votre appareil"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musique et autres contenus audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"accès aux fichiers audio sur votre appareil"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Photos et vidéos"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Utilisez le verrouillage de l\'écran pour continuer"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Empreinte partielle détectée"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nettoyez le lecteur d\'empreinte digitale et réessayez"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nettoyez le lecteur et réessayez"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez bien sur le lecteur"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Essayez une autre empreinte"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Trop de lumière"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Changez légèrement de position chaque fois"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Appuyez bien sur le lecteur"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur \"Confirmer\""</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Ignorer"</string> <string name="no_matches" msgid="6472699895759164599">"Aucune correspondance"</string> <string name="find_on_page" msgid="5400537367077438198">"Rechercher sur la page"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# correspondance}one{# sur {total}}other{# sur {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"OK"</string> <string name="progress_erasing" msgid="6891435992721028004">"Suppression de l\'espace de stockage partagé…"</string> <string name="share" msgid="4157615043345227321">"Partager"</string> @@ -1967,7 +1959,7 @@ <string name="app_category_image" msgid="7307840291864213007">"Photos et images"</string> <string name="app_category_social" msgid="2278269325488344054">"Réseaux sociaux et communication"</string> <string name="app_category_news" msgid="1172762719574964544">"Actualités et magazines"</string> - <string name="app_category_maps" msgid="6395725487922533156">"Plans et navigation"</string> + <string name="app_category_maps" msgid="6395725487922533156">"Cartes et navigation"</string> <string name="app_category_productivity" msgid="1844422703029557883">"Productivité"</string> <string name="app_category_accessibility" msgid="6643521607848547683">"Accessibilité"</string> <string name="device_storage_monitor_notification_channel" msgid="5164244565844470758">"Mémoire de l\'appareil"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> s\'exécute en arrière-plan et décharge la batterie. Appuyez ici pour en savoir plus."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> s\'exécute en arrière-plan depuis longtemps. Appuyez ici pour en savoir plus."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Vérifier les applis actives"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Impossible d\'accéder à l\'appareil photo depuis cet appareil"</string> </resources> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 6db4a32d81a1..bd74bc6beabe 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"acceder ao teu calendario"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"enviar e consultar mensaxes de SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Ficheiros e documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"acceder a ficheiros e documentos do dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música e outro contido de audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"acceder a ficheiros de audio do teu dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos e vídeos"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Desbloquea a pantalla para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Detectouse unha impresión dixital parcial"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Non se puido procesar a impresión dixital. Téntao de novo."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpa o sensor de impresión dixital e téntao de novo"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpa o sensor e téntao de novo"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Preme o sensor con firmeza"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O dedo moveuse demasiado lento. Téntao de novo."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Proba con outra impresión dixital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hai demasiada luz"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia lixeiramente a posición do dedo en cada intento"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Non se recoñeceu a impresión dixital"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Preme o sensor con firmeza"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autenticouse a impresión dixital"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autenticouse a cara"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autenticouse a cara, preme Confirmar"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Omitir"</string> <string name="no_matches" msgid="6472699895759164599">"Non hai coincidencias"</string> <string name="find_on_page" msgid="5400537367077438198">"Buscar na páxina"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# coincidencia}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Feito"</string> <string name="progress_erasing" msgid="6891435992721028004">"Borrando almacenamento compartido…"</string> <string name="share" msgid="4157615043345227321">"Compartir"</string> @@ -2102,11 +2094,11 @@ <string name="accessibility_system_action_on_screen_a11y_shortcut_chooser_label" msgid="1057878690209817886">"Selector de atallos de accesibilidade en pantalla"</string> <string name="accessibility_system_action_hardware_a11y_shortcut_label" msgid="5764644187715255107">"Atallo de accesibilidade"</string> <string name="accessibility_system_action_dismiss_notification_shade" msgid="8931637495533770352">"Ignorar panel despregable"</string> - <string name="accessibility_system_action_dpad_up_label" msgid="1029042950229333782">"Botón direccional: arriba"</string> - <string name="accessibility_system_action_dpad_down_label" msgid="3441918448624921461">"Botón direccional: abaixo"</string> - <string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Botón direccional: esquerda"</string> - <string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Botón direccional: dereita"</string> - <string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Botón direccional: centro"</string> + <string name="accessibility_system_action_dpad_up_label" msgid="1029042950229333782">"Cruceta: arriba"</string> + <string name="accessibility_system_action_dpad_down_label" msgid="3441918448624921461">"Cruceta: abaixo"</string> + <string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Cruceta: esquerda"</string> + <string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Cruceta: dereita"</string> + <string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Cruceta: centro"</string> <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Barra de subtítulos de <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> incluíuse no grupo RESTRINXIDO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> está executándose en segundo plano e consumindo batería. Toca para revisalo."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> leva moito tempo executándose en segundo plano. Toca para revisalo."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Comprobar aplicacións activas"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Non se pode acceder á cámara desde este dispositivo"</string> </resources> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index fe1b92b64921..8a4916beed9d 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"તમારા કેલેન્ડરને ઍક્સેસ કરવાની"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS સંદેશા મોકલવાની અને જોવાની"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ફાઇલો અને દસ્તાવેજો"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"તમારા ડિવાઇસ પર ફાઇલો અને દસ્તાવેજો ઍક્સેસ કરો"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"મ્યુઝિક અને અન્ય ઑડિયો"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"તમારા ડિવાઇસ પર ઑડિયો ફાઇલો ઍક્સેસ કરવા માટે"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"ફોટા અને વીડિયો"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"આગળ વધવા માટે તમારું સ્ક્રીન લૉક દાખલ કરો"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"આંશિક ફિંગરપ્રિન્ટ મળી"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ફિંગરપ્રિન્ટ પ્રક્રિયા કરી શકાઈ નથી. કૃપા કરીને ફરી પ્રયાસ કરો."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ફિંગરપ્રિન્ટ સેન્સર સાફ કરો અને ફરી પ્રયાસ કરો"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"સેન્સર સાફ કરો અને ફરી પ્રયાસ કરો"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"સેન્સર પર જોરથી દબાવો"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"આંગળી બહુ જ ધીમેથી ખસેડી. કૃપા કરીને ફરી પ્રયાસ કરો."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"અન્ય ફિંગરપ્રિન્ટ અજમાવી જુઓ"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"અતિશય પ્રકાશિત"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"દરેક વખતે સ્કૅનર પર તમારી આંગળીની સ્થિતિ સહેજ બદલતા રહો"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"સેન્સર પર જોરથી દબાવો"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ફિંગરપ્રિન્ટ પ્રમાણિત કરી"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ચહેરા પ્રમાણિત"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ચહેરા પ્રમાણિત, કૃપા કરીને કન્ફર્મ કરો"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"છોડો"</string> <string name="no_matches" msgid="6472699895759164599">"કોઈ મેળ નથી"</string> <string name="find_on_page" msgid="5400537367077438198">"પૃષ્ઠ પર શોધો"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# મૅચ}one{{total}માંથી #}other{{total}માંથી #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"થઈ ગયું"</string> <string name="progress_erasing" msgid="6891435992721028004">"શેર કરેલ સ્ટોરેજ ભૂસી રહ્યાં છીએ…"</string> <string name="share" msgid="4157615043345227321">"શેર કરો"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> બૅકગ્રાઉન્ડમાં ચાલી રહી છે અને અતિશય બૅટરી વાપરી રહી છે. રિવ્યૂ કરવા માટે ટૅપ કરો."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> લાંબા સમયથી બૅકગ્રાઉન્ડમાં ચાલી રહી છે. રિવ્યૂ કરવા માટે ટૅપ કરો."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"સક્રિય ઍપ ચેક કરો"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"આ ડિવાઇસમાંથી કૅમેરા ઍક્સેસ કરી શકાતો નથી"</string> </resources> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 3cf213710d7f..b688fd2395a6 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"अपने कैलेंडर को ऐक्सेस करें"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"मैसेज (एसएमएस)"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"मैसेज (एसएमएस) भेजें और देखें"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"फ़ाइलें और दस्तावेज़"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"अपने डिवाइस पर मौजूद फ़ाइलें और दस्तावेज़ ऐक्सेस करने की अनुमति दें"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"संगीत और अन्य ऑडियो"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"आपके डिवाइस पर मौजूद, ऑडियो फ़ाइलों का ऐक्सेस"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"फ़ोटो और वीडियो"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"जारी रखने के लिए, अपने स्क्रीन लॉक की पुष्टि करें"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"पूरा फ़िंगरप्रिंट पहचाना नहीं जा सका"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फ़िंगरप्रिंट प्रोसेस नहीं हो सका. कृपया दोबारा कोशिश करें."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से ज़ोर से दबाएं"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"उंगली बहुत धीरे चलाई गई. कृपया फिर से कोशिश करें."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"किसी दूसरे फ़िंगरप्रिंट से कोशिश करें"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"बहुत रोशनी है"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार थोड़ी अलग स्थिति में रखें"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फ़िंगरप्रिंट की पहचान नहीं हो पाई"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"सेंसर को उंगली से ज़ोर से दबाएं"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"फ़िंगरप्रिंट की पुष्टि हो गई"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"चेहरे की पहचान की गई"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरे की पहचान की गई, कृपया पुष्टि बटन दबाएं"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"अभी नहीं"</string> <string name="no_matches" msgid="6472699895759164599">"कोई मिलान नहीं"</string> <string name="find_on_page" msgid="5400537367077438198">"पेज पर ढूंढें"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# नतीजा}one{{total} में से #}other{{total} में से #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"हो गया"</string> <string name="progress_erasing" msgid="6891435992721028004">"शेयर की गई मेमोरी हमेशा के लिए मिटाई जा रही है…"</string> <string name="share" msgid="4157615043345227321">"शेयर करें"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> बैकग्राउंड में चल रहा है और बैटरी खर्च कर रहा है. देखने के लिए टैप करें."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> बैकग्राउंड में बहुत देर से चल रहा है. देखने के लिए टैप करें."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"चालू ऐप्लिकेशन देखें"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"इस डिवाइस से कैमरे का इस्तेमाल नहीं किया जा सकता"</string> </resources> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 14139eae3d0b..fff937bc6296 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -305,10 +305,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"pristupati kalendaru"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"slati i pregledavati SMS poruke"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Datoteke i dokumenti"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"pristup datotekama i dokumentima na vašem uređaju"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Glazba i druge audiodatoteke"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"pristup audiodatotekama na uređaju"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotografije i videozapisi"</string> @@ -589,12 +587,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Upotrijebite zaključavanje zaslona da biste nastavili"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Otkriven je djelomični otisak prsta"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Očistite senzor otiska prsta i pokušajte ponovno"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Očistite senzor i pokušajte ponovno"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Čvrsto pritisnite senzor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Presporo pomicanje prsta. Pokušajte ponovo."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Isprobajte drugi otisak prsta"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvijetlo"</string> @@ -602,10 +597,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Svaki put lagano promijenite položaj prsta"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Čvrsto pritisnite senzor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentificirano otiskom prsta"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je autentificirano"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je autentificirano, pritisnite Potvrdi"</string> @@ -1509,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Preskoči"</string> <string name="no_matches" msgid="6472699895759164599">"Nema rezultata"</string> <string name="find_on_page" msgid="5400537367077438198">"Pronađi na stranici"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# podudaranje}one{# od {total}}few{# od {total}}other{# od {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Gotovo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Brisanje dijeljene pohrane…"</string> <string name="share" msgid="4157615043345227321">"Dijeli"</string> @@ -2264,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> izvodi se u pozadini i prazni bateriju. Dodirnite za pregled."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> dugo se izvodi u pozadini. Dodirnite za pregled."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Provjera aktivnih aplikacija"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Kameri se ne može pristupiti s ovog uređaja"</string> </resources> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index f94f063ea07a..166a1176e1a1 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -545,7 +545,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Lehetővé teszi az alkalmazás számára, hogy közzétegye jelenlétét a közeli Bluetooth-eszközök számára"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"közeli, ultraszélessávú eszközök közötti relatív pozíció meghatározása"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Az alkalmazás meghatározhatja a közeli, ultraszélessávú eszközök közötti relatív pozíciót"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"műveleteket végezhet a közeli Wi‑Fi-eszközökkel"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"műveletek végrehajtása a közeli Wi‑Fi-eszközökkel"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Engedélyezi az alkalmazás számára, hogy közzétegye és meghatározza a közeli Wi-Fi-eszközök viszonylagos helyzetét, és csatlakozzon hozzájuk."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Preferált NFC fizetési szolgáltatási információk"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Lehetővé teszi az alkalmazás számára preferált NFC fizetési szolgáltatási információk (pl. regisztrált alkalmazásazonosítók és útvonali cél) lekérését."</string> @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Kihagyás"</string> <string name="no_matches" msgid="6472699895759164599">"Nincs találat"</string> <string name="find_on_page" msgid="5400537367077438198">"Keresés az oldalon"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# egyezés}other{{total}/#}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Kész"</string> <string name="progress_erasing" msgid="6891435992721028004">"Közös tárhely tartalmának törlése…"</string> <string name="share" msgid="4157615043345227321">"Megosztás"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"A(z) <xliff:g id="APP">%1$s</xliff:g> alkalmazás fut a háttérben, és meríti az akkumulátort. Koppintson az áttekintéshez."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"A(z) <xliff:g id="APP">%1$s</xliff:g> alkalmazás már hosszú ideje fut a háttérben. Koppintson az áttekintéshez."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Aktív alkalmazások ellenőrzése"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Ezen az eszközön nem lehet hozzáférni a kamerához"</string> </resources> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index ea6eddd1dee8..76ca7a964f66 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"օգտագործել օրացույցը"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"ուղարկել և դիտել SMS-ները"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Ֆայլեր և փաստաթղթեր"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"սարքի ֆայլերի և փաստաթղթերի օգտագործման թույլտվություն"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Երաժշտություն և այլ աուդիո նյութեր"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"բացել ձեր սարքում պահված աուդիո ֆայլերը"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Լուսանկարներ և տեսանյութեր"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Շարունակելու համար ապակողպեք էկրանը"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Մատնահետքն ամբողջությամբ չի սկանավորվել"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Չհաջողվեց մշակել մատնահետքը: Նորից փորձեք:"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Մաքրեք մատնահետքերի սկաները և նորից փորձեք"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Մաքրեք սկաները և նորից փորձեք"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Մատը ուժեղ սեղմեք սկաների վրա"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Շատ դանդաղ անցկացրիք մատը: Փորձեք նորից:"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Փորձեք մեկ այլ մատնահետք"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Շատ լուսավոր է"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ամեն անգամ թեթևակի փոխեք մատի դիրքը"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Մատնահետքը չի ճանաչվել"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Մատը ուժեղ սեղմեք սկաների վրա"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Մատնահետքը նույնականացվեց"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Դեմքը ճանաչվեց"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Դեմքը ճանաչվեց: Սեղմեք «Հաստատել»:"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Բաց թողնել"</string> <string name="no_matches" msgid="6472699895759164599">"Համընկնում չկա"</string> <string name="find_on_page" msgid="5400537367077438198">"Գտեք էջում"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# համընկնում}one{#՝ {total}-ից}other{#՝ {total}-ից}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Պատրաստ է"</string> <string name="progress_erasing" msgid="6891435992721028004">"Ընդհանուր հիշողությունը ջնջվում է…"</string> <string name="share" msgid="4157615043345227321">"Կիսվել"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> հավելվածն աշխատում է ֆոնային ռեժիմում և սպառում է մարտկոցի լիցքը։ Հպեք՝ դիտելու համար։"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> հավելվածը երկար ժամանակ աշխատում է ֆոնային ռեժիմում։ Հպեք՝ դիտելու համար։"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Ստուգել ակտիվ հավելվածները"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Հնարավոր չէ բացել տեսախցիկն այս սարքից"</string> </resources> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index de24aa5d0194..1868e3792920 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"mengakses kalender"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"mengirim dan melihat pesan SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"File & dokumen"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"mengakses file dan dokumen di perangkat Anda"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musik & audio lainnya"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"mengakses file audio di perangkat Anda"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Foto & video"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"menentukan posisi relatif antar-perangkat Ultra-Wideband di sekitar"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Mengizinkan aplikasi menentukan posisi relatif antar-perangkat Ultra-Wideband di sekitar"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"berinteraksi dengan perangkat Wi-Fi di sekitar"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Mengizinkan aplikasi menampilkan informasi, menghubungkan, dan menentukan posisi relatif perangkat Wi-Fi di sekitar"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Mengizinkan aplikasi menampilkan, menghubungkan, dan menentukan posisi relatif perangkat Wi-Fi di sekitar"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informasi Layanan Pembayaran NFC Pilihan"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Mengizinkan aplikasi untuk mendapatkan informasi layanan pembayaran NFC pilihan seperti bantuan terdaftar dan tujuan rute."</string> <string name="permlab_nfc" msgid="1904455246837674977">"kontrol NFC"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Masukkan kunci layar untuk melanjutkan"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Sebagian sidik jari terdeteksi"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses sidik jari. Coba lagi."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Bersihkan sensor sidik jari lalu coba lagi"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Bersihkan sensor lalu coba lagi"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan sensor dengan kuat"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Jari digerakkan terlalu lambat. Coba lagi."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Coba sidik jari lain"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ubah sedikit posisi jari di setiap percobaan"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sidik jari tidak dikenali"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Tekan sensor dengan kuat"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sidik jari diautentikasi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah diautentikasi"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah diautentikasi, silakan tekan konfirmasi"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Lewati"</string> <string name="no_matches" msgid="6472699895759164599">"Tidak ada kecocokan"</string> <string name="find_on_page" msgid="5400537367077438198">"Temukan pada halaman"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# kecocokan}other{# dari {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Selesai"</string> <string name="progress_erasing" msgid="6891435992721028004">"Menghapus penyimpanan bersama…"</string> <string name="share" msgid="4157615043345227321">"Bagikan"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> berjalan di latar belakang dan menghabiskan daya baterai. Ketuk untuk meninjau."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> berjalan di latar belakang dalam waktu yang lama. Ketuk untuk meninjau."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Periksa aplikasi aktif"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Tidak dapat mengakses kamera dari perangkat ini"</string> </resources> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 4b2f371938a3..07560e1856ef 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"fá aðgang að dagatalinu þínu"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"senda og skoða SMS-skilaboð"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Skrár og skjöl"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"fá aðgang að skrám og skjölum í tækinu þínu"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Tónlist og annað hljóð"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"fá aðgang að hljóðskrám í tækinu þínu"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Myndir og myndskeið"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Sláðu inn skjálásinn þinn til að halda áfram"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Hluti fingrafars greindist"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ekki var hægt að vinna úr fingrafarinu. Reyndu aftur."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hreinsaðu fingrafaralesarann og reyndu aftur"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Hreinsaðu lesarann og reyndu aftur"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Ýttu ákveðið á lesarann"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Fingurinn hreyfðist of hægt. Reyndu aftur."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prófaðu annað fingrafar"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Of bjart"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Breyttu stöðu fingursins örlítið í hvert skipti"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ekki þekkt fingrafar"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Ýttu ákveðið á lesarann"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingrafar staðfest"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Andlit staðfest"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Andlit staðfest, ýttu til að staðfesta"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Sleppa"</string> <string name="no_matches" msgid="6472699895759164599">"Engar samsvaranir"</string> <string name="find_on_page" msgid="5400537367077438198">"Finna á síðu"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# samsvörun}one{# af {total}}other{# af {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Lokið"</string> <string name="progress_erasing" msgid="6891435992721028004">"Eyðir samnýttri geymslu…"</string> <string name="share" msgid="4157615043345227321">"Deila"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> keyrir í bakgrunni og eyðir rafhlöðuorku. Ýttu til að skoða."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> hefur keyrt lengi í bakgrunni. Ýttu til að skoða."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Skoða virk forrit"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Aðgangur að myndavél er ekki tiltækur í þessu tæki"</string> </resources> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index b246d796cb02..6ee8ba350e03 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -537,11 +537,11 @@ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Consente all\'applicazione di visualizzare la configurazione del Bluetooth sul tablet e di stabilire e accettare connessioni con dispositivi accoppiati."</string> <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Consente all\'app di visualizzare la configurazione del Bluetooth del dispositivo Android TV, nonché di stabilire e accettare connessioni con dispositivi accoppiati."</string> <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Consente all\'applicazione di visualizzare la configurazione del Bluetooth sul telefono e di stabilire e accettare connessioni con dispositivi accoppiati."</string> - <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"Rilevamento/accopp. dispositivi Bluetooth vicini"</string> + <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"Rilevamento e accoppiamento di dispositivi Bluetooth vicini"</string> <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Consente all\'app di rilevare e accoppiare dispositivi Bluetooth nelle vicinanze"</string> <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"Connessione a dispositivi Bluetooth accoppiati"</string> <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Consente all\'app di connettersi ai dispositivi Bluetooth accoppiati"</string> - <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"trasmettere annunci a dispositivi Bluetooth vicini"</string> + <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"Trasmissione di annunci a dispositivi Bluetooth vicini"</string> <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Consente all\'app di trasmettere annunci ai dispositivi Bluetooth nelle vicinanze"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"Possibilità di stabilire la posizione relativa tra dispositivi a banda ultralarga nelle vicinanze"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Consenti all\'app di stabilire la posizione relativa tra dispositivi a banda ultralarga nelle vicinanze"</string> @@ -682,7 +682,7 @@ <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"Consente a un\'applicazione di modificare le impostazioni di sincronizzazione per un account. Ad esempio, può servire per attivare la sincronizzazione dell\'applicazione Persone con un account."</string> <string name="permlab_readSyncStats" msgid="3747407238320105332">"lettura statistiche di sincronizz."</string> <string name="permdesc_readSyncStats" msgid="3867809926567379434">"Consente a un\'applicazione di leggere le statistiche di sincronizzazione per un account, incluse la cronologia degli eventi di sincronizzazione e la quantità di dati sincronizzati."</string> - <string name="permlab_sdcardRead" msgid="5791467020950064920">"lettura dei contenuti dell\'archivio condiviso"</string> + <string name="permlab_sdcardRead" msgid="5791467020950064920">"Lettura dei contenuti dell\'archivio condiviso"</string> <string name="permdesc_sdcardRead" msgid="6872973242228240382">"Consente all\'app di leggere i contenuti del tuo archivio condiviso."</string> <string name="permlab_readMediaAudio" msgid="8723513075731763810">"Lettura dei file audio dallo spazio di archiviazione condiviso"</string> <string name="permdesc_readMediaAudio" msgid="5299772574434619399">"Consente all\'app di leggere i file audio dal tuo spazio di archiviazione condiviso."</string> @@ -690,7 +690,7 @@ <string name="permdesc_readMediaVideo" msgid="3846400073770403528">"Consente all\'app di leggere i file video dal tuo spazio di archiviazione condiviso."</string> <string name="permlab_readMediaImage" msgid="1507059005825769856">"Lettura dei file immagine dallo spazio di archiviazione condiviso"</string> <string name="permdesc_readMediaImage" msgid="8328052622292457588">"Consente all\'app di leggere i file immagine dal tuo spazio di archiviazione condiviso."</string> - <string name="permlab_sdcardWrite" msgid="4863021819671416668">"modifica/eliminazione dei contenuti dell\'archivio condiviso"</string> + <string name="permlab_sdcardWrite" msgid="4863021819671416668">"Modifica/eliminazione dei contenuti dell\'archivio condiviso"</string> <string name="permdesc_sdcardWrite" msgid="8376047679331387102">"Consente all\'app di modificare i contenuti del tuo archivio condiviso."</string> <string name="permlab_use_sip" msgid="8250774565189337477">"invio/ricezione di chiamate SIP"</string> <string name="permdesc_use_sip" msgid="3590270893253204451">"Consente all\'app di effettuare e ricevere chiamate SIP."</string> @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Salta"</string> <string name="no_matches" msgid="6472699895759164599">"Nessuna corrispondenza"</string> <string name="find_on_page" msgid="5400537367077438198">"Trova nella pagina"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# corrispondenza}one{# di {total}}other{# di {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Fine"</string> <string name="progress_erasing" msgid="6891435992721028004">"Cancellazione archivio condiviso…"</string> <string name="share" msgid="4157615043345227321">"Condividi"</string> @@ -2023,16 +2022,11 @@ <string name="harmful_app_warning_uninstall" msgid="6472912975664191772">"DISINSTALLA"</string> <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"APRI COMUNQUE"</string> <string name="harmful_app_warning_title" msgid="8794823880881113856">"App dannosa rilevata"</string> - <!-- no translation found for log_access_confirmation_title (3143035474800851565) --> - <skip /> - <!-- no translation found for log_access_confirmation_allow (143157286283302512) --> - <skip /> - <!-- no translation found for log_access_confirmation_deny (7685790957455099845) --> - <skip /> - <!-- no translation found for log_access_confirmation_body (7599059550906238538) --> - <skip /> - <!-- no translation found for log_access_do_not_show_again (1058690599083091552) --> - <skip /> + <string name="log_access_confirmation_title" msgid="3143035474800851565">"Richiesta di accesso al log di sistema"</string> + <string name="log_access_confirmation_allow" msgid="143157286283302512">"Solo questa volta"</string> + <string name="log_access_confirmation_deny" msgid="7685790957455099845">"Non consentire"</string> + <string name="log_access_confirmation_body" msgid="7599059550906238538">"<xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> richiede i log di sistema per eseguire debug funzionali. Questi log potrebbero contenere informazioni scritte dalle app e dai servizi sul tuo dispositivo."</string> + <string name="log_access_do_not_show_again" msgid="1058690599083091552">"Non mostrare più"</string> <string name="slices_permission_request" msgid="3677129866636153406">"L\'app <xliff:g id="APP_0">%1$s</xliff:g> vuole mostrare porzioni dell\'app <xliff:g id="APP_2">%2$s</xliff:g>"</string> <string name="screenshot_edit" msgid="7408934887203689207">"Modifica"</string> <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"La vibrazione sarà attiva per chiamate e notifiche"</string> @@ -2125,10 +2119,8 @@ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocca per attivare"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nessuna app di lavoro"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nessuna app personale"</string> - <!-- no translation found for miniresolver_open_in_personal (3874522693661065566) --> - <skip /> - <!-- no translation found for miniresolver_open_in_work (4415223793669536559) --> - <skip /> + <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Aprire <xliff:g id="APP">%s</xliff:g> nel tuo profilo personale?"</string> + <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Aprire <xliff:g id="APP">%s</xliff:g> nel tuo profilo di lavoro?"</string> <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usa il browser personale"</string> <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usa il browser di lavoro"</string> <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN di sblocco rete SIM"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> è in esecuzione in background e sta consumando la batteria. Tocca per controllare."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> è in esecuzione in background da molto tempo. Tocca per controllare."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verifica le app attive"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Impossibile accedere alla fotocamera da questo dispositivo"</string> </resources> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 7cd023fd140a..ea61e3619be6 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"גישה אל היומן"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"שליחה והצגה של הודעות SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"קבצים ומסמכים"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"גישה לקבצים ולמסמכים במכשיר"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"מוזיקה וסוגי אודיו אחרים"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"גישה לקובצי אודיו במכשיר"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"תמונות וסרטונים"</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"יש לבטל את נעילת המסך כדי להמשיך"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"זוהתה טביעת אצבע חלקית"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"לא ניתן היה לעבד את טביעת האצבע. אפשר לנסות שוב."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"עליך לנקות את חיישן טביעות האצבע ולנסות שוב"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"עליך לנקות את החיישן ולנסות שוב"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"צריך ללחוץ חזק על החיישן"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"הזזת את האצבע לאט מדי. יש לנסות שוב."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"יש להשתמש בטביעת אצבע אחרת"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"בהיר מדי"</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"צריך לשנות מעט את תנוחת האצבע בכל פעם"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"טביעת האצבע לא זוהתה"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"צריך ללחוץ חזק על החיישן"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"טביעת האצבע אומתה"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"זיהוי הפנים בוצע"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"זיהוי הפנים בוצע. יש ללחוץ על אישור"</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"דילוג"</string> <string name="no_matches" msgid="6472699895759164599">"אין התאמות"</string> <string name="find_on_page" msgid="5400537367077438198">"חיפוש בדף"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{התאמה אחת}two{# מתוך {total}}many{# מתוך {total}}other{# מתוך {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"סיום"</string> <string name="progress_erasing" msgid="6891435992721028004">"בתהליך מחיקה של אחסון משותף…"</string> <string name="share" msgid="4157615043345227321">"שיתוף"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"האפליקציה <xliff:g id="APP">%1$s</xliff:g> פועלת ברקע ומרוקנת את הסוללה. יש להקיש כדי לבדוק."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"האפליקציה <xliff:g id="APP">%1$s</xliff:g> פועלת ברקע במשך הרבה זמן. יש להקיש כדי לבדוק."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"כדאי לבדוק את האפליקציות הפעילות"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"לא ניתן לגשת למצלמה מהמכשיר הזה"</string> </resources> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 0c701872a899..8bb6b0f20b51 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -545,7 +545,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"付近の Bluetooth デバイスへの広告の配信をアプリに許可します"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"付近の Ultra Wideband デバイス間の相対位置の特定"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"付近の Ultra Wideband デバイス間の相対位置の特定をアプリに許可します"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"付近の Wi-Fi デバイスとのやり取り"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"付近の Wi-Fi デバイスとの通信"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"付近の Wi-Fi デバイスについて、情報の表示、接続、相対位置の確認をアプリに許可します"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"優先される NFC お支払いサービスの情報"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"登録されている支援やルートの目的地など、優先される NFC お支払いサービスの情報を取得することをアプリに許可します。"</string> @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"スキップ"</string> <string name="no_matches" msgid="6472699895759164599">"該当なし"</string> <string name="find_on_page" msgid="5400537367077438198">"ページ内を検索"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{一致: # 件}other{#/{total} 件}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"完了"</string> <string name="progress_erasing" msgid="6891435992721028004">"共有ストレージを消去しています…"</string> <string name="share" msgid="4157615043345227321">"共有"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> がバックグラウンドで実行され、バッテリーを消費しています。タップしてご確認ください。"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> がバックグラウンドで長時間実行されています。タップしてご確認ください。"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"有効なアプリをチェック"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"このデバイスからはカメラにアクセスできません"</string> </resources> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index ae3f31cbe9ea..0a41b20844c2 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"გამოტოვება"</string> <string name="no_matches" msgid="6472699895759164599">"შესატყვისები არ არის."</string> <string name="find_on_page" msgid="5400537367077438198">"გვერდზე ძებნა"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# დამთხვევა}other{{total}-დან #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"დასრულდა"</string> <string name="progress_erasing" msgid="6891435992721028004">"მიმდინარეობს ზიარი მეხსიერების ამოშლა…"</string> <string name="share" msgid="4157615043345227321">"გაზიარება"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> გაშვებულია ფონურ რეჟიმში და იყენებს ბატარეას. შეეხეთ გადასახედად."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ფონურ რეჟიმში დიდი ხანია გაშვებულია. შეეხეთ გადასახედად."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"აქტიური აპების შემოწმება"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"კამერაზე წვდომა ამ მოწყობილობიდან ვერ მოხერხდება"</string> </resources> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 439060fa47c2..fb6ffcff558d 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"күнтізбеге кіру"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS хабарларын жіберу және көру"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файлдар мен құжаттар"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"құрылғыдағы файлдар мен құжаттарды пайдалану"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музыка және басқа аудио"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"құрылғыдағы аудиофайлдарды пайдалану"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Фотосуреттер және бейнелер"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Жалғастыру үшін экран құлпын енгізіңіз."</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Саусақ ізі жартылай анықталды."</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Саусақ ізін өңдеу мүмкін емес. Әрекетті қайталаңыз."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Саусақ ізін оқу сканерін тазалап, әрекетті қайталаңыз."</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сканерді тазалап, әрекетті қайталаңыз."</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сканерге қатты басыңыз."</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Саусағыңызды тым баяу қозғалттыңыз. Әрекетті қайталап көріңіз."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Басқа саусақ ізін байқап көріңіз."</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Тым жарық."</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың қалпын аздап өзгертіп тұрыңыз."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Саусақ ізі танылмады."</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Сканерге қатты басыңыз."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Саусақ ізі аутентификацияланды"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Бет танылды"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Бет танылды, \"Растау\" түймесін басыңыз"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Өткізіп жіберу"</string> <string name="no_matches" msgid="6472699895759164599">"Сәйкес табылмады"</string> <string name="find_on_page" msgid="5400537367077438198">"Беттен табу"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# сәйкестік}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Дайын"</string> <string name="progress_erasing" msgid="6891435992721028004">"Ортақ жад тазартылуда…"</string> <string name="share" msgid="4157615043345227321">"Бөлісу"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> қолданбасы фондық режимде жұмыс істеуде және батарея жұмсауда. Көру үшін түртіңіз."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> қолданбасы ұзақ уақыт бойы фондық режимде жұмыс істеуде. Көру үшін түртіңіз."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Белсенді қолданбаларды тексеру"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Бұл құрылғыдан камераны пайдалану мүмкін емес."</string> </resources> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 49f22552a7e0..7e02b8bef95e 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ចូលប្រើប្រិតិទិនរបស់អ្នក"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"សារ SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"ផ្ញើ និងមើលសារ SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ឯកសារ"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"ចូលប្រើឯកសារនៅលើឧបករណ៍របស់អ្នក"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"តន្ត្រី និងសំឡេងផ្សេងទៀត"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"ចូលប្រើឯកសារសំឡេងនៅលើឧបករណ៍របស់អ្នក"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"រូបថត និងវីដេអូ"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"បញ្ចូលការចាក់សោអេក្រង់របស់អ្នក ដើម្បីបន្ត"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"បានសម្គាល់ស្នាមម្រាមដៃដោយផ្នែក"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"មិនអាចដំណើរការស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្តងទៀត។"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"សម្អាតឧបករណ៍ចាប់ស្នាមម្រាមដៃ រួចព្យាយាមម្ដងទៀត"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"សម្អាតឧបករណ៍ចាប់សញ្ញា រួចព្យាយាមម្ដងទៀត"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"សង្កត់លើឧបករណ៍ចាប់សញ្ញាឱ្យណែន"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ចលនាម្រាមដៃយឺតពេកហើយ។ សូមព្យាយាមម្តងទៀត។"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"សាកល្បងប្រើស្នាមម្រាមដៃផ្សេងទៀត"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ភ្លឺពេក"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ប្ដូរទីតាំងម្រាមដៃរបស់អ្នកតិចៗគ្រប់ពេល"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"មិនស្គាល់ស្នាមម្រាមដៃទេ"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"សង្កត់លើឧបករណ៍ចាប់សញ្ញាឱ្យណែន"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"បានផ្ទៀងផ្ទាត់ស្នាមម្រាមដៃ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"បានផ្ទៀងផ្ទាត់មុខ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"បានផ្ទៀងផ្ទាត់មុខ សូមចុចបញ្ជាក់"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"រំលង"</string> <string name="no_matches" msgid="6472699895759164599">"គ្មានការផ្គូផ្គង"</string> <string name="find_on_page" msgid="5400537367077438198">"រកក្នុងទំព័រ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{ត្រូវគ្នា #}other{# នៃ {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"រួចរាល់"</string> <string name="progress_erasing" msgid="6891435992721028004">"កំពុងលុបទំហំផ្ទុករួម…"</string> <string name="share" msgid="4157615043345227321">"ចែករំលែក"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> កំពុងដំណើរការនៅផ្ទៃខាងក្រោយ និងធ្វើឱ្យអស់ថ្មលឿន។ សូមចុច ដើម្បីពិនិត្យមើល។"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> កំពុងដំណើរការនៅផ្ទៃខាងក្រោយអស់រយៈពេលយូរហើយ។ សូមចុច ដើម្បីពិនិត្យមើល។"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ពិនិត្យមើលកម្មវិធីសកម្ម"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"មិនអាចចូលប្រើកាមេរ៉ាពីឧបករណ៍នេះបានទេ"</string> </resources> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index b73b96f2df4c..c2c50787f91a 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ಸ್ಕಿಪ್"</string> <string name="no_matches" msgid="6472699895759164599">"ಯಾವುದೇ ಹೊಂದಿಕೆಗಳಿಲ್ಲ"</string> <string name="find_on_page" msgid="5400537367077438198">"ಪುಟದಲ್ಲಿ ಹುಡುಕಿ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# ಹೊಂದಾಣಿಕೆ}one{{total} ರಲ್ಲಿ #}other{{total} ರಲ್ಲಿ #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ಮುಗಿದಿದೆ"</string> <string name="progress_erasing" msgid="6891435992721028004">"ಹಂಚಲಾದ ಸಂಗ್ರಹಣೆಯನ್ನು ಅಳಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="share" msgid="4157615043345227321">"ಹಂಚಿಕೊಳ್ಳಿ"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ ಹಾಗೂ ಬ್ಯಾಟರಿಯನ್ನು ಹೆಚ್ಚು ಬಳಸುತ್ತಿದೆ. ಪರಿಶೀಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ಬಹಳ ಸಮಯದಿಂದ ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ. ಪರಿಶೀಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ಸಕ್ರಿಯ ಆ್ಯಪ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ಈ ಸಾಧನದಿಂದ ಕ್ಯಾಮರಾ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> </resources> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index a7f8cb4cf882..f60cf0db065a 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"캘린더에 액세스"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS 메시지 전송 및 보기"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"파일 및 문서"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"기기의 파일 및 문서에 액세스"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"음악 및 기타 오디오"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"기기에 있는 오디오 파일에 액세스"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"사진 및 동영상"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"계속하려면 화면 잠금용 사용자 인증 정보를 입력하세요"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"지문의 일부만 감지됨"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"지문 센서를 닦은 후 다시 시도해 보세요."</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"센서를 닦은 후 다시 시도해 보세요."</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"다른 지문으로 시도"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"너무 밝음"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"지문을 등록할 때마다 손가락을 조금씩 이동하세요."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"지문이 인식되지 않습니다."</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"지문이 인증됨"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"얼굴이 인증되었습니다"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"얼굴이 인증되었습니다. 확인을 누르세요"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"건너뛰기"</string> <string name="no_matches" msgid="6472699895759164599">"검색결과 없음"</string> <string name="find_on_page" msgid="5400537367077438198">"페이지에서 찾기"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{#개 일치}other{총 {total}개 중 #번째}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"완료"</string> <string name="progress_erasing" msgid="6891435992721028004">"공유 저장공간 지우는 중…"</string> <string name="share" msgid="4157615043345227321">"공유"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> 앱이 백그라운드에서 실행 중이며 배터리를 소모하고 있습니다. 확인하려면 탭하세요."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> 앱이 백그라운드에서 오랫동안 실행 중입니다. 확인하려면 탭하세요."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"활성 상태의 앱 확인"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"이 기기에서 카메라에 액세스할 수 없습니다."</string> </resources> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 577626de8226..512ecfd58d58 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"жылнаамаңызды пайдалануу"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS билдирүүлөрдү жиберүү жана көрсөтүү"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файлдар жана документтер"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"түзмөгүңүздөгү файлдары жана документтерди колдонуу"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музыка жана башка аудио"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"түзмөгүңүздөгү аудио файлдарга мүмкүнчүлүк алуу"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Сүрөттөр жана видеолор"</string> @@ -454,9 +452,9 @@ <string name="permdesc_recordBackgroundAudio" msgid="1992623135737407516">"Бул колдонмо каалаган убакта микрофон менен аудио файлдарды жаздыра алат."</string> <string name="permlab_sim_communication" msgid="176788115994050692">"SIM-картага буйруктарды жөнөтүү"</string> <string name="permdesc_sim_communication" msgid="4179799296415957960">"Колдонмого SIM-картага буйруктарды жөнөтүү мүмкүнчүлүгүн берет. Бул абдан кооптуу."</string> - <string name="permlab_activityRecognition" msgid="1782303296053990884">"кыймыл-аракетти аныктоо"</string> + <string name="permlab_activityRecognition" msgid="1782303296053990884">"Кыймыл-аракетти аныктоо"</string> <string name="permdesc_activityRecognition" msgid="8667484762991357519">"Бул колдонмо кыймыл-аракетиңизди аныктап турат."</string> - <string name="permlab_camera" msgid="6320282492904119413">"сүрөт жана видео тартуу"</string> + <string name="permlab_camera" msgid="6320282492904119413">"Сүрөт жана видео тартуу"</string> <string name="permdesc_camera" msgid="5240801376168647151">"Бул колдонмо иштеп жатканда камера менен сүрөт же видеолорду тарта алат."</string> <string name="permlab_backgroundCamera" msgid="7549917926079731681">"Фондо сүрөткө жана видеого тартат"</string> <string name="permdesc_backgroundCamera" msgid="1615291686191138250">"Бул колдонмо каалаган убакта камера менен сүрөт же видеолорду тарта алат."</string> @@ -539,16 +537,16 @@ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Колдонмого планшеттин Bluetooth конфигурацияларын көрүү, жупталган түзмөктөр менен байланыш түзүү жана кабыл алуу уруксатын берет."</string> <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Android TV түзмөгүңүздөгү Bluetooth конфигурациясын көрүп, жупташтырылган түзмөктөргө туташууга жана туташуу сурамын кабыл алууга колдонмого уруксат берет."</string> <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Колдонмого телефондун Bluetooth конфигурацияларын көрүү, жупташкан түзмөктөр менен туташуу түзүү жана кабыл алуу уруксатын берет."</string> - <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"жакын жердеги Bluetooth түзмөктөрүн аныктоо жана жупташтыруу"</string> + <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"Жакын жердеги Bluetooth түзмөктөрүн таап, туташуу"</string> <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Колдонмого жакын жердеги Bluetooth түзмөктөрүн аныктап, жупташтырууга уруксат берет"</string> - <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"жупташтырылган Bluetooth түзмөктөрү"</string> - <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Колдонмого жупташтырылган Bluetooth түзмөктөрү менен байланышууга уруксат берет"</string> + <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"Туташып турган Bluetooth түзмөктөрүнө байланышуу"</string> + <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Колдонмого туташкан Bluetooth түзмөктөрүнө байланышканга уруксат берет"</string> <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"жакын жердеги Bluetooth түзмөктөрүнө жарнамалоо"</string> <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Колдонмого жакын жердеги Bluetooth түзмөктөрүнө жарнама көрсөтүүгө мүмкүндүк берет"</string> - <string name="permlab_uwb_ranging" msgid="8141915781475770665">"кең тилкелүү тармак аркылуу туташа турган жакын жердеги түзмөктөрдү аныктоо"</string> + <string name="permlab_uwb_ranging" msgid="8141915781475770665">"Кең тилкелүү тармак аркылуу туташа турган жакын жердеги түзмөктөрдү аныктоо"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Колдонмо кең тилкелүү тармак аркылуу туташа турган жакын жердеги түзмөктөрдү аныктай алат"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"жакын жердеги Wi‑Fi түзмөктөрү менен байланышуу"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Колдонмого жарнама көрсөтүүгө, байланышууга жана жакын жердеги Wi‑Fi түзмөктөрүн аныктоого мүмкүндүк берет"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Жакын жердеги Wi‑Fi түзмөктөрүнө байланышуу"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Колдонмо жакын жердеги Wi-Fi түзмөктөргө туташып, алардын жайгашкан жерин аныктап, ар кандай нерселерди өткөрө алат."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Тандалган NFC төлөм кызматы жөнүндө маалымат"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Колдонмого катталган жардам же көздөлгөн жерге маршрут сыяктуу тандалган nfc төлөм кызматы жөнүндө маалыматты алууга уруксат берүү."</string> <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communication көзөмөлү"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Улантуу үчүн экрандын кулпусун киргизиңиз"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Манжа изи жарым-жартылай аныкталды"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Манжа изи иштелбей койду. Кайталап көрүңүз."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Манжа изинин сенсорун тазалап, кайра аракет кылыңыз"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сенсорду тазалап, кайра аракет кылыңыз"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сенсорду катуу басыңыз"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Манжа өтө жай жылды. Кайталап көрүңүз."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Башка манжа изин байкап көрүңүз"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Өтө жарык"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын ар жолкусунда бир аз өзгөртүп туруңуз"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Манжа изи таанылган жок"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Сенсорду катуу басыңыз"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Манжа изи текшерилди"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Жүздүн аныктыгы текшерилди"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Жүздүн аныктыгы текшерилди, эми \"Ырастоону\" басыңыз"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Өткөрүп жиберүү"</string> <string name="no_matches" msgid="6472699895759164599">"Дал келүүлөр жок"</string> <string name="find_on_page" msgid="5400537367077438198">"Барактан табуу"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# дал келди}other{{total} ичинен # дал келди}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Даяр"</string> <string name="progress_erasing" msgid="6891435992721028004">"Жалпы сактагыч тазаланууда…"</string> <string name="share" msgid="4157615043345227321">"Бөлүшүү"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> фондо иштеп, батареяны отургузуп жатат. Көрүү үчүн таптап коюңуз."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу көп убакыттан бери фондо иштеп жатат. Көрүү үчүн таптап коюңуз."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Жигердүү колдонмолорду карап чыгуу"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Бул түзмөктөгү камераны колдонууга болбойт"</string> </resources> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 090bde9163da..e631dfbfda28 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ຂ້າມ"</string> <string name="no_matches" msgid="6472699895759164599">"ບໍ່ພົບຜົນການຊອກຫາ"</string> <string name="find_on_page" msgid="5400537367077438198">"ຊອກໃນໜ້າ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{ກົງກັນ # ລາຍການ}other{# ຈາກທັງໝົດ {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ແລ້ວໆ"</string> <string name="progress_erasing" msgid="6891435992721028004">"ກຳລັງລຶບບ່ອນຈັດເກັບຂໍ້ມູນທີ່ແບ່ງປັນ…"</string> <string name="share" msgid="4157615043345227321">"ແບ່ງປັນ"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ກຳລັງເຮັດວຽກໃນພື້ນຫຼັງ ແລະ ໃຊ້ແບັດເຕີຣີຫຼາຍ. ແຕະເພື່ອກວດສອບ."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ກຳລັງເຮັດວຽກໃນພື້ນຫຼັງເປັນເວລາດົນແລ້ວ. ແຕະເພື່ອກວດສອບ."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ກວດສອບແອັບທີ່ເຄື່ອນໄຫວ"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ບໍ່ສາມາດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຈາກອຸປະກອນນີ້ໄດ້"</string> </resources> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index f89c429d01c9..6b3311c48358 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -1503,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Praleisti"</string> <string name="no_matches" msgid="6472699895759164599">"Nėra atitikčių"</string> <string name="find_on_page" msgid="5400537367077438198">"Ieškoti puslapyje"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# atitiktis}one{# iš {total}}few{# iš {total}}many{# iš {total}}other{# iš {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Atlikta"</string> <string name="progress_erasing" msgid="6891435992721028004">"Ištrinama bendrinama saugykla…"</string> <string name="share" msgid="4157615043345227321">"Bendrinti"</string> @@ -2258,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"„<xliff:g id="APP">%1$s</xliff:g>“ veikia fone ir eikvoja akumuliatoriaus energiją. Palieskite ir peržiūrėkite."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"„<xliff:g id="APP">%1$s</xliff:g>“ ilgą laiką veikia fone. Palieskite ir peržiūrėkite."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Peržiūrėkite aktyvias programas"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nepavyksta pasiekti fotoaparato iš šio įrenginio"</string> </resources> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 030144befe53..8924fa4a32a7 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -305,10 +305,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"piekļūt jūsu kalendāram"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Īsziņas"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"sūtīt un skatīt īsziņas"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Faili un dokumenti"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"piekļuve failiem un dokumentiem jūsu ierīcē"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Mūzika un cits audio saturs"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"piekļūt audio failiem jūsu ierīcē"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotoattēli un videoklipi"</string> @@ -589,12 +587,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Lai turpinātu, ievadiet ekrāna bloķēšanas informāciju"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Tika konstatēts nepilnīgs pilna nospiedums"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nevarēja apstrādāt pirksta nospiedumu. Lūdzu, mēģiniet vēlreiz."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Notīriet pirkstu nospiedumu sensoru un mēģiniet vēlreiz"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Notīriet sensoru un mēģiniet vēlreiz"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Stingri spiediet pirkstu pie sensora"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pārāk lēna pirksta kustība. Lūdzu, mēģiniet vēlreiz."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Izmēģiniet citu pirksta nospiedumu"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Pārāk spilgts"</string> @@ -602,10 +597,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Katru reizi mazliet mainiet pirksta pozīciju."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Pirksta nospiedums netika atpazīts"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Stingri spiediet pirkstu pie sensora"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Pirksta nospiedums tika autentificēts."</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Seja autentificēta"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Seja ir autentificēta. Nospiediet pogu Apstiprināt."</string> @@ -1509,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Izlaist"</string> <string name="no_matches" msgid="6472699895759164599">"Nav atbilstību"</string> <string name="find_on_page" msgid="5400537367077438198">"Atrast lapā"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# atbilstība}zero{# no {total}}one{# no {total}}other{# no {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Gatavs"</string> <string name="progress_erasing" msgid="6891435992721028004">"Notiek koplietotās krātuves dzēšana…"</string> <string name="share" msgid="4157615043345227321">"Kopīgot"</string> @@ -2264,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> darbojas fonā un patērē akumulatora enerģiju. Pieskarieties, lai to pārskatītu."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ilgi darbojas fonā. Pieskarieties, lai to pārskatītu."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Pārbaudiet aktīvās lietotnes"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nevar piekļūt kamerai no šīs ierīces"</string> </resources> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index a67a522b0617..518b4e3ac281 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"пристапува до календарот"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"испраќа и прикажува SMS-пораки"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Датотеки и документи"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"да пристапува до датотеки и документи на уредот"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музика и друго аудио"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"да пристапува до аудиодатотеки на вашиот уред"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Фотографии и видеа"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Внесете го заклучувањето на екранот за да продолжите"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Откриен е делумен отпечаток"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатокот не може да се обработи. Обидете се повторно."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Исчистете го сензорот за отпечатоци и обидете се повторно"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Исчистете го сензорот и обидете се повторно"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Цврсто притиснете на сензорот"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Прстот се движеше премногу бавно. Обидете се повторно."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Пробајте со друг отпечаток"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Премногу светло"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот по малку секој пат"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатокот не е препознаен"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Цврсто притиснете на сензорот"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечатокот е проверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицето е проверено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е проверено, притиснете го копчето „Потврди“"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Прескокни"</string> <string name="no_matches" msgid="6472699895759164599">"Нема совпаѓања"</string> <string name="find_on_page" msgid="5400537367077438198">"Пронајди на страница"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# совпаѓање}one{# од {total}}other{# од {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Готово"</string> <string name="progress_erasing" msgid="6891435992721028004">"Бришење споделена меморија…"</string> <string name="share" msgid="4157615043345227321">"Сподели"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> се извршува во заднина и ја троши батеријата. Допрете за да прегледате."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> се извршува во заднина веќе долго време. Допрете за да прегледате."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Проверете ги активните апликации"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Не може да се пристапи до камерата од уредов"</string> </resources> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index ec027b9e0342..0e2ff33eb55a 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -546,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"സമീപമുള്ള അൾട്രാ-വെെഡ്ബാൻഡ് ഉപകരണങ്ങൾ തമ്മിലുള്ള ആപേക്ഷിക സ്ഥാനം നിർണ്ണയിക്കൂ"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"സമീപമുള്ള അൾട്രാ-വെെഡ്ബാൻഡ് ഉപകരണങ്ങൾ തമ്മിലുള്ള ആപേക്ഷിക സ്ഥാനം നിർണ്ണയിക്കാൻ ആപ്പിനെ അനുവദിക്കുക"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"സമീപമുള്ള വൈഫൈ ഉപകരണങ്ങളുമായി ഇടപഴകുക"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"സമീപമുള്ള വൈഫൈ ഉപകരണത്തെ കാണിക്കാനും അവയിലേക്ക് കണക്റ്റ് ചെയ്യാനും അവയുടെ ആപേക്ഷിക സ്ഥാനം നിർണ്ണയിക്കാനും ആപ്പിനെ അനുവദിക്കൂ"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"സമീപമുള്ള വൈഫൈ ഉപകരണങ്ങൾ കാണിക്കാനും അവയിലേക്ക് കണക്റ്റ് ചെയ്യാനും അവയുടെ ആപേക്ഷിക സ്ഥാനം നിർണ്ണയിക്കാനും ആപ്പിനെ അനുവദിക്കൂ"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"തിരഞ്ഞെടുത്ത NFC പേയ്മെന്റ് സേവനത്തെ സംബന്ധിച്ച വിവരങ്ങൾ"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"റൂട്ട് ലക്ഷ്യസ്ഥാനം, രജിസ്റ്റർ ചെയ്തിരിക്കുന്ന സഹായങ്ങൾ എന്നിവ പോലുള്ള, തിരഞ്ഞെടുത്ത NFC പേയ്മെന്റ് സേവനത്തെ സംബന്ധിച്ച വിവരങ്ങൾ ലഭിക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string> <string name="permlab_nfc" msgid="1904455246837674977">"സമീപ ഫീൽഡുമായുള്ള ആശയവിനിമയം നിയന്ത്രിക്കുക"</string> @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ഒഴിവാക്കുക"</string> <string name="no_matches" msgid="6472699895759164599">"പൊരുത്തപ്പെടലുകൾ ഒന്നുമില്ല"</string> <string name="find_on_page" msgid="5400537367077438198">"പേജിൽ കണ്ടെത്തുക"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# പൊരുത്തം}other{{total}-ൽ #-ാമത്തേത്}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"പൂർത്തിയായി"</string> <string name="progress_erasing" msgid="6891435992721028004">"പങ്കിടുന്ന സ്റ്റോറേജ് മായ്ക്കുന്നു…"</string> <string name="share" msgid="4157615043345227321">"പങ്കിടുക"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ആപ്പ് പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുന്നു, ഇത് ബാറ്ററി ഉപയോഗിച്ചുതീർക്കുന്നു. അവലോകനം ചെയ്യാൻ ടാപ്പ് ചെയ്യുക."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"പശ്ചാത്തലത്തിൽ <xliff:g id="APP">%1$s</xliff:g> ആപ്പ് ഒരുപാട് നേരമായി റൺ ചെയ്യുന്നു. അവലോകനം ചെയ്യാൻ ടാപ്പ് ചെയ്യുക."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"സജീവമായ ആപ്പുകൾ പരിശോധിക്കുക"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ഈ ഉപകരണത്തിൽ നിന്ന് ക്യാമറ ആക്സസ് ചെയ്യാനാകില്ല"</string> </resources> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 5681de009123..b9df5177f68e 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Алгасах"</string> <string name="no_matches" msgid="6472699895759164599">"Илэрц алга"</string> <string name="find_on_page" msgid="5400537367077438198">"Хуудаснаас олох"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# тааруулах}other{{total}-н #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Дуусгах"</string> <string name="progress_erasing" msgid="6891435992721028004">"Хуваалцсан хадгалах санг устгаж байна…"</string> <string name="share" msgid="4157615043345227321">"Хуваалцах"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> дэвсгэрт ажиллаж байгаа бөгөөд батарейг дуусгаж байна. Хянахын тулд товшино уу."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> дэвсгэрт удаан хугацааны турш ажиллаж байна. Хянахын тулд товшино уу."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Идэвхтэй аппуудыг шалгах"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Энэ төхөөрөмжөөс камер луу нэвтрэх боломжгүй байна"</string> </resources> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 1c434bb2d254..86e59e385527 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"वगळा"</string> <string name="no_matches" msgid="6472699895759164599">"कोणत्याही जुळण्या नाहीत"</string> <string name="find_on_page" msgid="5400537367077438198">"पेजवर शोधा"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# जुळणी}other{{total} पैकी #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"पूर्ण केले"</string> <string name="progress_erasing" msgid="6891435992721028004">"शेअर केलेले स्टोरेज मिटवत आहे…"</string> <string name="share" msgid="4157615043345227321">"शेअर करा"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> हे बॅकग्राउंडमध्ये रन होत आहे आणि बॅटरी संपवत आहे. पुनरावलोकनासाठी टॅप करा."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> हे बऱ्याच कालावधीपासून बॅकग्राउंडमध्ये रन होत आहे. पुनरावलोकनासाठी टॅप करा."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ॲक्टिव्ह ॲप्स पहा"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"या डिव्हाइसवरून कॅमेरा अॅक्सेस करू शकत नाही"</string> </resources> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index b4ce57c246d1..543b8beb6e69 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"mengakses kalendar"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"menghantar dan melihat mesej SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fail & dokumen"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"akses fail dan dokumen pada peranti anda"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muzik & audio lain"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"berikan akses fail audio pada peranti anda"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Foto & video"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Masukkan kunci skrin untuk teruskan"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Cap jari separa dikesan"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses cap jari. Sila cuba lagi."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Bersihkan penderia cap jari dan cuba lagi"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Bersihkan penderia dan cuba lagi"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan dengan kuat pada penderia"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Jari digerakkan terlalu perlahan. Sila cuba lagi."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Cuba cap jari lain"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Tukar sedikit kedudukan jari anda setiap kali pergerakan dilakukan"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Cap jari tidak dikenali"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Tekan dengan kuat pada penderia"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Cap jari disahkan"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah disahkan"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah disahkan, sila tekan sahkan"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Langkau"</string> <string name="no_matches" msgid="6472699895759164599">"Tiada padanan"</string> <string name="find_on_page" msgid="5400537367077438198">"Cari di halaman"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# padanan}other{# daripada {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Selesai"</string> <string name="progress_erasing" msgid="6891435992721028004">"Memadamkan storan kongsi…"</string> <string name="share" msgid="4157615043345227321">"Kongsi"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> sedang berjalan di latar belakang dan menghabiskan bateri. Ketik untuk menyemak."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g>sedang berjalan di latar belakang untuk masa yang lama. Ketik untuk menyemak."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Semak apl aktif"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Tidak dapat mengakses kamera daripada peranti ini"</string> </resources> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index acbd498635f8..5da730bdddc8 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"သင့်ပြက္ခဒိန်အား ဝင်ရောက်သုံးရန်"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS စာတိုစနစ်"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS စာများကို ပို့ကာ ကြည့်မည်"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ဖိုင်နှင့် မှတ်တမ်းများ"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"သင့်စက်ရှိ ဖိုင်နှင့် မှတ်တမ်းများ သုံးခွင့်"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"သီချင်းနှင့် အခြားအသံဖိုင်"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"သင့်စက်ပေါ်ရှိ အသံဖိုင်များကို သုံးနိုင်သည်"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"ဓာတ်ပုံနှင့် ဗီဒီယိုများ"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"အနီးတစ်ဝိုက်ရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား ဆက်စပ်နေရာကို သတ်မှတ်ခြင်း"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"အနီးတစ်ဝိုက်ရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား ဆက်စပ်နေရာကို သတ်မှတ်ရန် အက်ပ်ကို ခွင့်ပြုမည်"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"အနီးရှိ Wi-Fi စက်များနှင့် ပြန်လှန်တုံ့ပြန်ခြင်း"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"အက်ပ်ကို ကြော်ငြာရန်၊ ချိတ်ဆက်ရန်နှင့် အနီးတစ်ဝိုက်ရှိ Wi-Fi စက်များ၏ ဆက်စပ်နေရာကို သတ်မှတ်ရန် ခွင့်ပြုနိုင်သည်"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"ကြော်ငြာရန်၊ ချိတ်ဆက်ရန်နှင့် အနီးတစ်ဝိုက်ရှိ Wi-Fi စက်များ၏ နေရာကို သတ်မှတ်ရန် အက်ပ်ကို ခွင့်ပြုသည်"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"ဦးစားပေး NFC ငွေပေးချေမှုဆိုင်ရာ ဝန်ဆောင်မှု အချက်အလက်များ"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"အက်ပ်အား ဦစားပေး NFC ငွေပေးချေမှုဆိုင်ရာ ဝန်ဆောင်မှု အချက်အလက်များဖြစ်သည့် မှတ်ပုံတင်ထားသော အကူအညီများနှင့် သွားလာရာ လမ်းကြောင်းတို့ကို ရယူရန် ခွင့်ပြုသည်။"</string> <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communicationအား ထိန်းချုပ်ရန်"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ရှေ့ဆက်ရန် သင်၏ဖန်သားပြင် လော့ခ်ချခြင်းကို ထည့်ပါ"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"လက်ဗွေတစ်စိတ်တစ်ပိုင်းကို ရှာတွေ့သည်"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"လက်ဗွေယူ၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"လက်ဗွေ အာရုံခံကိရိယာကို သန့်ရှင်းပြီး ထပ်စမ်းကြည့်ပါ"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"အာရုံခံကိရိယာကို သန့်ရှင်းပြီး ထပ်စမ်းကြည့်ပါ"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"အာရုံခံကိရိယာပေါ်တွင် သေချာဖိပါ"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"လက်ညှိုးအလွန်နှေးကွေးစွာ ရွေ့ခဲ့သည်။ ကျေးဇူးပြု၍ ထပ်မံကြိုးစားပါ။"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"အခြားလက်ဗွေဖြင့် စမ်းကြည့်ပါ"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"အလွန် လင်းသည်"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"အကြိမ်တိုင်း သင့်လက်ချောင်း၏တည်နေရာကို အနည်းငယ်ပြောင်းပါ"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"လက်ဗွေကို မသိရှိပါ"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"အာရုံခံကိရိယာပေါ်တွင် သေချာဖိပါ"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"လက်ဗွေကို အထောက်အထား စိစစ်ပြီးပါပြီ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ၊ အတည်ပြုရန်ကို နှိပ်ပါ"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ကျော်ရန်"</string> <string name="no_matches" msgid="6472699895759164599">"ထပ်တူမတွေ့ရှိပါ"</string> <string name="find_on_page" msgid="5400537367077438198">"စာမျက်နှာတွင်ရှာဖွေရန်"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{ကိုက်ညီမှု # ခု}other{{total} ခု အနက် # ခု}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ပြီးပါပြီ"</string> <string name="progress_erasing" msgid="6891435992721028004">"မျှဝေထားသည့် သိုလှောင်ခန်းကို ဖျက်နေသည်…"</string> <string name="share" msgid="4157615043345227321">"မျှဝေရန်"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> သည် နောက်ခံတွင်ပွင့်နေပြီး ဘက်ထရီအားကုန်စေသည်။ ပြန်ကြည့်ရန် တို့ပါ။"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> သည် နောက်ခံတွင် အချိန်အတော်ကြာပွင့်နေသည်။ ပြန်ကြည့်ရန် တို့ပါ။"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ပွင့်နေသည့်အက်ပ်များ စစ်ဆေးရန်"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ကင်မရာကို ဤစက်မှ အသုံးမပြုနိုင်ပါ"</string> </resources> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 234ead8fa718..65223a8b5214 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"åpne kalenderen din"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"sende og lese SMS-meldinger"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Filer og dokumenter"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"åpne filer og dokumenter på enheten din"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musikk og annen lyd"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"få tilgang til lydfiler på enheten"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Bilder og videoer"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Skriv inn skjermlåsen for å fortsette"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Et delvis fingeravtrykk er registrert"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kunne ikke registrere fingeravtrykket. Prøv på nytt."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengjør fingeravtrykkssensoren og prøv igjen"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengjør sensoren og prøv igjen"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Trykk godt på sensoren"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du flyttet fingeren for sakte. Prøv på nytt."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prøv et annet fingeravtrykk"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"For lyst"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre posisjonen til fingeren litt hver gang"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjenkjenner ikke fingeravtrykket"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Trykk godt på sensoren"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrykket er godkjent"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet er autentisert"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet er autentisert. Trykk på Bekreft"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Hopp over"</string> <string name="no_matches" msgid="6472699895759164599">"Ingen treff"</string> <string name="find_on_page" msgid="5400537367077438198">"Finn på side"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# treff}other{# av {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Ferdig"</string> <string name="progress_erasing" msgid="6891435992721028004">"Sletter delt lagring …"</string> <string name="share" msgid="4157615043345227321">"Del"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> kjører i bakgrunnen og bruker batteri. Trykk for å gjennomgå."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> kjører lenge i bakgrunnen. Trykk for å gjennomgå."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Sjekk aktive apper"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Du har ikke tilgang til kameraet fra denne enheten"</string> </resources> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 77257b1ae12a..fe006cee5db8 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"छोड्नुहोस्"</string> <string name="no_matches" msgid="6472699895759164599">"कुनै मिलेन"</string> <string name="find_on_page" msgid="5400537367077438198">"पृष्ठमा फेला पार्नुहोस्"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# वटा मिल्दोजुल्दो परिणाम}other{{total} मध्ये # वटा मिल्दाजुल्दा परिणाम}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"भयो"</string> <string name="progress_erasing" msgid="6891435992721028004">"साझेदारी गरिएको भण्डारण मेट्दै…"</string> <string name="share" msgid="4157615043345227321">"सेयर गर्नुहोस्"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ब्याकग्राउन्डमा चलिरहेको हुनाले ब्याट्री खपत भइरहेको छ। तपाईं यसका सम्बन्धमा समीक्षा गर्न चाहनुहुन्छ भने ट्याप गर्नुहोस्।"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> लामो समयदेखि ब्याकग्राउन्डमा चलिरहेको छ। तपाईं यसका सम्बन्धमा समीक्षा गर्न चाहनुहुन्छ भने ट्याप गर्नुहोस्।"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"कुन कुन एप सक्रिय छ भन्ने कुरा जाँच्नुहोस्"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"यो डिभाइसमा भएको क्यामेरा प्रयोग गर्न सकिएन"</string> </resources> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index f85f5f6c42a0..ea11ae9aa5a2 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"toegang krijgen tot je agenda"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Sms"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"sms\'jes verzenden en bekijken"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Bestanden en documenten"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"bestanden en documenten op je apparaat openen"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muziek en andere audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"toegang krijgen tot audiobestanden op je apparaat"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Foto\'s en video\'s"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Voer je schermvergrendeling in om door te gaan"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Gedeeltelijke vingerafdruk gedetecteerd"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kan vingerafdruk niet verwerken. Probeer het opnieuw."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Reinig de vingerafdruksensor en probeer het opnieuw"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Reinig de sensor en probeer het opnieuw"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Druk stevig op de sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vinger te langzaam bewogen. Probeer het opnieuw."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probeer een andere vingerafdruk"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Te veel licht"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Verander de positie van je vinger steeds een beetje"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Vingerafdruk niet herkend"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Druk stevig op de sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Vingerafdruk geverifieerd"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gezicht geverifieerd"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gezicht geverifieerd. Druk op Bevestigen."</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Overslaan"</string> <string name="no_matches" msgid="6472699895759164599">"Geen overeenkomsten"</string> <string name="find_on_page" msgid="5400537367077438198">"Zoeken op pagina"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# overeenkomst}other{# van {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Klaar"</string> <string name="progress_erasing" msgid="6891435992721028004">"Gedeelde opslag wissen…"</string> <string name="share" msgid="4157615043345227321">"Delen"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> wordt uitgevoerd op de achtergrond en verbruikt veel batterijlading. Tik om te bekijken."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> wordt al lange tijd uitgevoerd op de achtergrond. Tik om te bekijken."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Actieve apps checken"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Kan geen toegang krijgen tot de camera vanaf dit apparaat"</string> </resources> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 0a945e091ffd..618be4839e3d 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ଛାଡ଼ିଦିଅନ୍ତୁ"</string> <string name="no_matches" msgid="6472699895759164599">"କୌଣସି ମେଳକ ନାହିଁ"</string> <string name="find_on_page" msgid="5400537367077438198">"ପୃଷ୍ଠାରେ ଖୋଜନ୍ତୁ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{#ଟି ମେଳ}other{{total}ଟିରୁ #ଟି ମେଳ}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ହୋଇଗଲା"</string> <string name="progress_erasing" msgid="6891435992721028004">"ସେୟାର୍ ହୋଇଥିବା ଷ୍ଟୋରେଜ୍ ଲିଭାଉଛି…"</string> <string name="share" msgid="4157615043345227321">"ସେୟାର୍"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ପୃଷ୍ଠପଟରେ ଚାଲୁଛି ଏବଂ ବ୍ୟାଟେରୀର ଚାର୍ଜ ସମାପ୍ତ ହେଉଛି। ସମୀକ୍ଷା କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ଦୀର୍ଘ ସମୟ ଧରି ପୃଷ୍ଠପଟରେ ଚାଲୁଛି। ସମୀକ୍ଷା କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ସକ୍ରିୟ ଆପଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରନ୍ତୁ"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ଏହି ଡିଭାଇସରୁ କ୍ୟାମେରାକୁ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ"</string> </resources> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 294dd3cd47d8..2c214b9f8f71 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS ਸੁਨੇਹੇ ਭੇਜੋ ਅਤੇ ਦੇਖੋ"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ਫ਼ਾਈਲਾਂ ਅਤੇ ਦਸਤਾਵੇਜ਼"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"ਆਪਣੇ ਡੀਵਾਈਸ \'ਤੇ ਫ਼ਾਈਲਾਂ ਅਤੇ ਦਸਤਾਵੇਜ਼ਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"ਸੰਗੀਤ ਅਤੇ ਹੋਰ ਆਡੀਓ"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"ਆਪਣੇ ਡੀਵਾਈਸ \'ਤੇ ਆਡੀਓ ਫ਼ਾਈਲਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"ਫ਼ੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣਾ ਸਕ੍ਰੀਨ ਲਾਕ ਦਾਖਲ ਕਰੋ"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"ਅੰਸ਼ਕ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਪਤਾ ਲੱਗਿਆ"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ਫਿੰਗਰਪ੍ਰਿੰਟ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਨਹੀਂ ਹੋ ਸਕੀ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ਸੈਂਸਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ਸੈਂਸਰ ਨੂੰ ਜ਼ੋਰ ਨਾਲ ਦਬਾਓ"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ਉਂਗਲ ਕਾਫ਼ੀ ਹੌਲੀ ਮੂਵ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ਕੋਈ ਹੋਰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤ ਕੇ ਦੇਖੋ"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਚਮਕ"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ਹਰ ਵਾਰ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਥੋੜ੍ਹਾ ਹਿਲਾਓ"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"ਸੈਂਸਰ ਨੂੰ ਜ਼ੋਰ ਨਾਲ ਦਬਾਓ"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਪ੍ਰਮਾਣਿਤ ਹੋਇਆ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ਚਿਹਰਾ ਪੁਸ਼ਟੀਕਰਨ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ਚਿਹਰਾ ਪੁਸ਼ਟੀਕਰਨ, ਕਿਰਪਾ ਕਰਕੇ \'ਪੁਸ਼ਟੀ ਕਰੋ\' ਦਬਾਓ"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ਛੱਡੋ"</string> <string name="no_matches" msgid="6472699895759164599">"ਕੋਈ ਮੇਲ ਨਹੀਂ"</string> <string name="find_on_page" msgid="5400537367077438198">"ਸਫ਼ੇ ਤੇ ਲੱਭੋ"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# ਮਿਲਾਨ}one{{total} ਵਿੱਚੋਂ #}other{{total} ਵਿੱਚੋਂ #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ਹੋ ਗਿਆ"</string> <string name="progress_erasing" msgid="6891435992721028004">"ਸਾਂਝੀ ਕੀਤੀ ਸਟੋਰੇਜ ਮਿਟਾਈ ਜਾ ਰਹੀ ਹੈ…"</string> <string name="share" msgid="4157615043345227321">"ਸਾਂਝਾ ਕਰੋ"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀ ਹੈ ਅਤੇ ਬੈਟਰੀ ਦੀ ਖਪਤ ਕਰ ਰਹੀ ਹੈ। ਸਮੀਖਿਆ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ਲੰਮੇ ਸਮੇਂ ਤੋਂ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀ ਹੈ। ਸਮੀਖਿਆ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ਕਿਰਿਆਸ਼ੀਲ ਐਪਾਂ ਦੀ ਜਾਂਚ ਕਰੋ"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index a316127787cb..195556131e18 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"dostęp do kalendarza"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"wysyłanie i wyświetlanie SMS‑ów"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Pliki i dokumenty"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"dostęp do plików i dokumentów na urządzeniu"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muzyka i inne dźwięki"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"dostęp do plików audio na urządzeniu"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Zdjęcia i filmy"</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Użyj blokady ekranu, aby kontynuować"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Wykryto częściowy odcisk palca"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nie udało się przetworzyć odcisku palca. Spróbuj ponownie."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Wyczyść czytnik linii papilarnych i spróbuj ponownie"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Wyczyść czujnik i spróbuj ponownie"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Mocno naciśnij czujnik"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Palec został obrócony zbyt wolno. Spróbuj ponownie."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Użyj odcisku innego palca"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Zbyt jasno"</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Za każdym razem lekko zmieniaj ułożenie palca"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Nie rozpoznano odcisku palca"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Mocno naciśnij czujnik"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Uwierzytelniono odciskiem palca"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Twarz rozpoznana"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Twarz rozpoznana, kliknij Potwierdź"</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Pomiń"</string> <string name="no_matches" msgid="6472699895759164599">"Brak wyników"</string> <string name="find_on_page" msgid="5400537367077438198">"Znajdź na stronie"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# dopasowanie}few{# z {total}}many{# z {total}}other{# z {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Gotowe"</string> <string name="progress_erasing" msgid="6891435992721028004">"Kasuję dane z pamięci współdzielonej…"</string> <string name="share" msgid="4157615043345227321">"Udostępnij"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikacja <xliff:g id="APP">%1$s</xliff:g> działa w tle i zużywa baterię. Kliknij, aby sprawdzić."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikacja <xliff:g id="APP">%1$s</xliff:g> długo działa w tle. Kliknij, aby sprawdzić."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Sprawdź aktywne aplikacje"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nie można uzyskać dostępu do aparatu z tego urządzenia"</string> </resources> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index fd01b225fc55..2092f7ebc976 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"acesse sua agenda"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"envie e veja mensagens SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Arquivos e documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"acessar arquivos e documentos no seu dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música e outros áudios"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"acessar arquivos de áudio no seu dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos e vídeos"</string> @@ -539,16 +537,16 @@ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que o app acesse a configuração do Bluetooth no tablet, além de fazer e aceitar conexões com dispositivos pareados."</string> <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que o app acesse a configuração do Bluetooth no dispositivo Android TV, além de fazer e aceitar conexões com dispositivos pareados."</string> <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite que o app acesse a configuração do Bluetooth no telefone, além de fazer e aceitar conexões com dispositivos pareados."</string> - <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"descobrir e se parear a disp. Bluetooth por perto"</string> + <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"descobrir e parear com disp. Bluetooth por perto"</string> <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Permite que o app descubra e se pareie a dispositivos Bluetooth por perto"</string> - <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conecte-se a dispositivos Bluetooth pareados"</string> + <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conectar a dispositivos Bluetooth pareados"</string> <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Permite que o app se conecte a dispositivos Bluetooth pareados"</string> <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"anunciar em dispositivos Bluetooth por perto"</string> <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permite que o app seja anunciado em dispositivos Bluetooth por perto"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"determinar o posicionamento relativo entre dispositivos de banda ultralarga por perto"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permitir que o app determine o posicionamento relativo entre dispositivos de banda ultralarga por perto"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"interagir com dispositivos Wi-Fi por perto"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite que o app veicule anúncios, conecte-se à rede e determine a posição relativa de dispositivos Wi-Fi por perto"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite que o app divulgue, faça conexão e determine a posição relativa de dispositivos Wi-Fi por perto."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informações preferidas de serviço de pagamento por NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que o app acesse as informações preferidas de serviço de pagamento por NFC, como auxílios registrados ou destinos de trajetos."</string> <string name="permlab_nfc" msgid="1904455246837674977">"controlar a comunicação a curta distância"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Impressão digital parcial detectada"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O movimento do dedo está muito lento. Tente novamente."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Use outra impressão digital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Pressione o sensor com firmeza"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Pular"</string> <string name="no_matches" msgid="6472699895759164599">"Não encontrado"</string> <string name="find_on_page" msgid="5400537367077438198">"Localizar na página"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# correspondência}one{# de {total}}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Concluído"</string> <string name="progress_erasing" msgid="6891435992721028004">"Limpando armazenamento compartilhado…"</string> <string name="share" msgid="4157615043345227321">"Compartilhar"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> está sendo executado em segundo plano e drenando a energia da bateria. Toque para revisar."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> está sendo executado em segundo plano faz muito tempo. Toque para revisar."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verificar apps ativos"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Não é possível acessar a câmera neste dispositivo"</string> </resources> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index aa8571bc6f55..31cf3d5f48f5 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"aceder ao calendário"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"enviar e ver mensagens SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Ficheiros e documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"aceder a ficheiros e documentos no seu dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música e outro áudio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"aceder a ficheiros de áudio no dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos e vídeos"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduza o bloqueio de ecrã para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Impressão digital parcial detetada"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressões digitais e tente novamente"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prima firmemente o sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moveu o dedo demasiado lentamente. Tente novamente."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Experimente outra impressão digital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Está demasiado claro"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Altere a posição do seu dedo ligeiramente de cada vez"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Prima firmemente o sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"A impressão digital foi autenticada."</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado."</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado. Prima Confirmar."</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Ignorar"</string> <string name="no_matches" msgid="6472699895759164599">"Sem correspondências"</string> <string name="find_on_page" msgid="5400537367077438198">"Localizar na página"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# correspondência}one{# de {total}}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Concluído"</string> <string name="progress_erasing" msgid="6891435992721028004">"A apagar o armazenamento partilhado…"</string> <string name="share" msgid="4157615043345227321">"Partilhar"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"A app <xliff:g id="APP">%1$s</xliff:g> está a ser executada em segundo plano e a consumir rapidamente a bateria Toque para analisar."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"A app <xliff:g id="APP">%1$s</xliff:g> está a ser executada em segundo plano há muito tempo. Toque para analisar."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verificar apps ativas"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Não é possível aceder à câmara a partir deste dispositivo"</string> </resources> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index fd01b225fc55..2092f7ebc976 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"acesse sua agenda"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"envie e veja mensagens SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Arquivos e documentos"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"acessar arquivos e documentos no seu dispositivo"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Música e outros áudios"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"acessar arquivos de áudio no seu dispositivo"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotos e vídeos"</string> @@ -539,16 +537,16 @@ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que o app acesse a configuração do Bluetooth no tablet, além de fazer e aceitar conexões com dispositivos pareados."</string> <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que o app acesse a configuração do Bluetooth no dispositivo Android TV, além de fazer e aceitar conexões com dispositivos pareados."</string> <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite que o app acesse a configuração do Bluetooth no telefone, além de fazer e aceitar conexões com dispositivos pareados."</string> - <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"descobrir e se parear a disp. Bluetooth por perto"</string> + <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"descobrir e parear com disp. Bluetooth por perto"</string> <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Permite que o app descubra e se pareie a dispositivos Bluetooth por perto"</string> - <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conecte-se a dispositivos Bluetooth pareados"</string> + <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"conectar a dispositivos Bluetooth pareados"</string> <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Permite que o app se conecte a dispositivos Bluetooth pareados"</string> <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"anunciar em dispositivos Bluetooth por perto"</string> <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permite que o app seja anunciado em dispositivos Bluetooth por perto"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"determinar o posicionamento relativo entre dispositivos de banda ultralarga por perto"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permitir que o app determine o posicionamento relativo entre dispositivos de banda ultralarga por perto"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"interagir com dispositivos Wi-Fi por perto"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite que o app veicule anúncios, conecte-se à rede e determine a posição relativa de dispositivos Wi-Fi por perto"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite que o app divulgue, faça conexão e determine a posição relativa de dispositivos Wi-Fi por perto."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informações preferidas de serviço de pagamento por NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que o app acesse as informações preferidas de serviço de pagamento por NFC, como auxílios registrados ou destinos de trajetos."</string> <string name="permlab_nfc" msgid="1904455246837674977">"controlar a comunicação a curta distância"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Impressão digital parcial detectada"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O movimento do dedo está muito lento. Tente novamente."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Use outra impressão digital"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Pressione o sensor com firmeza"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Pular"</string> <string name="no_matches" msgid="6472699895759164599">"Não encontrado"</string> <string name="find_on_page" msgid="5400537367077438198">"Localizar na página"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# correspondência}one{# de {total}}other{# de {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Concluído"</string> <string name="progress_erasing" msgid="6891435992721028004">"Limpando armazenamento compartilhado…"</string> <string name="share" msgid="4157615043345227321">"Compartilhar"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> está sendo executado em segundo plano e drenando a energia da bateria. Toque para revisar."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> está sendo executado em segundo plano faz muito tempo. Toque para revisar."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verificar apps ativos"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Não é possível acessar a câmera neste dispositivo"</string> </resources> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index fab265661ecb..d9c7e3a4caff 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1502,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Omiteți"</string> <string name="no_matches" msgid="6472699895759164599">"Nicio potrivire"</string> <string name="find_on_page" msgid="5400537367077438198">"Găsiți pe pagină"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# potrivire}few{# din {total}}other{# din {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Terminat"</string> <string name="progress_erasing" msgid="6891435992721028004">"Se șterge spațiul de stocare distribuit..."</string> <string name="share" msgid="4157615043345227321">"Distribuiți"</string> @@ -2257,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> rulează în fundal și consumă bateria. Atingeți pentru a examina."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> rulează în fundal mult timp. Atingeți pentru a examina."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verificați aplicațiile active"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nu se poate accesa camera foto de pe acest dispozitiv"</string> </resources> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 0ba7cb062913..534370497b78 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"доступ к календарю"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"отправлять и просматривать SMS-сообщения"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файлы и документы"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"Доступ к файлам и документам на вашем устройстве"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музыка и другие аудиозаписи"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"доступ к аудиофайлам на вашем устройстве"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Фото и видео"</string> @@ -343,7 +341,7 @@ <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"Регистрировать жесты на сканере отпечатков пальцев"</string> <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"Использовать сканер отпечатков пальцев для дополнительных жестов."</string> <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"Создавать скриншоты"</string> - <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Создавать скриншоты экрана."</string> + <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Создавать снимки экрана."</string> <string name="permlab_statusBar" msgid="8798267849526214017">"Отключение/изменение строки состояния"</string> <string name="permdesc_statusBar" msgid="5809162768651019642">"Приложение сможет отключать строку состояния, а также добавлять и удалять системные значки."</string> <string name="permlab_statusBarService" msgid="2523421018081437981">"Замена строки состояния"</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Чтобы продолжить, разблокируйте экран."</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Отсканирована только часть отпечатка."</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не удалось распознать отпечаток. Повторите попытку."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Очистите сканер отпечатков пальцев и повторите попытку."</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Очистите сканер и повторите попытку."</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Плотно прижмите палец к сканеру."</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Вы перемещали палец слишком медленно. Повторите попытку."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Попробуйте сохранить отпечаток другого пальца."</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Слишком светло."</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Каждый раз немного меняйте положение пальца."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечаток не распознан."</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Плотно прижмите палец к сканеру."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечаток пальца проверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицо распознано"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицо распознано, нажмите кнопку \"Подтвердить\""</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Пропустить"</string> <string name="no_matches" msgid="6472699895759164599">"Нет совпадений"</string> <string name="find_on_page" msgid="5400537367077438198">"Найти на странице"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# совпадение}one{# совпадение из {total}}few{# совпадения из {total}}many{# совпадений из {total}}other{# совпадения из {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Готово"</string> <string name="progress_erasing" msgid="6891435992721028004">"Очистка единого хранилища…"</string> <string name="share" msgid="4157615043345227321">"Поделиться"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Приложение \"<xliff:g id="APP">%1$s</xliff:g>\" работает в фоновом режиме и расходует заряд батареи. Нажмите, чтобы узнать подробности."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Приложение \"<xliff:g id="APP">%1$s</xliff:g>\" работает в фоновом режиме уже длительное время. Нажмите, чтобы узнать подробности."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Проверить активные приложения"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Камера на этом устройстве недоступна."</string> </resources> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 2c9950c400f9..b72a11546035 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ඔබේ දින දර්ශනයට පිවිසෙන්න"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"කෙටි පණිවිඩ"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS පණිවිඩ යැවීම සහ බැලීම"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ගොනු සහ ලේඛන"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"ඔබගේ උපාංගයේ ගොනු සහ ලේඛන වෙත ප්රවේශ වන්න"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"සංගීතය සහ වෙනත් ශ්රව්ය"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"ඔබගේ උපාංගයෙහි ඇති ශ්රව්ය ගොනුවලට ප්රවේශ වන්න"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"ඡායාරූප සහ වීඩියෝ"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ඉදිරියට යාමට ඔබගේ තිර අගුල ඇතුළත් කරන්න"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"අර්ධ ඇඟිලි සලකුණක් අනාවරණය කරන ලදි"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ඇඟිලි සලකුණු සංවේදකය පිරිසිදු කර නැවත උත්සාහ කරන්න"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"සංවේදකය පිරිසිදු කර නැවත උත්සාහ කරන්න"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"සංවේදකය මත තදින් ඔබන්න"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ඇඟිල්ල වඩා සෙමෙන් ගෙන යන ලදි. කරුණාකර නැවත උත්සාහ කරන්න."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"තවත් ඇඟිලි සලකුණක් උත්සාහ කරන්න"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"දීප්තිය වැඩියි"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"එක් එක් අවස්ථාවේ ඔබගේ ඇඟිල්ලේ පිහිටීම මදක් වෙනස් කරන්න"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ඇඟිලි සලකුණ හඳුනා නොගන්නා ලදි"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"සංවේදකය මත තදින් ඔබන්න"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ඇඟිලි සලකුණ සත්යාපනය කරන ලදී"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"මුහුණ සත්යාපනය කරන ලදී"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"මුහුණ සත්යාපනය කරන ලදී, කරුණාකර තහවුරු කරන්න ඔබන්න"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"මඟ හරින්න"</string> <string name="no_matches" msgid="6472699895759164599">"ගැලපීම් නැත"</string> <string name="find_on_page" msgid="5400537367077438198">"පිටුවෙහි සෙවීම"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{ගැළපීම් #}one{{total}කින් #}other{{total}කින් #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"හරි"</string> <string name="progress_erasing" msgid="6891435992721028004">"බෙදා ගත් ගබඩාව මකා දමමින්…"</string> <string name="share" msgid="4157615043345227321">"බෙදාගන්න"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> පසුබිමේ ධාවනය වන අතර බැටරිය බැස යයි. සමාලෝචනය කිරීමට තට්ටු කරන්න."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> දිගු වේලාවක් පසුබිමේ ධාවනය වේ. සමාලෝචනය කිරීමට තට්ටු කරන්න."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"සක්රිය යෙදුම් පරීක්ෂා කරන්න"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"මෙම උපාංගයෙන් කැමරාවට ප්රවේශ විය නොහැකිය"</string> </resources> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index ce70e5fc4b8c..d46908a01133 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -1503,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Preskočiť"</string> <string name="no_matches" msgid="6472699895759164599">"Žiadne zhody"</string> <string name="find_on_page" msgid="5400537367077438198">"Vyhľadať na stránke"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# zhoda}few{# z {total}}many{# of {total}}other{# z {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Hotovo"</string> <string name="progress_erasing" msgid="6891435992721028004">"Vymazáva sa zdieľané úložisko…"</string> <string name="share" msgid="4157615043345227321">"Zdieľať"</string> @@ -2258,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikácie <xliff:g id="APP">%1$s</xliff:g> je spustená na pozadí a vybíja batériu. Skontrolujte to klepnutím."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikácia <xliff:g id="APP">%1$s</xliff:g> je dlhodobo spustená na pozadí. Skontrolujte to klepnutím."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Skontrolovať aktívne aplikácie"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"V tomto zariadení nemáte prístup ku kamere"</string> </resources> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index e23cf85ee783..44498f444906 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -547,7 +547,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Aplikaciji dovoljuje oddajanje napravam Bluetooth v bližini."</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"določanje relativne oddaljenosti med napravami UWB v bližini"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Aplikaciji dovoli, da določi relativno oddaljenost med napravami UWB v bližini."</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"komunikacijo z napravami Wi‑Fi v bližini"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"komunikacija z napravami Wi‑Fi v bližini"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Aplikaciji dovoljuje objavljanje in določanje relativnega položaja naprav Wi‑Fi v bližini ter povezovanje z njimi."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Podatki o prednostni storitvi za plačevanje prek povezave NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Aplikaciji omogoča pridobivanje podatkov o prednostni storitvi za plačevanje prek povezave NFC, kot so registrirani pripomočki in cilj preusmeritve."</string> @@ -1503,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Preskoči"</string> <string name="no_matches" msgid="6472699895759164599">"Ni ujemanj"</string> <string name="find_on_page" msgid="5400537367077438198">"Najdi na strani"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# ujemanje}one{# od {total}}two{# od {total}}few{# od {total}}other{# od {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Končano"</string> <string name="progress_erasing" msgid="6891435992721028004">"Brisanje skupne shrambe …"</string> <string name="share" msgid="4157615043345227321">"Deli"</string> @@ -2258,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> se izvaja v ozadju in porablja energijo baterije. Dotaknite se za pregled."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Aplikacija <xliff:g id="APP">%1$s</xliff:g> se dolgo časa izvaja v ozadju. Dotaknite se za pregled."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Preverite aktivne aplikacije"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"V tej napravi ni mogoče dostopati do fotoaparata."</string> </resources> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index ec07f4179106..0092303302f9 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"qasje te kalendari yt"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"dërgo dhe shiko mesazhet SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Skedarët dhe dokumentet"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"përfito qasje te skedarët dhe dokumentet në pajisjen tënde"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muzikë dhe audio të tjera"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"të ketë qasje te skedarët audio në pajisjen tënde"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotografitë dhe videot"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"të përcaktojë pozicionin e përafërt mes pajisjeve në afërsi me brezin ultra të gjerë"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Lejo që aplikacioni të përcaktojë pozicionin e përafërt mes pajisjeve në afërsi me brezin ultra të gjerë"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"të ndërveprojë me pajisjet Wi-Fi në afërsi"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Lejon që aplikacioni të reklamojë, të lidhet dhe të përcaktojë pozicionin relativ të pajisjeve Wi-Fi në afërsi"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Lejon që aplikacioni të reklamojë, të lidhet dhe të përcaktojë pozicionin përkatës të pajisjeve Wi-Fi në afërsi"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informacionet për shërbimin e preferuar të pagesës me NFC"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Lejon aplikacionin të marrë informacione për shërbimin e preferuar të pagesës me NFC si p.sh. ndihmat e regjistruara dhe destinacionin e itinerarit."</string> <string name="permlab_nfc" msgid="1904455246837674977">"kontrollo \"Komunikimin e fushës në afërsi\" NFC"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Fut kyçjen e ekranit për të vazhduar"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"U zbulua gjurmë gishti e pjesshme"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Gjurma e gishtit nuk mund të përpunohej. Provo përsëri."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Pastro sensorin e gjurmës së gishtit dhe provo sërish"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Pastro sensorin dhe provo sërish"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Shtyp fort te sensori"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Gishti lëvizi shumë ngadalë. Provo përsëri."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Provo një gjurmë gishti tjetër"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Me shumë ndriçim"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ndrysho pak pozicionin e gishtit çdo herë"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjurma e gishtit nuk u njoh"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Shtyp fort te sensori"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Gjurma e gishtit u vërtetua"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Fytyra u vërtetua"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Fytyra u vërtetua, shtyp \"Konfirmo\""</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Kapërce"</string> <string name="no_matches" msgid="6472699895759164599">"Asnjë përputhje"</string> <string name="find_on_page" msgid="5400537367077438198">"Gjej brenda faqes"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# përputhje}other{# nga {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"U krye"</string> <string name="progress_erasing" msgid="6891435992721028004">"Po fshin hapësirën ruajtëse të brendshme…"</string> <string name="share" msgid="4157615043345227321">"Shpërndaj"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> po ekzekutohet në sfond dhe po shkarkon baterinë. Trokit për ta shqyrtuar."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> po ekzekutohet në sfond për një kohe të gjatë. Trokit për ta shqyrtuar."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Kontrollo aplikacionet aktive"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Nuk mund të qasesh te kamera nga kjo pajisje"</string> </resources> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index caac95b49c9c..3f286a367b26 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -305,10 +305,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"приступи календару"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"шаље и прегледа SMS поруке"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Фајлови и документи"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"приступање фајловима и документима на уређају"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музика и други аудио садржај"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"приступ аудио фајловима на уређају"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Слике и видео снимци"</string> @@ -589,12 +587,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Употребите закључавање екрана да бисте наставили"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Откривен је делимичан отисак прста"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Није успела обрада отиска прста. Пробајте поново."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Обришите сензор за отисак прста и пробајте поново"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Обришите сензор и пробајте поново"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Јако притисните сензор"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Превише споро сте померили прст. Пробајте поново."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Пробајте са другим отиском прста"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Превише је светло"</string> @@ -602,10 +597,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Сваки пут лагано промените положај прста"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отисак прста није препознат"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Јако притисните сензор"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отисак прста је потврђен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лице је потврђено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лице је потврђено. Притисните Потврди"</string> @@ -1509,8 +1502,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Прескочи"</string> <string name="no_matches" msgid="6472699895759164599">"Нема подударања"</string> <string name="find_on_page" msgid="5400537367077438198">"Пронађи на страници"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# подударање}one{# од {total}}few{# од {total}}other{# од {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Готово"</string> <string name="progress_erasing" msgid="6891435992721028004">"Брише се дељени меморијски простор…"</string> <string name="share" msgid="4157615043345227321">"Дели"</string> @@ -2096,7 +2088,7 @@ <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"Обавештења"</string> <string name="accessibility_system_action_quick_settings_label" msgid="4583900123506773783">"Брза подешавања"</string> <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Дијалог напајања"</string> - <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Закључани екран"</string> + <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Закључавање екрана"</string> <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Снимак екрана"</string> <string name="accessibility_system_action_headset_hook_label" msgid="8524691721287425468">"Кука за слушалице"</string> <string name="accessibility_system_action_on_screen_a11y_shortcut_label" msgid="8488701469459210309">"Пречица за приступачност на екрану"</string> @@ -2264,6 +2256,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Апликација <xliff:g id="APP">%1$s</xliff:g> је покренута у позадини и троши батерију. Додирните да бисте прегледали."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Апликација <xliff:g id="APP">%1$s</xliff:g> је предуго покренута у позадини. Додирните да бисте прегледали."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Проверите активне апликације"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Не можете да приступите камери са овог уређаја"</string> </resources> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 4adcc475dc38..db91aaa8a16e 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"få tillgång till din kalender"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Sms"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"skicka och visa sms"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Filer och dokument"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"visa filer och dokument på enheten"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musik och övrigt ljud"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"komma åt ljudfiler på din enhet"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Foton och videor"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Fortsätt med hjälp av ditt skärmlås"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Ofullständigt fingeravtryck upptäcktes"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Det gick inte att bearbeta fingeravtrycket. Försök igen."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengör fingeravtryckssensorn och försök igen"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengör sensorn och försök igen"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tryck på sensorn med ett stadigt tryck"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du rörde fingret för långsamt. Försök igen."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Testa ett annat fingeravtryck"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Det är för ljust"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Flytta fingret lite varje gång"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeravtrycket känns inte igen"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Tryck på sensorn med ett stadigt tryck"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrycket har autentiserats"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet har autentiserats"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet har autentiserats. Tryck på Bekräfta"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Hoppa över"</string> <string name="no_matches" msgid="6472699895759164599">"Inga träffar"</string> <string name="find_on_page" msgid="5400537367077438198">"Sök på sidan"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# resultat}other{# av {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Klar"</string> <string name="progress_erasing" msgid="6891435992721028004">"Delat lagringsutrymme rensas …"</string> <string name="share" msgid="4157615043345227321">"Dela"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> körs i bakgrunden så att batteriet tar slut fortare. Tryck för att granska."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> har körts i bakgrunden under lång tid. Tryck för att granska."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Kontrollera aktiva appar"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Det går inte att komma åt kameran från den här enheten"</string> </resources> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 02572b00a4d7..b84a85fc2720 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ifikie kalenda yako"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"itume na iangalie SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Faili na hati"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"fikia faili na hati kwenye kifaa chako"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Muziki na sauti nyingine"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"fikia faili za sauti kwenye kifaa chako"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Picha na video"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Weka mbinu yako ya kufunga skrini ili uendelee"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Kimetambua sehemu ya alama ya kidole"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Imeshindwa kuchakata alama ya kidole. Tafadhali jaribu tena."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Safisha kitambua alama ya kidole kisha ujaribu tena"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Safisha kitambuzi kisha ujaribu tena"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Bonyeza kwa nguvu kwenye kitambuzi"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Kidole kilisogezwa polepole zaidi. Tafadhali jaribu tena."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Jaribu alama nyingine ya kidole"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Inang\'aa mno"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Badilisha mkao wa kidole chako kiasi kila wakati"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Alama ya kidole haijatambuliwa"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Bonyeza kwa nguvu kwenye kitambuzi"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Imethibitisha alama ya kidole"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Uso umethibitishwa"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Uso umethibitishwa, tafadhali bonyeza thibitisha"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Ruka"</string> <string name="no_matches" msgid="6472699895759164599">"Hakuna vinavyolingana"</string> <string name="find_on_page" msgid="5400537367077438198">"Pata kwenye ukurasa"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# inayolingana}other{# kati ya {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Nimemaliza"</string> <string name="progress_erasing" msgid="6891435992721028004">"Inafuta hifadhi iliyoshirikiwa…"</string> <string name="share" msgid="4157615043345227321">"Shiriki"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> inatumika chinichini na kumaliza nishati ya betri. Gusa ili ukague."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> inatumika chinichini kwa muda mrefu. Gusa ili ukague."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Angalia programu zinazotumika"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Haiwezi kufikia kamera kwenye kifaa hiki"</string> </resources> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 9acbac61eaf2..d312d950e5fd 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -545,7 +545,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"அருகிலுள்ள புளூடூத் சாதனங்களுக்குத் தெரியப்படுத்த ஆப்ஸை அனுமதிக்கும்"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"அருகிலுள்ள அல்ட்ரா-வைடுபேண்ட் சாதனங்களுக்கிடையிலான தூரத்தைத் தீர்மானித்தல்"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"அருகிலுள்ள அல்ட்ரா-வைடுபேண்ட் சாதனங்களுக்கிடையிலான தூரத்தைத் தீர்மானிக்க ஆப்ஸை அனுமதிக்கும்"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"அருகிலுள்ள வைஃபை சாதனங்களுடன் தொடர்பில் இருக்கும்"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"அருகிலுள்ள வைஃபை சாதனங்களுடன் தொடர்பு கொள்ளுதல்"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"அருகிலுள்ள வைஃபை சாதனங்களைத் தெரியப்படுத்தவும் இணைக்கவும் இருப்பிடத்தைத் தீர்மானிக்கவும் இது ஆப்ஸை அனுமதிக்கும்"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"விருப்பமான NFC பேமெண்ட் சேவை தொடர்பான தகவல்கள்"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"பதிவுசெய்யப்பட்ட கருவிகள், சேருமிடத்திற்கான வழி போன்ற விருப்பமான NFC பேமெண்ட் சேவை தொடர்பான தகவல்களைப் பெற ஆப்ஸை அனுமதிக்கிறது."</string> @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"தவிர்"</string> <string name="no_matches" msgid="6472699895759164599">"பொருத்தம் ஏதுமில்லை"</string> <string name="find_on_page" msgid="5400537367077438198">"பக்கத்தில் கண்டறி"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# பொருத்தம்}other{# / {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"முடிந்தது"</string> <string name="progress_erasing" msgid="6891435992721028004">"பகிர்ந்த சேமிப்பகத்தை அழிக்கிறது…"</string> <string name="share" msgid="4157615043345227321">"பகிர்"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> ஆப்ஸ் பின்னணியில் இயங்குவதுடன் பேட்டரியை அதிகமாகப் பயன்படுத்துகிறது. பார்க்க தட்டவும்."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ஆப்ஸ் நீண்ட நேரமாகப் பின்னணியில் இயங்குகிறது. பார்க்க தட்டவும்."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"செயலிலுள்ள ஆப்ஸைப் பாருங்கள்"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"இந்தச் சாதனத்திலிருந்து கேமராவை அணுக முடியவில்லை"</string> </resources> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 6e4ef59a9476..6e7f9805f40a 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"దాటవేయి"</string> <string name="no_matches" msgid="6472699895759164599">"సరిపోలికలు లేవు"</string> <string name="find_on_page" msgid="5400537367077438198">"పేజీలో కనుగొనండి"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# మ్యాచ్}other{#లో {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"పూర్తయింది"</string> <string name="progress_erasing" msgid="6891435992721028004">"షేర్ చేసిన నిల్వను తొలగిస్తోంది…"</string> <string name="share" msgid="4157615043345227321">"షేర్"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> బ్యాక్గ్రౌండ్లో రన్ అవుతోంది, బ్యాటరీని ఎక్కువగా వాడుతోంది. రివ్యూ చేయడానికి ట్యాప్ చేయండి."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> చాలా సమయం నుండి బ్యాక్గ్రౌండ్లో రన్ అవుతోంది. రివ్యూ చేయడానికి ట్యాప్ చేయండి."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"యాక్టివ్గా ఉన్న యాప్లను చెక్ చేయండి"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"ఈ పరికరం నుండి కెమెరాను యాక్సెస్ చేయడం సాధ్యపడదు"</string> </resources> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 4b33e95f6a97..2e987acf01aa 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"เข้าถึงปฏิทิน"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"ส่งและดูข้อความ SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"ไฟล์และเอกสาร"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"เข้าถึงไฟล์และเอกสารในอุปกรณ์"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"เพลงและเสียงอื่นๆ"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"เข้าถึงไฟล์เสียงในอุปกรณ์"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"รูปภาพและวิดีโอ"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ป้อนข้อมูลการล็อกหน้าจอเพื่อดำเนินการต่อ"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"ตรวจพบลายนิ้วมือบางส่วน"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ประมวลผลลายนิ้วมือไม่ได้ โปรดลองอีกครั้ง"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ทำความสะอาดเซ็นเซอร์ลายนิ้วมือแล้วลองอีกครั้ง"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ทำความสะอาดเซ็นเซอร์แล้วลองอีกครั้ง"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"กดเซ็นเซอร์ให้แน่น"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"นิ้วเคลื่อนที่ช้าเกินไป โปรดลองอีกครั้ง"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ลองลายนิ้วมืออื่น"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"สว่างเกินไป"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"เปลี่ยนตำแหน่งของนิ้วเล็กน้อยไปเรื่อยๆ ทุกครั้ง"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ไม่รู้จักลายนิ้วมือ"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"กดเซ็นเซอร์ให้แน่น"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ตรวจสอบสิทธิ์ลายนิ้วมือแล้ว"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ตรวจสอบสิทธิ์ใบหน้าแล้ว"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ตรวจสอบสิทธิ์ใบหน้าแล้ว โปรดกดยืนยัน"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"ข้าม"</string> <string name="no_matches" msgid="6472699895759164599">"ไม่พบรายการที่ตรงกัน"</string> <string name="find_on_page" msgid="5400537367077438198">"ค้นหาบนหน้า"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{ตรงกัน # รายการ}other{ตรงกัน # รายการจาก {total} รายการ}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"เสร็จสิ้น"</string> <string name="progress_erasing" msgid="6891435992721028004">"กำลังลบพื้นที่เก็บข้อมูลที่แชร์…"</string> <string name="share" msgid="4157615043345227321">"แชร์"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> กำลังทำงานอยู่ในเบื้องหลังและทำให้เปลืองแบตเตอรี่ แตะเพื่อตรวจสอบ"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> ทำงานอยู่ในเบื้องหลังเป็นเวลานาน แตะเพื่อตรวจสอบ"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"ตรวจสอบแอปที่ใช้งานอยู่"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"เข้าถึงกล้องจากอุปกรณ์นี้ไม่ได้"</string> </resources> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index e44367682cd2..e4556890ac25 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"i-access ang iyong kalendaryo"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"magpadala at tumingin ng mga mensaheng SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Mga file at dokumento"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"i-access ang mga file at dokumento sa iyong device"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musika at iba pang audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"mag-access ng mga audio file sa iyong device"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Mga larawan at video"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ilagay ang iyong lock ng screen para magpatuloy"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Hindi buo ang natukoy na fingerprint"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Hindi maproseso ang fingerprint. Pakisubukan ulit."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Linisin ang sensor para sa fingerprint at subukan ulit"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Linisin ang sensor at subukan ulit"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pumindot nang madiin sa sensor"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Masyadong mabagal ang paggalaw ng daliri. Pakisubukan ulit."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Sumubok ng ibang fingerprint"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Masyadong maliwanag"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Bahagyang baguhin ang posisyon ng iyong daliri sa bawat pagkakataon"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Hindi nakilala ang fingerprint"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Pumindot nang madiin sa sensor"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Na-authenticate ang fingerprint"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Na-authenticate ang mukha"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Na-authenticate ang mukha, pakipindot ang kumpirmahin"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Laktawan"</string> <string name="no_matches" msgid="6472699895759164599">"Walang mga tugma"</string> <string name="find_on_page" msgid="5400537367077438198">"Maghanap sa pahina"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# tugma}one{# sa {total}}other{# sa {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Tapos na"</string> <string name="progress_erasing" msgid="6891435992721028004">"Binubura ang nakabahaging storage…"</string> <string name="share" msgid="4157615043345227321">"Ibahagi"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Gumagana ang <xliff:g id="APP">%1$s</xliff:g> sa background at gumagamit ito ng baterya I-tap para suriin."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Napakatagal nang gumagana ang <xliff:g id="APP">%1$s</xliff:g> sa background. I-tap para suriin."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Tingnan ang mga aktibong app"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Hindi ma-access ang camera mula sa device na ito"</string> </resources> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 9546de4d69a8..42072aa764ff 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"takviminize erişme"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS mesajları gönderme ve görüntüleme"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Dosyalar ve dokümanlar"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"cihazınızdaki dosyalara ve dokümanlara erişme"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Müzik ve diğer sesler"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"cihazınızdaki ses dosyalarına erişme"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Fotoğraflar ve videolar"</string> @@ -547,7 +545,7 @@ <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Uygulamaya, yakındaki Bluetooth cihazlara reklam yayınlama izni verir"</string> <string name="permlab_uwb_ranging" msgid="8141915781475770665">"yakındaki Ultra Geniş Bant cihazların birbirine göre konumunu bul"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Uygulamanın, yakındaki Ultra Geniş Bant cihazların birbirine göre konumunu belirlemesine izin verin"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"yakındaki kablosuz cihazlarla etkileşim kurma"</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"yakındaki kablosuz cihazlarla etkileşim kur"</string> <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Uygulamanın reklam sunmasına, bağlanmasına ve yakındaki kablosuz cihazların göreli konumunu belirlemesine izin verir"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Tercih Edilen NFC Ödeme Hizmeti Bilgileri"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Uygulamaya, kayıtlı yardımlar ve rota hedefi gibi tercih edilen NFC ödeme hizmeti bilgilerini alma izni verir."</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Devam etmek için ekran kilidinizi girin"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Parmak izinin tümü algılanamadı"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Parmak izi sensörünü temizleyip tekrar deneyin"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensörü temizleyip tekrar deneyin"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensöre sıkıca bastırın"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Parmak hareketi çok yavaştı. Lütfen tekrar deneyin."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Başka bir parmak izi deneyin"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çok parlak"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızın konumunu biraz değiştirin"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Parmak izi tanınmadı"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Sensöre sıkıca bastırın"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Parmak izi kimlik doğrulaması yapıldı"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yüz kimliği doğrulandı"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yüz kimliği doğrulandı, lütfen onayla\'ya basın"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Atla"</string> <string name="no_matches" msgid="6472699895759164599">"Eşleşme yok"</string> <string name="find_on_page" msgid="5400537367077438198">"Sayfada bul"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# eşleştirme}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Bitti"</string> <string name="progress_erasing" msgid="6891435992721028004">"Paylaşılan depolama alanı siliniyor…"</string> <string name="share" msgid="4157615043345227321">"Paylaş"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> arka planda çalışıyor ve pil tüketiyor. İncelemek için dokunun."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> uzun süredir arka planda çalışıyor. İncelemek için dokunun."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Etkin uygulamaları kontrol edin"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Bu cihazdan kameraya erişilemiyor"</string> </resources> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index cc763ad1992e..edd87b0a2d5b 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -306,10 +306,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"отримувати доступ до календаря"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"надсилати та переглядати SMS-повідомлення"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Файли та документи"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"отримувати доступ до файлів і документів на вашому пристрої"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Музика й інше аудіо"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"отримувати доступ до аудіофайлів на вашому пристрої"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Фото й відео"</string> @@ -590,12 +588,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Щоб продовжити, введіть дані для розблокування екрана"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Виявлено частковий відбиток пальця"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не вдалось обробити відбиток пальця. Повторіть спробу."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Очистьте сканер відбитків пальців і повторіть спробу"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Очистьте сканер і повторіть спробу"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Міцно притисніть палець до сканера"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Ви провели пальцем надто повільно. Повторіть спробу."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Спробуйте інший відбиток пальця"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Надто яскраво"</string> @@ -603,10 +598,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Щоразу трохи змінюйте положення пальця"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Відбиток пальця не розпізнано"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Міцно притисніть палець до сканера"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Відбиток пальця автентифіковано"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Обличчя автентифіковано"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Обличчя автентифіковано. Натисніть \"Підтвердити\""</string> @@ -1510,8 +1503,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Пропустити"</string> <string name="no_matches" msgid="6472699895759164599">"Немає збігів"</string> <string name="find_on_page" msgid="5400537367077438198">"Знайти на сторінці"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# збіг}one{# з {total}}few{# з {total}}many{# з {total}}other{# з {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Готово"</string> <string name="progress_erasing" msgid="6891435992721028004">"Стирання спільної пам’яті…"</string> <string name="share" msgid="4157615043345227321">"Надіслати"</string> @@ -2265,6 +2257,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"Додаток <xliff:g id="APP">%1$s</xliff:g> працює у фоновому режимі та розряджає акумулятор. Натисніть, щоб переглянути."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"Додаток <xliff:g id="APP">%1$s</xliff:g> довго працює у фоновому режимі. Натисніть, щоб переглянути."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Перевірте активні додатки"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Не вдається отримати доступ до камери через цей пристрій"</string> </resources> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 86365725eae9..91c8be7cb827 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"نظر انداز کریں"</string> <string name="no_matches" msgid="6472699895759164599">"کوئی مماثلتیں نہیں ہیں"</string> <string name="find_on_page" msgid="5400537367077438198">"صفحہ پر تلاش کریں"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# مماثلت}other{{total} میں سے #}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"ہو گیا"</string> <string name="progress_erasing" msgid="6891435992721028004">"اشتراک کردہ اسٹوریج کو صاف کیا جا رہا ہے…"</string> <string name="share" msgid="4157615043345227321">"اشتراک کریں"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> پس منظر میں چل رہی ہے اور بیٹری ختم ہو رہی ہے۔ جائزے کے لیے تھپتھپائیں۔"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> کافی وقت سے پس منظر میں چل رہی ہے۔ جائزے کے لیے تھپتھپائیں۔"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"فعال ایپس چیک کریں"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"اس آلہ سے کیمرا تک رسائی حاصل نہیں کر سکتے"</string> </resources> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index e09f6348b3ce..b82999fdb606 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"taqvimingizga kirish"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS xabarlarni yuborish va ko‘rish"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Fayl va hujjatlar"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"qurilmangizdagi fayl va hujjatlarga kirish"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Musiqa va boshqa audio"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"qurilmangizdagi audio fayllarga kirish"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Suratlar va videolar"</string> @@ -539,16 +537,16 @@ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Ilovaga planshetdagi Bluetooth‘ning sozlamasini ko‘rishga va bog‘langan qurilmalarga ulanish va ulardan ulanish so‘rovlarini qabul qulishga imkon beradi."</string> <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Ilovaga Android TV qurilmangizdagi Bluetooth sozlamasini koʻrishga va bogʻlangan qurilmalarga ulanish va ulardan ulanish talablarni qabul qilishga imkon beradi."</string> <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Ilovaga telefondagi Bluetooth‘ning sozlamasini ko‘rishga va bog‘langan qurilmalarga ulanish va ulardan ulanish so‘rovlarini qabul qulishga imkon beradi."</string> - <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"Bluetooth qurilmalarini topish va juftlashish"</string> + <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"Bluetooth qurilmalarni topish va juftlash"</string> <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Ilovaga yaqin-atrofdagi Bluetooth qurilmalarini topish va juftlashish uchun ruxsat beradi"</string> - <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"juftlangan Bluetooth qurilmalariga ulanish"</string> + <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"Juftlangan Bluetooth qurilmalarga ulanish"</string> <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Ilovaga juftlangan Bluetooth qurilmalariga ulanish uchun ruxsat beradi"</string> - <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"atrofdagi Bluetooth qurilmalariga reklama berish"</string> + <string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"Atrofdagi Bluetooth qurilmalarga reklama yuborish"</string> <string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Ilovaga yaqin-atrofdagi Bluetooth qurilmalariga reklama yuborish imkonini beradi"</string> - <string name="permlab_uwb_ranging" msgid="8141915781475770665">"yaqin atrofdagi ultra keng polosali qurilmalarining nisbiy joylashishini aniqlash"</string> + <string name="permlab_uwb_ranging" msgid="8141915781475770665">"Atrofdagi ultra-keng aloqa kanalli qurilmalarning nisbiy joylashuvini aniqlash"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Ilovaga yaqin atrofdagi ultra keng polosali qurilmalarining nisbiy joylashishini aniqlashga ruxsat beradi"</string> - <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Yaqin-atrofdagi Wi-Fi qurilmalari bilan ishlash"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Ilovaga yaqin-atrofdagi Wi-Fi qurilmalarga reklama yuborish, ulanish va taxminiy joylashuvini aniqlash imkonini beradi."</string> + <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"Yaqin-atrofdagi Wi-Fi qurilmalar bilan ishlash"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Ilovaga yaqin-atrofdagi Wi-Fi qurilmalarga reklama yuborish, ulanish va ularning taxminiy joylashuvini aniqlash imkonini beradi."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Asosiy NFC toʻlov xizmati haqidagi axborot"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Bu ilovaga asosiy NFC toʻlov xizmati haqidagi axborotni olish imkonini beradi (masalan, qayd qilingan AID identifikatorlari va marshrutning yakuniy manzili)."</string> <string name="permlab_nfc" msgid="1904455246837674977">"NFC modulini boshqarish"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ekran qulfini kiritish bilan davom eting"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Barmoq izi qismi aniqlandi"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmoq izi aniqlanmadi. Qaytadan urining."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Barmoq izi skanerini tozalang va qayta urining"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensorni tozalang va qayta urining"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensorni mahkam bosing"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Barmoq juda sekin harakatlandi. Qayta urinib ko‘ring."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Boshqa barmoq izi bilan urining"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Juda yorqin"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Barmoqni har safar biroz surib joylang"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmoq izi aniqlanmadi"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Sensorni mahkam bosing"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmoq izi tekshirildi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yuzingiz aniqlandi"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yuzingiz aniqlandi, tasdiqlash uchun bosing"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Tashlab o‘tish"</string> <string name="no_matches" msgid="6472699895759164599">"Topilmadi"</string> <string name="find_on_page" msgid="5400537367077438198">"Sahifadan topish"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# ta moslik}other{# / {total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Tayyor"</string> <string name="progress_erasing" msgid="6891435992721028004">"Umumiy xotira tozalanmoqda…"</string> <string name="share" msgid="4157615043345227321">"Yuborish"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> orqa fonda ishlamoqda va batareyani ortiqcha sarflamoqda. Tekshirish uchun bosing."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> uzoq vaqt orqa fonda ishlamoqda. Tekshirish uchun bosing."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Faol ilovalarni tekshiring"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Kamera bu qurilma orqali ochilmadi"</string> </resources> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 329f19379da9..07a98c9db814 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"truy cập lịch của bạn"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"Tin nhắn SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"gửi và xem tin nhắn SMS"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"Tệp và tài liệu"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"truy cập vào các tệp và tài liệu trên thiết bị của bạn"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"Nhạc và âm thanh khác"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"truy cập vào tệp âm thanh trên thiết bị"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"Ảnh và video"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Hãy nhập phương thức khóa màn hình của bạn để tiếp tục"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"Phát hiện thấy một phần vân tay"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Không thể xử lý vân tay. Vui lòng thử lại."</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hãy vệ sinh cảm biến vân tay rồi thử lại"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vệ sinh cảm biến rồi thử lại"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Nhấn chắc trên cảm biến"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Di chuyển ngón tay quá chậm. Vui lòng thử lại."</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Hãy thử một vân tay khác"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Quá sáng"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mỗi lần, hãy thay đổi vị trí ngón tay một chút"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Không nhận dạng được vân tay"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"Nhấn chắc trên cảm biến"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Đã xác thực vân tay"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Đã xác thực khuôn mặt"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Đã xác thực khuôn mặt, vui lòng nhấn để xác nhận"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Bỏ qua"</string> <string name="no_matches" msgid="6472699895759164599">"Không có kết quả nào phù hợp"</string> <string name="find_on_page" msgid="5400537367077438198">"Tìm kiếm trên trang"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# kết quả trùng khớp}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Xong"</string> <string name="progress_erasing" msgid="6891435992721028004">"Đang xóa bộ nhớ dùng chung…"</string> <string name="share" msgid="4157615043345227321">"Chia sẻ"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> đang chạy trong nền và làm tiêu hao pin. Nhấn để xem lại."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> đang chạy trong nền trong thời gian dài. Nhấn để xem lại."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Xem các ứng dụng đang hoạt động"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Không sử dụng được máy ảnh trên thiết bị này"</string> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index dbfef838df65..31a37d2b72a8 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"访问您的日历"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"短信"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"发送和查看短信"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"文件和文档"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"访问您设备上的文件和文档"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"音乐和其他音频"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"访问您设备上的音频文件"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"照片和视频"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"输入您的屏幕锁定凭据才能继续"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"检测到局部指纹"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"无法处理指纹,请重试。"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"请清洁指纹传感器,然后重试"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"请清洁传感器,然后重试"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"请用力按住传感器"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移动太慢,请重试。"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"请试试其他指纹"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"光线太亮"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"请在每次放手指时略微更改手指的位置"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"未能识别指纹"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"请用力按住传感器"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"已验证指纹"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"面孔已验证"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已验证,请按确认按钮"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"跳过"</string> <string name="no_matches" msgid="6472699895759164599">"无匹配项"</string> <string name="find_on_page" msgid="5400537367077438198">"在网页上查找"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# 条匹配结果}other{#/{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"完成"</string> <string name="progress_erasing" msgid="6891435992721028004">"正在清空共享的存储空间…"</string> <string name="share" msgid="4157615043345227321">"分享"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> 正在后台运行,并且消耗了大量电池电量。点按即可查看。"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> 已在后台运行较长时间。点按即可查看。"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"查看使用中的应用"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"无法使用此设备的摄像头"</string> </resources> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index c4fa7a00fe12..07a2e6d93d7e 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"存取您的日曆"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"短訊"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"傳送和查看短訊"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"檔案和文件"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"存取裝置上的檔案和文件"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"音樂和其他音訊"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"存取裝置上的音訊檔案"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"相片和影片"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"如要繼續操作,請輸入螢幕鎖定解鎖憑證"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"只偵測到部分指紋"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋。請再試一次。"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"請清潔指紋感應器,然後再試一次"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"請清潔感應器,然後再試一次"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"請用力按住感應器"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移動太慢,請重試。"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"改用其他指紋"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"太亮"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"每次掃瞄時請稍微變更手指的位置"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"無法辨識指紋"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"請用力按住感應器"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"驗證咗指紋"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"面孔已經驗證"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已經驗證,請㩒一下 [確認]"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"略過"</string> <string name="no_matches" msgid="6472699895759164599">"沒有相符的結果"</string> <string name="find_on_page" msgid="5400537367077438198">"在頁面中尋找"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# 個相符的項目}other{第 # 個 (共 {total} 個相符的項目)}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"完成"</string> <string name="progress_erasing" msgid="6891435992721028004">"正在清除共用儲存空間資料…"</string> <string name="share" msgid="4157615043345227321">"分享"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"<xliff:g id="APP">%1$s</xliff:g> 正在背景執行並大量耗電。輕按即可查看。"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"<xliff:g id="APP">%1$s</xliff:g> 已長時間在背景執行。輕按即可查看。"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"查看使用中的應用程式"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"無法存取此裝置的相機"</string> </resources> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 843c751725b0..1f0425f554dc 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -304,10 +304,8 @@ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"存取你的日曆"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"簡訊"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"傳送及查看簡訊"</string> - <!-- no translation found for permgrouplab_storage (9173334109512154196) --> - <skip /> - <!-- no translation found for permgroupdesc_storage (8352226729501080525) --> - <skip /> + <string name="permgrouplab_storage" msgid="9173334109512154196">"檔案與文件"</string> + <string name="permgroupdesc_storage" msgid="8352226729501080525">"存取裝置上的檔案與文件"</string> <string name="permgrouplab_readMediaAural" msgid="5885210465560755316">"音樂和其他音訊"</string> <string name="permgroupdesc_readMediaAural" msgid="1170143315714662822">"存取裝置上的音訊檔案"</string> <string name="permgrouplab_readMediaVisual" msgid="9137695801926624061">"相片和影片"</string> @@ -548,7 +546,7 @@ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"判斷附近超寬頻裝置間的相對位置"</string> <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"允許應用程式判斷附近超寬頻裝置間的相對位置"</string> <string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"與鄰近的 Wi-Fi 裝置互動"</string> - <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"允許應用程式向鄰近的 Wi-Fi 裝置廣播、與這些裝置連線,並能判斷這些裝置的相對位置"</string> + <string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"允許應用程式顯示鄰近的 Wi-Fi 裝置的資料、與其連線並判斷相對位置"</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"首選 NFC 付費服務資訊"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"允許應用程式取得首選 NFC 付費服務資訊,例如已註冊的輔助工具和路線目的地。"</string> <string name="permlab_nfc" msgid="1904455246837674977">"控制近距離無線通訊"</string> @@ -588,12 +586,9 @@ <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"如要繼續操作,請輸入螢幕鎖定憑證"</string> <string name="fingerprint_acquired_partial" msgid="694598777291084823">"僅偵測到局部指紋"</string> <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋,請再試一次。"</string> - <!-- no translation found for fingerprint_acquired_imager_dirty (1770676120848224250) --> - <skip /> - <!-- no translation found for fingerprint_acquired_imager_dirty_alt (9169582140486372897) --> - <skip /> - <!-- no translation found for fingerprint_acquired_too_fast (1628459767349116104) --> - <skip /> + <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"請清潔指紋感應器,然後再試一次"</string> + <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"清潔感應器,然後再試一次"</string> + <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"請確實按住感應器"</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移動速度過慢,請再試一次。"</string> <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"改用其他指紋"</string> <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"太亮"</string> @@ -601,10 +596,8 @@ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"每次掃描時請稍微變更手指的位置"</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <!-- no translation found for fingerprint_error_not_match (4599441812893438961) --> - <skip /> - <!-- no translation found for fingerprint_udfps_error_not_match (4709197752023550709) --> - <skip /> + <string name="fingerprint_error_not_match" msgid="4599441812893438961">"指紋辨識失敗"</string> + <string name="fingerprint_udfps_error_not_match" msgid="4709197752023550709">"請確實按住感應器"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"指紋驗證成功"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"臉孔驗證成功"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"臉孔驗證成功,請按下 [確認] 按鈕"</string> @@ -1508,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"略過"</string> <string name="no_matches" msgid="6472699895759164599">"沒有相符項目"</string> <string name="find_on_page" msgid="5400537367077438198">"在頁面中尋找"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# 個相符的項目}other{第 # 個,共 {total} 個相符的項目}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"完成"</string> <string name="progress_erasing" msgid="6891435992721028004">"正在清除共用儲存空間…"</string> <string name="share" msgid="4157615043345227321">"分享"</string> @@ -2263,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"「<xliff:g id="APP">%1$s</xliff:g>」正在背景運作且耗用大量電力。輕觸即可查看。"</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"「<xliff:g id="APP">%1$s</xliff:g>」已長時間在背景運作。輕觸即可查看。"</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"查看使用中的應用程式"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"無法存取這部裝置的相機"</string> </resources> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 41cd8b00c262..35f6245a9059 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -1501,8 +1501,7 @@ <string name="skip_button_label" msgid="3566599811326688389">"Yeqa"</string> <string name="no_matches" msgid="6472699895759164599">"Akukho okufanayo"</string> <string name="find_on_page" msgid="5400537367077438198">"Thola ekhasini"</string> - <!-- no translation found for matches_found (2296462299979507689) --> - <skip /> + <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{okufanayo okungu-#}one{okungu-# kokungu-{total}}other{okungu-# kokungu-{total}}}"</string> <string name="action_mode_done" msgid="2536182504764803222">"Kwenziwe"</string> <string name="progress_erasing" msgid="6891435992721028004">"Isusa isitoreji esabiwe…"</string> <string name="share" msgid="4157615043345227321">"Yabelana"</string> @@ -2256,6 +2255,5 @@ <string name="notification_content_abusive_bg_apps" msgid="5572096708044958249">"I-<xliff:g id="APP">%1$s</xliff:g> isebenza ngemuva futhi idla ibhethri. Thepha ukuze ubuyekeze."</string> <string name="notification_content_long_running_fgs" msgid="8878031652441570178">"I-<xliff:g id="APP">%1$s</xliff:g> isebenza ngemuva isikhathi eside. Thepha ukuze ubuyekeze."</string> <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Hlola ama-app asebenzayo"</string> - <!-- no translation found for vdm_camera_access_denied (6345652513729130490) --> - <skip /> + <string name="vdm_camera_access_denied" msgid="6345652513729130490">"Ayikwazi ukufinyelela ikhamera kule divayisi"</string> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 689d37c91920..70ff29bec8f6 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5479,9 +5479,9 @@ <enum name="none" value="0" /> <!-- Use the least restrictive rule for line-breaking. --> <enum name="loose" value="1" /> - <!-- Indicate breaking text with the most comment set of line-breaking rules. --> + <!-- Indicates breaking text with the most comment set of line-breaking rules. --> <enum name="normal" value="2" /> - <!-- ndicates breaking text with the most strictest line-breaking rules. --> + <!-- Indicates breaking text with the most strictest line-breaking rules. --> <enum name="strict" value="3" /> </attr> <!-- Specify the phrase-based line break can be used when calculating the text wrapping.--> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 744c3dab9510..adf8f8e99d35 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -606,6 +606,9 @@ <!-- The padding ratio of the Accessibility icon foreground drawable --> <item name="accessibility_icon_foreground_padding_ratio" type="dimen">21.88%</item> + <!-- The minimum window size of the accessibility window magnifier --> + <dimen name="accessibility_window_magnifier_min_size">122dp</dimen> + <!-- Margin around the various security views --> <dimen name="keyguard_muliuser_selector_margin">8dp</dimen> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index e7eeecc2b516..558e3c3a0222 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1676,6 +1676,7 @@ <java-symbol type="id" name="media_route_volume_slider" /> <java-symbol type="id" name="media_route_control_frame" /> <java-symbol type="id" name="media_route_extended_settings_button" /> + <java-symbol type="id" name="media_route_progress_bar" /> <java-symbol type="string" name="media_route_chooser_title" /> <java-symbol type="string" name="media_route_chooser_title_for_remote_display" /> <java-symbol type="string" name="media_route_controller_disconnect" /> @@ -4398,6 +4399,7 @@ <java-symbol type="color" name="accessibility_focus_highlight_color" /> <!-- Width of the outline stroke used by the accessibility focus rectangle --> <java-symbol type="dimen" name="accessibility_focus_highlight_stroke_width" /> + <java-symbol type="dimen" name="accessibility_window_magnifier_min_size" /> <java-symbol type="bool" name="config_attachNavBarToAppDuringTransition" /> diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java index f5cbffb64bb5..e79f1e30f8bb 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java @@ -24,6 +24,8 @@ import static android.os.BatteryStats.WAKE_TYPE_PARTIAL; import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU; import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_DISPLAY; +import static com.google.common.truth.Truth.assertThat; + import android.app.ActivityManager; import android.os.BatteryStats; import android.os.BatteryStats.HistoryItem; @@ -213,6 +215,116 @@ public class BatteryStatsNoteTest extends TestCase { assertEquals(120_000, bgTime); } + /** + * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid. + */ + @SmallTest + public void testNoteLongPartialWakelockStart_isolatedUid() throws Exception { + final MockClock clocks = new MockClock(); // holds realtime and uptime in ms + MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); + + + bi.setRecordAllHistoryLocked(true); + bi.forceRecordAllHistory(); + + int pid = 10; + String name = "name"; + String historyName = "historyName"; + + WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain(); + isolatedWorkChain.addNode(ISOLATED_UID, name); + + // Map ISOLATED_UID to UID. + bi.addIsolatedUidLocked(ISOLATED_UID, UID); + + bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); + bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID); + + clocks.realtime = clocks.uptime = 100; + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); + + clocks.realtime = clocks.uptime = 220; + bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID); + + final BatteryStatsHistoryIterator iterator = + bi.createBatteryStatsHistoryIterator(); + + BatteryStats.HistoryItem item = new BatteryStats.HistoryItem(); + + while (iterator.next(item)) { + if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break; + } + assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START); + assertThat(item.eventTag).isNotNull(); + assertThat(item.eventTag.string).isEqualTo(historyName); + assertThat(item.eventTag.uid).isEqualTo(UID); + + while (iterator.next(item)) { + if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break; + } + assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH); + assertThat(item.eventTag).isNotNull(); + assertThat(item.eventTag.string).isEqualTo(historyName); + assertThat(item.eventTag.uid).isEqualTo(UID); + } + + /** + * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid. + */ + @SmallTest + public void testNoteLongPartialWakelockStart_isolatedUidRace() throws Exception { + final MockClock clocks = new MockClock(); // holds realtime and uptime in ms + MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); + + + bi.setRecordAllHistoryLocked(true); + bi.forceRecordAllHistory(); + + int pid = 10; + String name = "name"; + String historyName = "historyName"; + + WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain(); + isolatedWorkChain.addNode(ISOLATED_UID, name); + + // Map ISOLATED_UID to UID. + bi.addIsolatedUidLocked(ISOLATED_UID, UID); + + bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); + bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID); + + clocks.realtime = clocks.uptime = 100; + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); + + clocks.realtime = clocks.uptime = 150; + bi.maybeRemoveIsolatedUidLocked(ISOLATED_UID, clocks.realtime, clocks.uptime); + + clocks.realtime = clocks.uptime = 220; + bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID); + + final BatteryStatsHistoryIterator iterator = + bi.createBatteryStatsHistoryIterator(); + + BatteryStats.HistoryItem item = new BatteryStats.HistoryItem(); + + while (iterator.next(item)) { + if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break; + } + assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START); + assertThat(item.eventTag).isNotNull(); + assertThat(item.eventTag.string).isEqualTo(historyName); + assertThat(item.eventTag.uid).isEqualTo(UID); + + while (iterator.next(item)) { + if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break; + } + assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH); + assertThat(item.eventTag).isNotNull(); + assertThat(item.eventTag.string).isEqualTo(historyName); + assertThat(item.eventTag.uid).isEqualTo(UID); + } /** * Test BatteryStatsImpl.noteUidProcessStateLocked. diff --git a/errorprone/Android.bp b/errorprone/Android.bp index a927f53e3b5f..8f32f0eab37f 100644 --- a/errorprone/Android.bp +++ b/errorprone/Android.bp @@ -1,4 +1,3 @@ - package { // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import @@ -42,8 +41,10 @@ java_test_host { static_libs: [ "truth-prebuilt", "kxml2-2.3.0", + "compile-testing-prebuilt", "error_prone_android_framework_lib", "error_prone_test_helpers", + "google_java_format", "hamcrest-library", "hamcrest", "platform-test-annotations", diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/HideInCommentsChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/HideInCommentsChecker.java new file mode 100644 index 000000000000..07f1d4a09006 --- /dev/null +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/HideInCommentsChecker.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.errorprone.bugpatterns.android; + +import static com.google.errorprone.BugPattern.LinkType.NONE; +import static com.google.errorprone.BugPattern.SeverityLevel.WARNING; +import static com.google.errorprone.matchers.Description.NO_MATCH; +import static com.google.errorprone.util.ASTHelpers.getStartPosition; +import static com.google.errorprone.util.ASTHelpers.getSymbol; + +import com.google.auto.service.AutoService; +import com.google.errorprone.BugPattern; +import com.google.errorprone.VisitorState; +import com.google.errorprone.bugpatterns.BugChecker; +import com.google.errorprone.fixes.SuggestedFix; +import com.google.errorprone.matchers.Description; +import com.google.errorprone.util.ASTHelpers; +import com.google.errorprone.util.ErrorProneToken; +import com.google.errorprone.util.ErrorProneTokens; +import com.sun.source.tree.ClassTree; +import com.sun.source.tree.CompilationUnitTree; +import com.sun.source.tree.MethodTree; +import com.sun.source.tree.NewClassTree; +import com.sun.source.tree.Tree; +import com.sun.source.tree.VariableTree; +import com.sun.tools.javac.parser.Tokens; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import javax.lang.model.element.ElementKind; + +/** + * Bug checker to warn about {@code @hide} directives in comments. + * + * {@code @hide} tags are only meaningful inside of Javadoc comments. Errorprone has checks for + * standard Javadoc tags but doesn't know anything about {@code @hide} since it's an Android + * specific tag. + */ +@AutoService(BugChecker.class) +@BugPattern( + name = "AndroidHideInComments", + summary = "Warns when there are @hide declarations in comments rather than javadoc", + linkType = NONE, + severity = WARNING) +public class HideInCommentsChecker extends BugChecker implements + BugChecker.CompilationUnitTreeMatcher { + + @Override + public Description matchCompilationUnit(CompilationUnitTree tree, VisitorState state) { + final Map<Integer, Tree> javadocableTrees = findJavadocableTrees(tree); + final String sourceCode = state.getSourceCode().toString(); + for (ErrorProneToken token : ErrorProneTokens.getTokens(sourceCode, state.context)) { + for (Tokens.Comment comment : token.comments()) { + if (!javadocableTrees.containsKey(token.pos())) { + continue; + } + generateFix(comment).ifPresent(fix -> { + final Tree javadocableTree = javadocableTrees.get(token.pos()); + state.reportMatch(describeMatch(javadocableTree, fix)); + }); + } + } + // We might have multiple matches, so report them via VisitorState rather than the return + // value from the match function. + return NO_MATCH; + } + + private static Optional<SuggestedFix> generateFix(Tokens.Comment comment) { + final String text = comment.getText(); + if (text.startsWith("/**")) { + return Optional.empty(); + } + + if (!text.contains("@hide")) { + return Optional.empty(); + } + + if (text.startsWith("/*")) { + final int pos = comment.getSourcePos(1); + return Optional.of(SuggestedFix.replace(pos, pos, "*")); + } else if (text.startsWith("//")) { + final int endPos = comment.getSourcePos(text.length() - 1); + final char endChar = text.charAt(text.length() - 1); + String javadocClose = " */"; + if (endChar != ' ') { + javadocClose = endChar + javadocClose; + } + final SuggestedFix fix = SuggestedFix.builder() + .replace(comment.getSourcePos(1), comment.getSourcePos(2), "**") + .replace(endPos, endPos + 1, javadocClose) + .build(); + return Optional.of(fix); + } + + return Optional.empty(); + } + + + private Map<Integer, Tree> findJavadocableTrees(CompilationUnitTree tree) { + Map<Integer, Tree> javadoccableTrees = new HashMap<>(); + new SuppressibleTreePathScanner<Void, Void>() { + @Override + public Void visitClass(ClassTree classTree, Void unused) { + javadoccableTrees.put(getStartPosition(classTree), classTree); + return super.visitClass(classTree, null); + } + + @Override + public Void visitMethod(MethodTree methodTree, Void unused) { + // Generated constructors never have comments + if (!ASTHelpers.isGeneratedConstructor(methodTree)) { + javadoccableTrees.put(getStartPosition(methodTree), methodTree); + } + return super.visitMethod(methodTree, null); + } + + @Override + public Void visitVariable(VariableTree variableTree, Void unused) { + ElementKind kind = getSymbol(variableTree).getKind(); + if (kind == ElementKind.FIELD) { + javadoccableTrees.put(getStartPosition(variableTree), variableTree); + } + if (kind == ElementKind.ENUM_CONSTANT) { + javadoccableTrees.put(getStartPosition(variableTree), variableTree); + if (variableTree.getInitializer() instanceof NewClassTree) { + // Skip the generated class definition + ClassTree classBody = + ((NewClassTree) variableTree.getInitializer()).getClassBody(); + if (classBody != null) { + scan(classBody.getMembers(), null); + } + return null; + } + } + return super.visitVariable(variableTree, null); + } + + }.scan(tree, null); + return javadoccableTrees; + } + +} diff --git a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/HideInCommentsCheckerTest.java b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/HideInCommentsCheckerTest.java new file mode 100644 index 000000000000..f3e6c72756e0 --- /dev/null +++ b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/HideInCommentsCheckerTest.java @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.errorprone.bugpatterns.android; + +import static com.google.errorprone.BugCheckerRefactoringTestHelper.TestMode.TEXT_MATCH; + +import com.google.errorprone.BugCheckerRefactoringTestHelper; +import com.google.errorprone.CompilationTestHelper; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class HideInCommentsCheckerTest { + private static final String REFACTORING_FILE = "Test.java"; + + private BugCheckerRefactoringTestHelper mRefactoringHelper; + private CompilationTestHelper mCompilationHelper; + + @Before + public void setUp() { + mRefactoringHelper = BugCheckerRefactoringTestHelper.newInstance( + HideInCommentsChecker.class, HideInCommentsCheckerTest.class); + mCompilationHelper = CompilationTestHelper.newInstance( + HideInCommentsChecker.class, HideInCommentsCheckerTest.class); + } + + + @Test + public void refactorSingleLineComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public class Test {", + " // Foo @hide", + " void foo() {}", + "}") + .addOutputLines( + REFACTORING_FILE, + "public class Test {", + " /** Foo @hide */", + " void foo() {}", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorSingleLineComment_doesntAddUnnecessarySpace() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public class Test {", + " // Foo @hide ", + " void foo() {}", + "}") + .addOutputLines( + REFACTORING_FILE, + "public class Test {", + " /** Foo @hide */", + " void foo() {}", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorSingleLineBlockComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public class Test {", + " /* Foo @hide */", + " void foo() {}", + "}") + .addOutputLines( + REFACTORING_FILE, + "public class Test {", + " /** Foo @hide */", + " void foo() {}", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorMultiLineBlockComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public class Test {", + " /*", + " * Foo.", + " *", + " * @hide", + " */", + " void foo(int foo) {}", + "}") + .addOutputLines( + REFACTORING_FILE, + "public class Test {", + " /**", + " * Foo.", + " *", + " * @hide", + " */", + " void foo(int foo) {}", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorFieldComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public class Test {", + " /* Foo @hide */", + " public int foo = 0;", + "}") + .addOutputLines( + REFACTORING_FILE, + "public class Test {", + " /** Foo @hide */", + " public int foo = 0;", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorClassComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "/* Foo @hide */", + "public class Test {}") + .addOutputLines( + REFACTORING_FILE, + "/** Foo @hide */", + "public class Test {}") + .doTest(TEXT_MATCH); + } + + @Test + public void refactorEnumComment() { + mRefactoringHelper + .addInputLines( + REFACTORING_FILE, + "public enum Test {", + " /* Foo @hide */", + " FOO", + "}") + .addOutputLines( + REFACTORING_FILE, + "public enum Test {", + " /** Foo @hide */", + " FOO", + "}") + .doTest(TEXT_MATCH); + } + + @Test + public void canBeSuppressed() { + mCompilationHelper + .addSourceLines( + REFACTORING_FILE, + "public class Test {", + " /* Foo @hide */", + " @SuppressWarnings(\"AndroidHideInComments\")", + " void foo() {}", + "}") + .doTest(); + } + + @Test + public void isInJavadoc() { + mCompilationHelper + .addSourceLines( + REFACTORING_FILE, + "public class Test {", + " /** Foo @hide */", + " void foo() {}", + "}") + .doTest(); + } + + @Test + public void isInMultilineJavadoc() { + mCompilationHelper + .addSourceLines( + REFACTORING_FILE, + "public class Test {", + " /**", + " * Foo.", + " *", + " * @hide", + " */", + " void foo(int foo) {}", + "}") + .doTest(); + } + + @Test + public void noHidePresent() { + mCompilationHelper + .addSourceLines( + "test/" + REFACTORING_FILE, + "package test;", + "// Foo.", + "public class Test {", + " // Foo.", + " public int a;", + " /*", + " * Foo.", + " *", + " */", + " void foo(int foo) {}", + "}") + .doTest(); + } + +} diff --git a/graphics/java/android/graphics/ColorSpace.java b/graphics/java/android/graphics/ColorSpace.java index 2f978fc1fc2d..582488ff8de3 100644 --- a/graphics/java/android/graphics/ColorSpace.java +++ b/graphics/java/android/graphics/ColorSpace.java @@ -22,6 +22,10 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Size; import android.annotation.SuppressAutoDoc; +import android.annotation.SuppressLint; +import android.hardware.DataSpace; +import android.hardware.DataSpace.NamedDataSpace; +import android.util.SparseIntArray; import libcore.util.NativeAllocationRegistry; @@ -207,6 +211,7 @@ public abstract class ColorSpace { // See static initialization block next to #get(Named) private static final ColorSpace[] sNamedColorSpaces = new ColorSpace[Named.values().length]; + private static final SparseIntArray sDataToColorSpaces = new SparseIntArray(); @NonNull private final String mName; @NonNull private final Model mModel; @@ -1389,6 +1394,47 @@ public abstract class ColorSpace { } /** + * Create a {@link ColorSpace} object using a {@link android.hardware.DataSpace DataSpace} + * value. + * + * <p>This function maps from a dataspace to a {@link Named} ColorSpace. + * If no {@link Named} ColorSpace object matching the {@code dataSpace} value can be created, + * {@code null} will return.</p> + * + * @param dataSpace The dataspace value + * @return the ColorSpace object or {@code null} if no matching colorspace can be found. + */ + @SuppressLint("MethodNameUnits") + @Nullable + public static ColorSpace getFromDataSpace(@NamedDataSpace int dataSpace) { + int index = sDataToColorSpaces.get(dataSpace, -1); + if (index != -1) { + return ColorSpace.get(index); + } else { + return null; + } + } + + /** + * Retrieve the {@link android.hardware.DataSpace DataSpace} value from a {@link ColorSpace} + * object. + * + * <p>If this {@link ColorSpace} object has no matching {@code dataSpace} value, + * {@link android.hardware.DataSpace#DATASPACE_UNKNOWN DATASPACE_UNKNOWN} will return.</p> + * + * @return the dataspace value. + */ + @SuppressLint("MethodNameUnits") + public @NamedDataSpace int getDataSpace() { + int index = sDataToColorSpaces.indexOfValue(getId()); + if (index != -1) { + return sDataToColorSpaces.keyAt(index); + } else { + return DataSpace.DATASPACE_UNKNOWN; + } + } + + /** * <p>Returns an instance of {@link ColorSpace} identified by the specified * name. The list of names provided in the {@link Named} enum gives access * to a variety of common RGB color spaces.</p> @@ -1445,6 +1491,7 @@ public abstract class ColorSpace { SRGB_TRANSFER_PARAMETERS, Named.SRGB.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_SRGB, Named.SRGB.ordinal()); sNamedColorSpaces[Named.LINEAR_SRGB.ordinal()] = new ColorSpace.Rgb( "sRGB IEC61966-2.1 (Linear)", SRGB_PRIMARIES, @@ -1453,6 +1500,7 @@ public abstract class ColorSpace { 0.0f, 1.0f, Named.LINEAR_SRGB.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_SRGB_LINEAR, Named.LINEAR_SRGB.ordinal()); sNamedColorSpaces[Named.EXTENDED_SRGB.ordinal()] = new ColorSpace.Rgb( "scRGB-nl IEC 61966-2-2:2003", SRGB_PRIMARIES, @@ -1464,6 +1512,7 @@ public abstract class ColorSpace { SRGB_TRANSFER_PARAMETERS, Named.EXTENDED_SRGB.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_SCRGB, Named.EXTENDED_SRGB.ordinal()); sNamedColorSpaces[Named.LINEAR_EXTENDED_SRGB.ordinal()] = new ColorSpace.Rgb( "scRGB IEC 61966-2-2:2003", SRGB_PRIMARIES, @@ -1472,6 +1521,8 @@ public abstract class ColorSpace { -0.5f, 7.499f, Named.LINEAR_EXTENDED_SRGB.ordinal() ); + sDataToColorSpaces.put( + DataSpace.DATASPACE_SCRGB_LINEAR, Named.LINEAR_EXTENDED_SRGB.ordinal()); sNamedColorSpaces[Named.BT709.ordinal()] = new ColorSpace.Rgb( "Rec. ITU-R BT.709-5", new float[] { 0.640f, 0.330f, 0.300f, 0.600f, 0.150f, 0.060f }, @@ -1480,6 +1531,7 @@ public abstract class ColorSpace { new Rgb.TransferParameters(1 / 1.099, 0.099 / 1.099, 1 / 4.5, 0.081, 1 / 0.45), Named.BT709.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_BT709, Named.BT709.ordinal()); sNamedColorSpaces[Named.BT2020.ordinal()] = new ColorSpace.Rgb( "Rec. ITU-R BT.2020-1", new float[] { 0.708f, 0.292f, 0.170f, 0.797f, 0.131f, 0.046f }, @@ -1488,6 +1540,7 @@ public abstract class ColorSpace { new Rgb.TransferParameters(1 / 1.0993, 0.0993 / 1.0993, 1 / 4.5, 0.08145, 1 / 0.45), Named.BT2020.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_BT2020, Named.BT2020.ordinal()); sNamedColorSpaces[Named.DCI_P3.ordinal()] = new ColorSpace.Rgb( "SMPTE RP 431-2-2007 DCI (P3)", new float[] { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f }, @@ -1496,6 +1549,7 @@ public abstract class ColorSpace { 0.0f, 1.0f, Named.DCI_P3.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_DCI_P3, Named.DCI_P3.ordinal()); sNamedColorSpaces[Named.DISPLAY_P3.ordinal()] = new ColorSpace.Rgb( "Display P3", new float[] { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f }, @@ -1504,6 +1558,7 @@ public abstract class ColorSpace { SRGB_TRANSFER_PARAMETERS, Named.DISPLAY_P3.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_DISPLAY_P3, Named.DISPLAY_P3.ordinal()); sNamedColorSpaces[Named.NTSC_1953.ordinal()] = new ColorSpace.Rgb( "NTSC (1953)", NTSC_1953_PRIMARIES, @@ -1528,6 +1583,7 @@ public abstract class ColorSpace { 0.0f, 1.0f, Named.ADOBE_RGB.ordinal() ); + sDataToColorSpaces.put(DataSpace.DATASPACE_ADOBE_RGB, Named.ADOBE_RGB.ordinal()); sNamedColorSpaces[Named.PRO_PHOTO_RGB.ordinal()] = new ColorSpace.Rgb( "ROMM RGB ISO 22028-2:2013", new float[] { 0.7347f, 0.2653f, 0.1596f, 0.8404f, 0.0366f, 0.0001f }, diff --git a/graphics/java/android/graphics/text/LineBreakConfig.java b/graphics/java/android/graphics/text/LineBreakConfig.java index cffdf28dbc27..d083e444e996 100644 --- a/graphics/java/android/graphics/text/LineBreakConfig.java +++ b/graphics/java/android/graphics/text/LineBreakConfig.java @@ -26,7 +26,7 @@ import java.util.Objects; /** * Indicates the strategies can be used when calculating the text wrapping. * - * See <a href="https://drafts.csswg.org/css-text/#line-break-property">the line-break property</a> + * See <a href="https://www.w3.org/TR/css-text-3/#line-break-property">the line-break property</a> */ public final class LineBreakConfig { @@ -78,39 +78,96 @@ public final class LineBreakConfig { @Retention(RetentionPolicy.SOURCE) public @interface LineBreakWordStyle {} - private @LineBreakStyle int mLineBreakStyle = LINE_BREAK_STYLE_NONE; - private @LineBreakWordStyle int mLineBreakWordStyle = LINE_BREAK_WORD_STYLE_NONE; - - public LineBreakConfig() { + /** + * A builder for creating {@link LineBreakConfig}. + */ + public static final class Builder { + // The line break style for the LineBreakConfig. + private @LineBreakStyle int mLineBreakStyle = LineBreakConfig.LINE_BREAK_STYLE_NONE; + + // The line break word style for the LineBreakConfig. + private @LineBreakWordStyle int mLineBreakWordStyle = + LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE; + + /** + * Builder constructor with line break parameters. + */ + public Builder() { + } + + /** + * Set the line break style. + * + * @param lineBreakStyle the new line break style. + * @return this Builder + */ + public @NonNull Builder setLineBreakStyle(@LineBreakStyle int lineBreakStyle) { + mLineBreakStyle = lineBreakStyle; + return this; + } + + /** + * Set the line break word style. + * + * @param lineBreakWordStyle the new line break word style. + * @return this Builder + */ + public @NonNull Builder setLineBreakWordStyle(@LineBreakWordStyle int lineBreakWordStyle) { + mLineBreakWordStyle = lineBreakWordStyle; + return this; + } + + /** + * Build the {@link LineBreakConfig} + * + * @return the LineBreakConfig instance. + */ + public @NonNull LineBreakConfig build() { + return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle); + } } /** - * Set the line break configuration. + * Create the LineBreakConfig instance. * - * @param lineBreakConfig the new line break configuration. + * @param lineBreakStyle the line break style for text wrapping. + * @param lineBreakWordStyle the line break word style for text wrapping. + * @return the {@link LineBreakConfig} instance. + * @hide */ - public void set(@NonNull LineBreakConfig lineBreakConfig) { - Objects.requireNonNull(lineBreakConfig); - mLineBreakStyle = lineBreakConfig.getLineBreakStyle(); - mLineBreakWordStyle = lineBreakConfig.getLineBreakWordStyle(); + public static @NonNull LineBreakConfig getLineBreakConfig(@LineBreakStyle int lineBreakStyle, + @LineBreakWordStyle int lineBreakWordStyle) { + LineBreakConfig.Builder builder = new LineBreakConfig.Builder(); + return builder.setLineBreakStyle(lineBreakStyle) + .setLineBreakWordStyle(lineBreakWordStyle) + .build(); } + /** @hide */ + public static final LineBreakConfig NONE = + new Builder().setLineBreakStyle(LINE_BREAK_STYLE_NONE) + .setLineBreakWordStyle(LINE_BREAK_WORD_STYLE_NONE).build(); + + private final @LineBreakStyle int mLineBreakStyle; + private final @LineBreakWordStyle int mLineBreakWordStyle; + /** - * Get the line break style. - * - * @return The current line break style to be used for the text wrapping. + * Constructor with the line break parameters. + * Use the {@link LineBreakConfig.Builder} to create the LineBreakConfig instance. */ - public @LineBreakStyle int getLineBreakStyle() { - return mLineBreakStyle; + private LineBreakConfig(@LineBreakStyle int lineBreakStyle, + @LineBreakWordStyle int lineBreakWordStyle) { + mLineBreakStyle = lineBreakStyle; + mLineBreakWordStyle = lineBreakWordStyle; } /** - * Set the line break style. + * Get the line break style. * - * @param lineBreakStyle the new line break style. + * @return The current line break style to be used for the text wrapping. */ - public void setLineBreakStyle(@LineBreakStyle int lineBreakStyle) { - mLineBreakStyle = lineBreakStyle; + public @LineBreakStyle int getLineBreakStyle() { + return mLineBreakStyle; } /** @@ -122,15 +179,6 @@ public final class LineBreakConfig { return mLineBreakWordStyle; } - /** - * Set the line break word style. - * - * @param lineBreakWordStyle the new line break word style. - */ - public void setLineBreakWordStyle(@LineBreakWordStyle int lineBreakWordStyle) { - mLineBreakWordStyle = lineBreakWordStyle; - } - @Override public boolean equals(Object o) { if (o == null) return false; diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml index 88382d77ce35..2476f65c7e5b 100644 --- a/libs/WindowManager/Shell/res/values-af/strings.xml +++ b/libs/WindowManager/Shell/res/values-af/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerakwessies?\nTik om aan te pas"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nie opgelos nie?\nTik om terug te stel"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen kamerakwessies nie? Tik om toe te maak."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Sommige programme werk beter in portret"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Probeer een van hierdie opsies om jou spasie ten beste te benut"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Draai jou toestel om dit volskerm te maak"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dubbeltik langs ’n program om dit te herposisioneer"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Het dit"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-af/strings_tv.xml b/libs/WindowManager/Shell/res/values-af/strings_tv.xml index 1bfe128b0917..3a2bc1efd134 100644 --- a/libs/WindowManager/Shell/res/values-af/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-af/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Maak PIP toe"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Volskerm"</string> <string name="pip_move" msgid="1544227837964635439">"Skuif PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml index 20d081f2f547..f0c391cd6b99 100644 --- a/libs/WindowManager/Shell/res/values-am/strings.xml +++ b/libs/WindowManager/Shell/res/values-am/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"የካሜራ ችግሮች አሉ?\nዳግም ለማበጀት መታ ያድርጉ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"አልተስተካከለም?\nለማህደር መታ ያድርጉ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ምንም የካሜራ ችግሮች የሉም? ለማሰናበት መታ ያድርጉ።"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"አንዳንድ መተግበሪያዎች በቁም ፎቶ ውስጥ በተሻለ ሁኔታ ይሰራሉ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ቦታዎን በአግባቡ ለመጠቀም ከእነዚህ አማራጮች ውስጥ አንዱን ይሞክሩ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ወደ የሙሉ ገጽ ዕይታ ለመሄድ መሣሪያዎን ያሽከርክሩት"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ቦታውን ለመቀየር ከመተግበሪያው ቀጥሎ ላይ ሁለቴ መታ ያድርጉ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ገባኝ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-am/strings_tv.xml b/libs/WindowManager/Shell/res/values-am/strings_tv.xml index 456b4b83583a..23a33941349b 100644 --- a/libs/WindowManager/Shell/res/values-am/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-am/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIPን ዝጋ"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ሙሉ ማያ ገጽ"</string> <string name="pip_move" msgid="1544227837964635439">"ፒአይፒ ውሰድ"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml index b41e6421ae55..aa4b3b704110 100644 --- a/libs/WindowManager/Shell/res/values-ar/strings.xml +++ b/libs/WindowManager/Shell/res/values-ar/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"هل هناك مشاكل في الكاميرا؟\nانقر لإعادة الضبط."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ألم يتم حل المشكلة؟\nانقر للعودة"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"أليس هناك مشاكل في الكاميرا؟ انقر للإغلاق."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"تعمل بعض التطبيقات على أكمل وجه في الشاشات العمودية"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"جرِّب تنفيذ أحد هذه الخيارات للاستفادة من مساحتك إلى أقصى حد."</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"قم بتدوير الشاشة للانتقال إلى وضع ملء الشاشة."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"انقر مرتين بجانب التطبيق لتغيير موضعه."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"حسنًا"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ar/strings_tv.xml b/libs/WindowManager/Shell/res/values-ar/strings_tv.xml index 2546fe96d86a..f64528df06fd 100644 --- a/libs/WindowManager/Shell/res/values-ar/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ar/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"إغلاق PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ملء الشاشة"</string> <string name="pip_move" msgid="1544227837964635439">"نقل نافذة داخل النافذة (PIP)"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml index 663691fdc045..985d3b9b96fd 100644 --- a/libs/WindowManager/Shell/res/values-as/strings.xml +++ b/libs/WindowManager/Shell/res/values-as/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"কেমেৰাৰ কোনো সমস্যা হৈছে নেকি?\nপুনৰ খাপ খোৱাবলৈ টিপক"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এইটো সমাধান কৰা নাই নেকি?\nপূৰ্বাৱস্থালৈ নিবলৈ টিপক"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"কেমেৰাৰ কোনো সমস্যা নাই নেকি? অগ্ৰাহ্য কৰিবলৈ টিপক।"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"কিছুমান এপে প’ৰ্ট্ৰেইট ম’ডত বেছি ভালকৈ কাম কৰে"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"আপোনাৰ spaceৰ পৰা পাৰ্যমানে উপকৃত হ’বলৈ ইয়াৰে এটা বিকল্প চেষ্টা কৰি চাওক"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"পূৰ্ণ স্ক্ৰীনলৈ যাবলৈ আপোনাৰ ডিভাইচটো ঘূৰাওক"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"এপ্টোৰ স্থান সলনি কৰিবলৈ ইয়াৰ কাষত দুবাৰ টিপক"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"বুজি পালোঁ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-as/strings_tv.xml b/libs/WindowManager/Shell/res/values-as/strings_tv.xml index d17c1f3023a3..67d27a70b7a3 100644 --- a/libs/WindowManager/Shell/res/values-as/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-as/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"পিপ বন্ধ কৰক"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"সম্পূৰ্ণ স্ক্ৰীন"</string> <string name="pip_move" msgid="1544227837964635439">"পিপ স্থানান্তৰ কৰক"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml index 646aba89dd64..8cd9b7a635ab 100644 --- a/libs/WindowManager/Shell/res/values-az/strings.xml +++ b/libs/WindowManager/Shell/res/values-az/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera problemi var?\nBərpa etmək üçün toxunun"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Düzəltməmisiniz?\nGeri qaytarmaq üçün toxunun"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera problemi yoxdur? Qapatmaq üçün toxunun."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Bəzi tətbiqlər portret rejimində daha yaxşı işləyir"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Məkanınızdan maksimum yararlanmaq üçün bu seçimlərdən birini sınayın"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Tam ekrana keçmək üçün cihazınızı fırladın"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tətbiqin yerini dəyişmək üçün yanına iki dəfə toxunun"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Anladım"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-az/strings_tv.xml b/libs/WindowManager/Shell/res/values-az/strings_tv.xml index a5c47924e31a..670b02fa52c8 100644 --- a/libs/WindowManager/Shell/res/values-az/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-az/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP bağlayın"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Tam ekran"</string> <string name="pip_move" msgid="1544227837964635439">"PIP tətbiq edin"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP-ni genişləndirin"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP-ni yığcamlaşdırın"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml index 2ebdf926b357..49524c608543 100644 --- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml +++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Imate problema sa kamerom?\nDodirnite da biste ponovo uklopili"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije rešen?\nDodirnite da biste vratili"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema sa kamerom? Dodirnite da biste odbacili."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Neke aplikacije najbolje funkcionišu u uspravnom režimu"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Isprobajte jednu od ovih opcija da biste na najbolji način iskoristili prostor"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotirajte uređaj za prikaz preko celog ekrana"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da biste promenili njenu poziciju"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Važi"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings_tv.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings_tv.xml index b4d9bd17b5fe..9bc22eb63632 100644 --- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zatvori PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Ceo ekran"</string> <string name="pip_move" msgid="1544227837964635439">"Premesti sliku u slici"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml index 157e16895148..1767e0d66241 100644 --- a/libs/WindowManager/Shell/res/values-be/strings.xml +++ b/libs/WindowManager/Shell/res/values-be/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Праблемы з камерай?\nНацісніце, каб пераабсталяваць"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не ўдалося выправіць?\nНацісніце, каб аднавіць"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ніякіх праблем з камерай? Націсніце, каб адхіліць."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Некаторыя праграмы лепш за ўсё працуюць у кніжнай арыентацыі"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Каб эфектыўна выкарыстоўваць прастору, паспрабуйце адзін з гэтых варыянтаў"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Каб перайсці ў поўнаэкранны рэжым, павярніце прыладу"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Двойчы націсніце побач з праграмай, каб перамясціць яе"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Зразумела"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-be/strings_tv.xml b/libs/WindowManager/Shell/res/values-be/strings_tv.xml index 514d06b5b179..a85232da4047 100644 --- a/libs/WindowManager/Shell/res/values-be/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-be/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Закрыць PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Поўнаэкранны рэжым"</string> <string name="pip_move" msgid="1544227837964635439">"Перамясціць PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml index 4ed8672db152..c22fb86a4d4d 100644 --- a/libs/WindowManager/Shell/res/values-bg/strings.xml +++ b/libs/WindowManager/Shell/res/values-bg/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблеми с камерата?\nДокоснете за ремонтиране"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблемът не се отстрани?\nДокоснете за връщане в предишното състояние"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нямате проблеми с камерата? Докоснете, за да отхвърлите."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Някои приложения работят най-добре във вертикален режим"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Изпробвайте една от следните опции, за да се възползвате максимално от мястото на екрана"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Завъртете екрана си, за да преминете в режим на цял екран"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Докоснете два пъти дадено приложение, за да промените позицията му"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Разбрах"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-bg/strings_tv.xml b/libs/WindowManager/Shell/res/values-bg/strings_tv.xml index 19f83e71ea44..961489ffe335 100644 --- a/libs/WindowManager/Shell/res/values-bg/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-bg/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Затваряне на PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Цял екран"</string> <string name="pip_move" msgid="1544227837964635439">"„Картина в картина“: Преместв."</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml index 7579fac0ff06..c0944e0584e6 100644 --- a/libs/WindowManager/Shell/res/values-bn/strings.xml +++ b/libs/WindowManager/Shell/res/values-bn/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ক্যামেরা সংক্রান্ত সমস্যা?\nরিফিট করতে ট্যাপ করুন"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এখনও সমাধান হয়নি?\nরিভার্ট করার জন্য ট্যাপ করুন"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ক্যামেরা সংক্রান্ত সমস্যা নেই? বাতিল করতে ট্যাপ করুন।"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"কিছু অ্যাপ \'পোর্ট্রেট\' মোডে সবচেয়ে ভাল কাজ করে"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"আপনার স্পেস সবচেয়ে ভালভাবে কাজে লাগাতে এইসব বিকল্পের মধ্যে কোনও একটি ব্যবহার করে দেখুন"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"\'ফুল স্ক্রিন\' মোডে যেতে ডিভাইস ঘোরান"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"কোনও অ্যাপের পাশে ডবল ট্যাপ করে সেটির জায়গা পরিবর্তন করুন"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"বুঝেছি"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-bn/strings_tv.xml b/libs/WindowManager/Shell/res/values-bn/strings_tv.xml index 5f90eeb35a3f..a8880dca1f1b 100644 --- a/libs/WindowManager/Shell/res/values-bn/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-bn/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP বন্ধ করুন"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"পূর্ণ স্ক্রিন"</string> <string name="pip_move" msgid="1544227837964635439">"PIP সরান"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml index 7b08d035c7f2..ae01c641cc43 100644 --- a/libs/WindowManager/Shell/res/values-bs/strings.xml +++ b/libs/WindowManager/Shell/res/values-bs/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s kamerom?\nDodirnite da ponovo namjestite"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nije popravljeno?\nDodirnite da vratite"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nema problema s kamerom? Dodirnite da odbacite."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Određene aplikacije najbolje funkcioniraju u uspravnom načinu rada"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Isprobajte jednu od ovih opcija da maksimalno iskoristite prostor"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zarotirajte uređaj da aktivirate prikaz preko cijelog ekrana"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da promijenite njen položaj"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Razumijem"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-bs/strings_tv.xml b/libs/WindowManager/Shell/res/values-bs/strings_tv.xml index 3f2adf3600d7..654ab69ca31a 100644 --- a/libs/WindowManager/Shell/res/values-bs/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-bs/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zatvori sliku u slici"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Cijeli ekran"</string> <string name="pip_move" msgid="1544227837964635439">"Pokreni sliku u slici"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml index 44429cc582db..2ec1db4e990b 100644 --- a/libs/WindowManager/Shell/res/values-ca/strings.xml +++ b/libs/WindowManager/Shell/res/values-ca/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tens problemes amb la càmera?\nToca per resoldre\'ls"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"El problema no s\'ha resolt?\nToca per desfer els canvis"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No tens cap problema amb la càmera? Toca per ignorar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Algunes aplicacions funcionen millor en posició vertical"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prova una d\'aquestes opcions per treure el màxim profit de l\'espai"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gira el dispositiu per passar a pantalla completa"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Fes doble toc al costat d\'una aplicació per canviar-ne la posició"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entesos"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ca/strings_tv.xml b/libs/WindowManager/Shell/res/values-ca/strings_tv.xml index db750c49884e..43cc070374ba 100644 --- a/libs/WindowManager/Shell/res/values-ca/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ca/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Tanca PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pantalla completa"</string> <string name="pip_move" msgid="1544227837964635439">"Mou pantalla en pantalla"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml index d6e7136abb07..d0cf80aef38c 100644 --- a/libs/WindowManager/Shell/res/values-cs/strings.xml +++ b/libs/WindowManager/Shell/res/values-cs/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s fotoaparátem?\nKlepnutím vyřešíte"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepomohlo to?\nKlepnutím se vrátíte"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Žádné problémy s fotoaparátem? Klepnutím zavřete."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Některé aplikace fungují nejlépe na výšku"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Pokud chcete maximálně využít prostor, vyzkoušejte jednu z těchto možností"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Otočením zařízení přejděte do režimu celé obrazovky"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvojitým klepnutím vedle aplikace změňte její umístění"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-cs/strings_tv.xml b/libs/WindowManager/Shell/res/values-cs/strings_tv.xml index cef0b9951363..772d77ea8004 100644 --- a/libs/WindowManager/Shell/res/values-cs/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-cs/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Ukončit obraz v obraze (PIP)"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Celá obrazovka"</string> <string name="pip_move" msgid="1544227837964635439">"Přesunout PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml index e7b8e73b7385..bb81c10c6e1b 100644 --- a/libs/WindowManager/Shell/res/values-da/strings.xml +++ b/libs/WindowManager/Shell/res/values-da/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du problemer med dit kamera?\nTryk for at gendanne det oprindelige format"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Løste det ikke problemet?\nTryk for at fortryde"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen problemer med dit kamera? Tryk for at afvise."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Nogle apps fungerer bedst i stående format"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prøv én af disse muligheder for at få mest muligt ud af dit rum"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Drej din enhed for at gå til fuld skærm"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tryk to gange ud for en app for at ændre dens placering"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-da/strings_tv.xml b/libs/WindowManager/Shell/res/values-da/strings_tv.xml index 23305309098d..2f3b359f40e5 100644 --- a/libs/WindowManager/Shell/res/values-da/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-da/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Luk integreret billede"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Fuld skærm"</string> <string name="pip_move" msgid="1544227837964635439">"Flyt PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Udvid PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Skjul PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml index 57af696cacb1..3a1107939c9f 100644 --- a/libs/WindowManager/Shell/res/values-de/strings.xml +++ b/libs/WindowManager/Shell/res/values-de/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Probleme mit der Kamera?\nZum Anpassen tippen."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Das Problem ist nicht behoben?\nZum Rückgängigmachen tippen."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Keine Probleme mit der Kamera? Zum Schließen tippen."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Einige Apps funktionieren am besten im Hochformat"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Mithilfe dieser Möglichkeiten kannst du dein Display optimal nutzen"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gerät drehen, um zum Vollbildmodus zu wechseln"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Neben einer App doppeltippen, um die Position zu ändern"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ok"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-de/strings_tv.xml b/libs/WindowManager/Shell/res/values-de/strings_tv.xml index 8da9110f5e03..3305a2158af0 100644 --- a/libs/WindowManager/Shell/res/values-de/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-de/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP schließen"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Vollbild"</string> <string name="pip_move" msgid="1544227837964635439">"BiB verschieben"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml index 873b3299dcf1..70f55058925c 100644 --- a/libs/WindowManager/Shell/res/values-el/strings.xml +++ b/libs/WindowManager/Shell/res/values-el/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Προβλήματα με την κάμερα;\nΠατήστε για επιδιόρθωση."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Δεν διορθώθηκε;\nΠατήστε για επαναφορά."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Δεν αντιμετωπίζετε προβλήματα με την κάμερα; Πατήστε για παράβλεψη."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Ορισμένες εφαρμογές λειτουργούν καλύτερα σε κατακόρυφο προσανατολισμό"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Δοκιμάστε μία από αυτές τις επιλογές για να αξιοποιήσετε στο έπακρο τον χώρο σας."</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Περιστρέψτε τη συσκευή σας για μετάβαση σε πλήρη οθόνη."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Πατήστε δύο φορές δίπλα σε μια εφαρμογή για να αλλάξετε τη θέση της."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Το κατάλαβα"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-el/strings_tv.xml b/libs/WindowManager/Shell/res/values-el/strings_tv.xml index df35113a8752..cf6e077bf14f 100644 --- a/libs/WindowManager/Shell/res/values-el/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-el/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Κλείσιμο PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Πλήρης οθόνη"</string> <string name="pip_move" msgid="1544227837964635439">"Μετακίνηση PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml index da4933b18a8f..0b5aefa5c72e 100644 --- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Some apps work best in portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Try one of these options to make the most of your space"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings_tv.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings_tv.xml index 1fb319196bef..79a8b95263f2 100644 --- a/libs/WindowManager/Shell/res/values-en-rAU/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-en-rAU/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Close PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Move PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expand PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Collapse PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml index da4933b18a8f..0b5aefa5c72e 100644 --- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Some apps work best in portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Try one of these options to make the most of your space"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings_tv.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings_tv.xml index 1fb319196bef..79a8b95263f2 100644 --- a/libs/WindowManager/Shell/res/values-en-rCA/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-en-rCA/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Close PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Move PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expand PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Collapse PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml index da4933b18a8f..0b5aefa5c72e 100644 --- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Some apps work best in portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Try one of these options to make the most of your space"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings_tv.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings_tv.xml index 1fb319196bef..79a8b95263f2 100644 --- a/libs/WindowManager/Shell/res/values-en-rGB/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-en-rGB/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Close PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Move PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expand PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Collapse PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml index da4933b18a8f..0b5aefa5c72e 100644 --- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Some apps work best in portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Try one of these options to make the most of your space"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings_tv.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings_tv.xml index 1fb319196bef..79a8b95263f2 100644 --- a/libs/WindowManager/Shell/res/values-en-rIN/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-en-rIN/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Close PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Move PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expand PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Collapse PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-en-rXC/strings_tv.xml b/libs/WindowManager/Shell/res/values-en-rXC/strings_tv.xml index 3b12d90f33a2..8925f183188c 100644 --- a/libs/WindowManager/Shell/res/values-en-rXC/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-en-rXC/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Close PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Move PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expand PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Collapse PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml index 154c7abae42d..e523ae53b0cc 100644 --- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml +++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Tienes problemas con la cámara?\nPresiona para reajustarla"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se resolvió?\nPresiona para revertir los cambios"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No tienes problemas con la cámara? Presionar para descartar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Algunas apps funcionan mejor en modo vertical"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prueba estas opciones para aprovechar al máximo tu espacio"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rota el dispositivo para ver la pantalla completa"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Presiona dos veces junto a una app para cambiar su posición"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings_tv.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings_tv.xml index 1beb0b5b6255..f901c63580cf 100644 --- a/libs/WindowManager/Shell/res/values-es-rUS/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-es-rUS/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Cerrar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pantalla completa"</string> <string name="pip_move" msgid="1544227837964635439">"Mover PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml index e2fa3a0376e0..974960708190 100644 --- a/libs/WindowManager/Shell/res/values-es/strings.xml +++ b/libs/WindowManager/Shell/res/values-es/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Problemas con la cámara?\nToca para reajustar"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se ha solucionado?\nToca para revertir"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No hay problemas con la cámara? Toca para cerrar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Algunas aplicaciones funcionan mejor en vertical"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prueba una de estas opciones para sacar el máximo partido al espacio de tu pantalla"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gira el dispositivo para ir al modo de pantalla completa"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toca dos veces junto a una aplicación para cambiar su posición"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-es/strings_tv.xml b/libs/WindowManager/Shell/res/values-es/strings_tv.xml index d042b43c8ce8..3aec3a72b16d 100644 --- a/libs/WindowManager/Shell/res/values-es/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-es/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Cerrar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pantalla completa"</string> <string name="pip_move" msgid="1544227837964635439">"Mover imagen en imagen"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml index da33f4d60d2a..a5f82a6452c4 100644 --- a/libs/WindowManager/Shell/res/values-et/strings.xml +++ b/libs/WindowManager/Shell/res/values-et/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kas teil on kaameraprobleeme?\nPuudutage ümberpaigutamiseks."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Kas probleemi ei lahendatud?\nPuudutage ennistamiseks."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kas kaameraprobleeme pole? Puudutage loobumiseks."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Mõni rakendus töötab kõige paremini vertikaalpaigutuses"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Proovige ühte neist valikutest, et oma ruumi parimal moel kasutada"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pöörake seadet, et aktiveerida täisekraanirežiim"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Topeltpuudutage rakenduse kõrval, et selle asendit muuta"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Selge"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-et/strings_tv.xml b/libs/WindowManager/Shell/res/values-et/strings_tv.xml index 3da16db9e196..51f8dfd348d0 100644 --- a/libs/WindowManager/Shell/res/values-et/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-et/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Sule PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Täisekraan"</string> <string name="pip_move" msgid="1544227837964635439">"Teisalda PIP-režiimi"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml index e0dd3ca2c9e3..caa335a96222 100644 --- a/libs/WindowManager/Shell/res/values-eu/strings.xml +++ b/libs/WindowManager/Shell/res/values-eu/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Arazoak dauzkazu kamerarekin?\nBerriro doitzeko, sakatu hau."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ez al da konpondu?\nLeheneratzeko, sakatu hau."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ez daukazu arazorik kamerarekin? Baztertzeko, sakatu hau."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Aplikazio batzuk orientazio bertikalean funtzionatzen dute hobekien"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Pantailako eremuari ahalik eta etekinik handiena ateratzeko, probatu aukera hauetakoren bat"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pantaila osoko modua erabiltzeko, biratu gailua"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Aplikazioaren posizioa aldatzeko, sakatu birritan haren ondoko edozein toki"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ados"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-eu/strings_tv.xml b/libs/WindowManager/Shell/res/values-eu/strings_tv.xml index e4b57baf1e5f..b718791bb0d6 100644 --- a/libs/WindowManager/Shell/res/values-eu/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-eu/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Itxi PIPa"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pantaila osoa"</string> <string name="pip_move" msgid="1544227837964635439">"Mugitu pantaila txiki gainjarria"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml index 6fcb5ee7ad6d..9e7257112c6c 100644 --- a/libs/WindowManager/Shell/res/values-fa/strings.xml +++ b/libs/WindowManager/Shell/res/values-fa/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"دوربین مشکل دارد؟\nبرای تنظیم مجدد اندازه ضربه بزنید"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"مشکل برطرف نشد؟\nبرای برگرداندن ضربه بزنید"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"دوربین مشکلی ندارد؟ برای بستن ضربه بزنید."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"برخیاز برنامهها در حالت عمودی عملکرد بهتری دارند"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"با امتحان کردن یکی از این گزینهها، بیشترین بهره را از فضایتان ببرید"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"برای رفتن به حالت تمام صفحه، دستگاهتان را بچرخانید"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"در کنار برنامه دوضربه بزنید تا جابهجا شود"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"متوجهام"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-fa/strings_tv.xml b/libs/WindowManager/Shell/res/values-fa/strings_tv.xml index aaab34f807db..9fca855a8551 100644 --- a/libs/WindowManager/Shell/res/values-fa/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-fa/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"بستن PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"تمام صفحه"</string> <string name="pip_move" msgid="1544227837964635439">"انتقال PIP (تصویر در تصویر)"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml index fc51ad4598b7..c809b4879e71 100644 --- a/libs/WindowManager/Shell/res/values-fi/strings.xml +++ b/libs/WindowManager/Shell/res/values-fi/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Onko kameran kanssa ongelmia?\nKorjaa napauttamalla"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Eikö ongelma ratkennut?\nKumoa napauttamalla"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ei ongelmia kameran kanssa? Hylkää napauttamalla."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Osa sovelluksista toimii parhaiten pystytilassa"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Kokeile jotakin näistä vaihtoehdoista, jotta saat parhaan hyödyn näytön tilasta"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Käännä laitetta, niin se siirtyy koko näytön tilaan"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Kaksoisnapauta sovellusta, jos haluat siirtää sitä"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-fi/strings_tv.xml b/libs/WindowManager/Shell/res/values-fi/strings_tv.xml index 21c64633fac1..b40faf149f9d 100644 --- a/libs/WindowManager/Shell/res/values-fi/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-fi/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Sulje PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Koko näyttö"</string> <string name="pip_move" msgid="1544227837964635439">"Siirrä PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml index 43fad3a69f4d..62b2bb65a603 100644 --- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo?\nTouchez pour réajuster"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu?\nTouchez pour rétablir"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo? Touchez pour ignorer."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Certaines applications fonctionnent mieux en mode portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Essayez l\'une de ces options pour tirer le meilleur parti de votre espace"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Faites pivoter votre appareil pour passer en plein écran"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Touchez deux fois à côté d\'une application pour la repositionner"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings_tv.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings_tv.xml index f4baaad13999..c1d8bb50c743 100644 --- a/libs/WindowManager/Shell/res/values-fr-rCA/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Fermer mode IDI"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Plein écran"</string> <string name="pip_move" msgid="1544227837964635439">"Déplacer l\'image incrustée"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml index 8b8cc090eee5..b3e22af0a3e3 100644 --- a/libs/WindowManager/Shell/res/values-fr/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo ?\nAppuyez pour réajuster"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu ?\nAppuyez pour rétablir"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo ? Appuyez pour ignorer."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Certaines applis fonctionnent mieux en mode Portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Essayez l\'une de ces options pour exploiter pleinement l\'espace"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Faites pivoter l\'appareil pour passer en plein écran"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Appuyez deux fois à côté d\'une appli pour la repositionner"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-fr/strings_tv.xml b/libs/WindowManager/Shell/res/values-fr/strings_tv.xml index 6ad8174db796..969446e6433a 100644 --- a/libs/WindowManager/Shell/res/values-fr/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-fr/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Fermer mode PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Plein écran"</string> <string name="pip_move" msgid="1544227837964635439">"Déplacer le PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml index 9bc9d9338030..b8e039602243 100644 --- a/libs/WindowManager/Shell/res/values-gl/strings.xml +++ b/libs/WindowManager/Shell/res/values-gl/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tes problemas coa cámara?\nToca para reaxustala"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Non se solucionaron os problemas?\nToca para reverter o seu tratamento"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Non hai problemas coa cámara? Tocar para ignorar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Algunhas aplicacións funcionan mellor en modo vertical"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Proba unha destas opcións para sacar o máximo proveito do espazo da pantalla"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Xira o dispositivo para ver o contido en pantalla completa"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toca dúas veces a carón dunha aplicación para cambiala de posición"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-gl/strings_tv.xml b/libs/WindowManager/Shell/res/values-gl/strings_tv.xml index dcb8709d010e..3a3d9d6e8484 100644 --- a/libs/WindowManager/Shell/res/values-gl/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-gl/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Pechar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pantalla completa"</string> <string name="pip_move" msgid="1544227837964635439">"Mover pantalla superposta"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml index 032b591de660..deda2d755e20 100644 --- a/libs/WindowManager/Shell/res/values-gu/strings.xml +++ b/libs/WindowManager/Shell/res/values-gu/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"કૅમેરામાં સમસ્યાઓ છે?\nફરીથી ફિટ કરવા માટે ટૅપ કરો"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"સુધારો નથી થયો?\nપહેલાંના પર પાછું ફેરવવા માટે ટૅપ કરો"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"કૅમેરામાં કોઈ સમસ્યા નથી? છોડી દેવા માટે ટૅપ કરો."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"અમુક ઍપ પોર્ટ્રેટ મોડમાં શ્રેષ્ઠ રીતે કાર્ય કરે છે"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"તમારી સ્પેસનો વધુને વધુ લાભ લેવા માટે, આ વિકલ્પોમાંથી કોઈ એક અજમાવો"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"પૂર્ણ સ્ક્રીન મોડ લાગુ કરવા માટે, તમારા ડિવાઇસને ફેરવો"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"કોઈ ઍપની જગ્યા બદલવા માટે, તેની બાજુમાં બે વાર ટૅપ કરો"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"સમજાઈ ગયું"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-gu/strings_tv.xml b/libs/WindowManager/Shell/res/values-gu/strings_tv.xml index ed815caaed0f..0851127c1eb4 100644 --- a/libs/WindowManager/Shell/res/values-gu/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-gu/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP બંધ કરો"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"પૂર્ણ સ્ક્રીન"</string> <string name="pip_move" msgid="1544227837964635439">"PIP ખસેડો"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml index 72fd65ce55fd..36b11514c7e5 100644 --- a/libs/WindowManager/Shell/res/values-hi/strings.xml +++ b/libs/WindowManager/Shell/res/values-hi/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्या कैमरे से जुड़ी कोई समस्या है?\nफिर से फ़िट करने के लिए टैप करें"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"क्या समस्या ठीक नहीं हुई?\nपहले जैसा करने के लिए टैप करें"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्या कैमरे से जुड़ी कोई समस्या नहीं है? खारिज करने के लिए टैप करें."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"कुछ ऐप्लिकेशन, पोर्ट्रेट मोड में सबसे अच्छी तरह काम करते हैं"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"जगह का पूरा इस्तेमाल करने के लिए, इनमें से किसी एक विकल्प को आज़माएं"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"फ़ुल स्क्रीन मोड में जाने के लिए, डिवाइस को घुमाएं"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"किसी ऐप्लिकेशन की जगह बदलने के लिए, उसके बगल में दो बार टैप करें"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ठीक है"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-hi/strings_tv.xml b/libs/WindowManager/Shell/res/values-hi/strings_tv.xml index 8bcc631b39a2..f94f48570542 100644 --- a/libs/WindowManager/Shell/res/values-hi/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-hi/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP बंद करें"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"फ़ुल स्क्रीन"</string> <string name="pip_move" msgid="1544227837964635439">"पीआईपी को दूसरी जगह लेकर जाएं"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml index 5315558ea855..5ecc5585a6e9 100644 --- a/libs/WindowManager/Shell/res/values-hr/strings.xml +++ b/libs/WindowManager/Shell/res/values-hr/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s fotoaparatom?\nDodirnite za popravak"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije riješen?\nDodirnite za vraćanje"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema s fotoaparatom? Dodirnite za odbacivanje."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Neke aplikacije najbolje funkcioniraju u portretnom usmjerenju"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Isprobajte jednu od ovih opcija da biste maksimalno iskoristili prostor"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zakrenite uređaj radi prikaza na cijelom zaslonu"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da biste joj promijenili položaj"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Shvaćam"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-hr/strings_tv.xml b/libs/WindowManager/Shell/res/values-hr/strings_tv.xml index 49b7ae0d7681..ef2f7cabe5a9 100644 --- a/libs/WindowManager/Shell/res/values-hr/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-hr/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zatvori PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Cijeli zaslon"</string> <string name="pip_move" msgid="1544227837964635439">"Premjesti PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml index 01671c9ba1d5..2295250e2853 100644 --- a/libs/WindowManager/Shell/res/values-hu/strings.xml +++ b/libs/WindowManager/Shell/res/values-hu/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerával kapcsolatos problémába ütközött?\nKoppintson a megoldáshoz."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nem sikerült a hiba kijavítása?\nKoppintson a visszaállításhoz."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nincsenek problémái kamerával? Koppintson az elvetéshez."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Egyes alkalmazások álló tájolásban működnek a leghatékonyabban"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Próbálja ki az alábbi beállítások egyikét, hogy a legjobban ki tudja használni képernyő területét"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"A teljes képernyős mód elindításához forgassa el az eszközt"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Koppintson duplán az alkalmazás mellett az áthelyezéséhez"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Értem"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-hu/strings_tv.xml b/libs/WindowManager/Shell/res/values-hu/strings_tv.xml index 484db0cac067..02d86fab18c6 100644 --- a/libs/WindowManager/Shell/res/values-hu/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-hu/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP bezárása"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Teljes képernyő"</string> <string name="pip_move" msgid="1544227837964635439">"PIP áthelyezése"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml index 459cd0a6403c..208936539094 100644 --- a/libs/WindowManager/Shell/res/values-hy/strings.xml +++ b/libs/WindowManager/Shell/res/values-hy/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Տեսախցիկի հետ կապված խնդիրնե՞ր կան։\nՀպեք՝ վերակարգավորելու համար։"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Չհաջողվե՞ց շտկել։\nՀպեք՝ փոփոխությունները չեղարկելու համար։"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Տեսախցիկի հետ կապված խնդիրներ չկա՞ն։ Փակելու համար հպեք։"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Որոշ հավելվածներ լավագույնս աշխատում են դիմանկարի ռեժիմում"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Փորձեք այս տարբերակներից մեկը՝ տարածքը հնարավորինս արդյունավետ օգտագործելու համար"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Պտտեք սարքը՝ լիաէկրան ռեժիմին անցնելու համար"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Կրկնակի հպեք հավելվածի կողքին՝ այն տեղափոխելու համար"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Եղավ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-hy/strings_tv.xml b/libs/WindowManager/Shell/res/values-hy/strings_tv.xml index e447ffc0d964..0a040e7f95be 100644 --- a/libs/WindowManager/Shell/res/values-hy/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-hy/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Փակել PIP-ն"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Լիէկրան"</string> <string name="pip_move" msgid="1544227837964635439">"Տեղափոխել PIP-ը"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml index e5b7421bb97a..1b46b2fe2570 100644 --- a/libs/WindowManager/Shell/res/values-in/strings.xml +++ b/libs/WindowManager/Shell/res/values-in/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Masalah kamera?\nKetuk untuk memperbaiki"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tidak dapat diperbaiki?\nKetuk untuk mengembalikan"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tidak ada masalah kamera? Ketuk untuk menutup."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Beberapa aplikasi berfungsi paling baik dalam mode potret"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Coba salah satu opsi berikut untuk mengoptimalkan area layar Anda"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Putar perangkat untuk tampilan layar penuh"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ketuk dua kali di samping aplikasi untuk mengubah posisinya"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Oke"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-in/strings_tv.xml b/libs/WindowManager/Shell/res/values-in/strings_tv.xml index b63170564734..89d89292ad86 100644 --- a/libs/WindowManager/Shell/res/values-in/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-in/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Tutup PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Layar penuh"</string> <string name="pip_move" msgid="1544227837964635439">"Pindahkan PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml index 1bfec2b9840b..a201c95137f3 100644 --- a/libs/WindowManager/Shell/res/values-is/strings.xml +++ b/libs/WindowManager/Shell/res/values-is/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Myndavélavesen?\nÝttu til að breyta stærð"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ennþá vesen?\nÝttu til að afturkalla"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ekkert myndavélavesen? Ýttu til að hunsa."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Sum forrit virka best í skammsniði"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prófaðu einhvern af eftirfarandi valkostum til að nýta plássið sem best"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Snúðu tækinu til að nota allan skjáinn"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ýttu tvisvar við hlið forritsins til að færa það"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ég skil"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-is/strings_tv.xml b/libs/WindowManager/Shell/res/values-is/strings_tv.xml index 119ecf088c20..6264927f9a23 100644 --- a/libs/WindowManager/Shell/res/values-is/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-is/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Loka mynd í mynd"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Allur skjárinn"</string> <string name="pip_move" msgid="1544227837964635439">"Færa innfellda mynd"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml index ebdf44b70551..dd5416f2e398 100644 --- a/libs/WindowManager/Shell/res/values-it/strings.xml +++ b/libs/WindowManager/Shell/res/values-it/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi con la fotocamera?\nTocca per risolverli"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Il problema non si è risolto?\nTocca per ripristinare"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nessun problema con la fotocamera? Tocca per ignorare."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Alcune app funzionano in modo ottimale in verticale"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prova una di queste opzioni per ottimizzare lo spazio a tua disposizione"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ruota il dispositivo per passare alla modalità a schermo intero"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tocca due volte accanto a un\'app per riposizionarla"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-it/strings_tv.xml b/libs/WindowManager/Shell/res/values-it/strings_tv.xml index 92f015c387a0..638da3804a64 100644 --- a/libs/WindowManager/Shell/res/values-it/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-it/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Chiudi PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Schermo intero"</string> <string name="pip_move" msgid="1544227837964635439">"Sposta PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml index 3a0f72b1597c..52a6b0676222 100644 --- a/libs/WindowManager/Shell/res/values-iw/strings.xml +++ b/libs/WindowManager/Shell/res/values-iw/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"בעיות במצלמה?\nאפשר להקיש כדי לבצע התאמה מחדש"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"הבעיה לא נפתרה?\nאפשר להקיש כדי לחזור לגרסה הקודמת"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"אין בעיות במצלמה? אפשר להקיש כדי לסגור."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"חלק מהאפליקציות פועלות בצורה הטובה ביותר במצב תצוגה לאורך"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"כדי להפיק את המרב משטח המסך, ניתן לנסות את אחת מהאפשרויות האלה"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"מסובבים את המכשיר כדי לעבור לתצוגה במסך מלא"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"מקישים הקשה כפולה ליד אפליקציה כדי למקם אותה מחדש"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"הבנתי"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-iw/strings_tv.xml b/libs/WindowManager/Shell/res/values-iw/strings_tv.xml index d09b850d01d8..906c69bef285 100644 --- a/libs/WindowManager/Shell/res/values-iw/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-iw/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"סגירת PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"מסך מלא"</string> <string name="pip_move" msgid="1544227837964635439">"העברת תמונה בתוך תמונה (PIP)"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml index 7b3ad248362d..5a25c24ba034 100644 --- a/libs/WindowManager/Shell/res/values-ja/strings.xml +++ b/libs/WindowManager/Shell/res/values-ja/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"カメラに関する問題の場合は、\nタップすると修正できます"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"修正されなかった場合は、\nタップすると元に戻ります"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"カメラに関する問題でない場合は、タップすると閉じます。"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"アプリによっては縦向きにすると正常に動作します"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"スペースを最大限に活用するには、以下の方法のいずれかをお試しください"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"全画面表示にするにはデバイスを回転させてください"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"位置を変えるにはアプリの横をダブルタップしてください"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ja/strings_tv.xml b/libs/WindowManager/Shell/res/values-ja/strings_tv.xml index d6399e537894..9b166e0a862b 100644 --- a/libs/WindowManager/Shell/res/values-ja/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ja/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP を閉じる"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"全画面表示"</string> <string name="pip_move" msgid="1544227837964635439">"PIP を移動"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml index 07ee0f9910f7..bff86fa6ffe2 100644 --- a/libs/WindowManager/Shell/res/values-ka/strings.xml +++ b/libs/WindowManager/Shell/res/values-ka/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"კამერად პრობლემები აქვს?\nშეეხეთ გამოსასწორებლად"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"არ გამოსწორდა?\nშეეხეთ წინა ვერსიის დასაბრუნებლად"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"კამერას პრობლემები არ აქვს? შეეხეთ უარყოფისთვის."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"ზოგიერთი აპი უკეთ მუშაობს პორტრეტის რეჟიმში"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"გამოცადეთ ამ ვარიანტებიდან ერთ-ერთი, რათა მაქსიმალურად ისარგებლოთ თქვენი მეხსიერებით"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"მოატრიალეთ თქვენი მოწყობილობა სრული ეკრანის გასაშლელად"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ორმაგად შეეხეთ აპის გვერდითა სივრცეს, რათა ის სხვაგან გადაიტანოთ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"გასაგებია"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ka/strings_tv.xml b/libs/WindowManager/Shell/res/values-ka/strings_tv.xml index 8d7bee8f1398..025e5a554de1 100644 --- a/libs/WindowManager/Shell/res/values-ka/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ka/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP-ის დახურვა"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"სრულ ეკრანზე"</string> <string name="pip_move" msgid="1544227837964635439">"PIP გადატანა"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP-ის გაშლა"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP-ის ჩაკეცვა"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml index bdaa03eb5943..f57f3f581c85 100644 --- a/libs/WindowManager/Shell/res/values-kk/strings.xml +++ b/libs/WindowManager/Shell/res/values-kk/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада қателер шықты ма?\nЖөндеу үшін түртіңіз."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Жөнделмеді ме?\nҚайтару үшін түртіңіз."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада қателер шықпады ма? Жабу үшін түртіңіз."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Кейбір қолданба портреттік режимде жақсы жұмыс істейді"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Экранды тиімді пайдалану үшін мына опциялардың бірін байқап көріңіз."</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Толық экранға ауысу үшін құрылғыңызды бұрыңыз."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Қолданбаның орнын ауыстыру үшін жанынан екі рет түртіңіз."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Түсінікті"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-kk/strings_tv.xml b/libs/WindowManager/Shell/res/values-kk/strings_tv.xml index 05bdcc71f293..5ad60efd171f 100644 --- a/libs/WindowManager/Shell/res/values-kk/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-kk/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP жабу"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Толық экран"</string> <string name="pip_move" msgid="1544227837964635439">"PIP клипін жылжыту"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml index 2654765c22d9..5c04f881fe0e 100644 --- a/libs/WindowManager/Shell/res/values-km/strings.xml +++ b/libs/WindowManager/Shell/res/values-km/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"មានបញ្ហាពាក់ព័ន្ធនឹងកាមេរ៉ាឬ?\nចុចដើម្បីដោះស្រាយ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"មិនបានដោះស្រាយបញ្ហានេះទេឬ?\nចុចដើម្បីត្រឡប់"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"មិនមានបញ្ហាពាក់ព័ន្ធនឹងកាមេរ៉ាទេឬ? ចុចដើម្បីច្រានចោល។"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"កម្មវិធីមួយចំនួនដំណើរការបានប្រសើរបំផុតក្នុងទិសដៅបញ្ឈរ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"សាកល្បងជម្រើសមួយក្នុងចំណោមទាំងនេះ ដើម្បីទទួលបានអត្ថប្រយោជន៍ច្រើនបំផុតពីកន្លែងទំនេររបស់អ្នក"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"បង្វិលឧបករណ៍របស់អ្នក ដើម្បីចូលប្រើអេក្រង់ពេញ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ចុចពីរដងនៅជាប់កម្មវិធីណាមួយ ដើម្បីប្ដូរទីតាំងកម្មវិធីនោះ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"យល់ហើយ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-km/strings_tv.xml b/libs/WindowManager/Shell/res/values-km/strings_tv.xml index e8315163ad46..1e995070b040 100644 --- a/libs/WindowManager/Shell/res/values-km/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-km/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"បិទ PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ពេញអេក្រង់"</string> <string name="pip_move" msgid="1544227837964635439">"ផ្លាស់ទី PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml index 6edbf13d4e2e..e91383caa009 100644 --- a/libs/WindowManager/Shell/res/values-kn/strings.xml +++ b/libs/WindowManager/Shell/res/values-kn/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿವೆಯೇ?\nಮರುಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ಅದನ್ನು ಸರಿಪಡಿಸಲಿಲ್ಲವೇ?\nಹಿಂತಿರುಗಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿಲ್ಲವೇ? ವಜಾಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"ಕೆಲವು ಆ್ಯಪ್ಗಳು ಪೋರ್ಟ್ರೇಟ್ ಮೋಡ್ನಲ್ಲಿ ಅತ್ಯುತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ನಿಮ್ಮ ಸ್ಥಳಾವಕಾಶದ ಅತಿಹೆಚ್ಚು ಪ್ರಯೋಜನ ಪಡೆಯಲು ಈ ಆಯ್ಕೆಗಳಲ್ಲಿ ಒಂದನ್ನು ಬಳಸಿ ನೋಡಿ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ಪೂರ್ಣ ಸ್ಕ್ರೀನ್ಗೆ ಹೋಗಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ತಿರುಗಿಸಿ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ಆ್ಯಪ್ ಒಂದರ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸಲು ಅದರ ಪಕ್ಕದಲ್ಲಿ ಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ಸರಿ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-kn/strings_tv.xml b/libs/WindowManager/Shell/res/values-kn/strings_tv.xml index 305ef668cb58..bbf422d3ab4a 100644 --- a/libs/WindowManager/Shell/res/values-kn/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-kn/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP ಮುಚ್ಚಿ"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ಪೂರ್ಣ ಪರದೆ"</string> <string name="pip_move" msgid="1544227837964635439">"PIP ಅನ್ನು ಸರಿಸಿ"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml index 1f8d0b0b175d..104ba3f22c96 100644 --- a/libs/WindowManager/Shell/res/values-ko/strings.xml +++ b/libs/WindowManager/Shell/res/values-ko/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"카메라 문제가 있나요?\n해결하려면 탭하세요."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"해결되지 않았나요?\n되돌리려면 탭하세요."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"카메라에 문제가 없나요? 닫으려면 탭하세요."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"일부 앱은 세로 모드에서 가장 잘 작동함"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"공간을 최대한 이용할 수 있도록 이 옵션 중 하나를 시도해 보세요."</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"전체 화면 모드로 전환하려면 기기를 회전하세요."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"앱 위치를 조정하려면 앱 옆을 두 번 탭하세요."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"확인"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ko/strings_tv.xml b/libs/WindowManager/Shell/res/values-ko/strings_tv.xml index 76b0adfb3d88..fe00f088961c 100644 --- a/libs/WindowManager/Shell/res/values-ko/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ko/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP 닫기"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"전체화면"</string> <string name="pip_move" msgid="1544227837964635439">"PIP 이동"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml index 81eb2d70c2de..8203622a33fc 100644 --- a/libs/WindowManager/Shell/res/values-ky/strings.xml +++ b/libs/WindowManager/Shell/res/values-ky/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада маселелер келип чыктыбы?\nОңдоо үчүн таптаңыз"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Оңдолгон жокпу?\nАртка кайтаруу үчүн таптаңыз"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада маселе жокпу? Этибарга албоо үчүн таптаңыз."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Айрым колдонмолорду тигинен иштетүү туура болот"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Иш чөйрөсүнүн бардык мүмкүнчүлүктөрүн пайдалануу үчүн бул параметрлердин бирин колдонуп көрүңүз"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Толук экран режимине өтүү үчүн түзмөктү буруңуз"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Колдонмонун ракурсун өзгөртүү үчүн анын тушуна эки жолу басыңыз"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Түшүндүм"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ky/strings_tv.xml b/libs/WindowManager/Shell/res/values-ky/strings_tv.xml index 57b955a7c5d4..6e35bc7ff807 100644 --- a/libs/WindowManager/Shell/res/values-ky/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ky/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP\'ти жабуу"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Толук экран"</string> <string name="pip_move" msgid="1544227837964635439">"PIP\'ти жылдыруу"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml index 325213020e5c..24396786f9d8 100644 --- a/libs/WindowManager/Shell/res/values-lo/strings.xml +++ b/libs/WindowManager/Shell/res/values-lo/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ?\nແຕະເພື່ອປັບໃໝ່"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ບໍ່ໄດ້ແກ້ໄຂມັນບໍ?\nແຕະເພື່ອແປງກັບຄືນ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ບໍ່ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ? ແຕະເພື່ອປິດໄວ້."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"ແອັບບາງຢ່າງເຮັດວຽກໄດ້ດີທີ່ສຸດໃນໂໝດລວງຕັ້ງ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ໃຫ້ລອງຕົວເລືອກໃດໜຶ່ງເຫຼົ່ານີ້ເພື່ອໃຊ້ປະໂຫຍດຈາກພື້ນທີ່ຂອງທ່ານໃຫ້ໄດ້ສູງສຸດ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ໝຸນອຸປະກອນຂອງທ່ານເພື່ອໃຊ້ແບບເຕັມຈໍ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ແຕະສອງເທື່ອໃສ່ຖັດຈາກແອັບໃດໜຶ່ງເພື່ອຈັດຕຳແໜ່ງຂອງມັນຄືນໃໝ່"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ເຂົ້າໃຈແລ້ວ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-lo/strings_tv.xml b/libs/WindowManager/Shell/res/values-lo/strings_tv.xml index cbea84ea7ea2..17baf9125d9a 100644 --- a/libs/WindowManager/Shell/res/values-lo/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-lo/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"ປິດ PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ເຕັມໜ້າຈໍ"</string> <string name="pip_move" msgid="1544227837964635439">"ຍ້າຍ PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml index 70654c767287..e2ae643ad308 100644 --- a/libs/WindowManager/Shell/res/values-lt/strings.xml +++ b/libs/WindowManager/Shell/res/values-lt/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Iškilo problemų dėl kameros?\nPalieskite, kad pritaikytumėte iš naujo"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepavyko pataisyti?\nPalieskite, kad grąžintumėte"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nėra jokių problemų dėl kameros? Palieskite, kad atsisakytumėte."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Kai kurios programos geriausiai veikia stačiuoju režimu"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Pabandykite naudoti vieną iš šių parinkčių, kad išnaudotumėte visą vietą"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pasukite įrenginį, kad įjungtumėte viso ekrano režimą"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dukart palieskite šalia programos, kad pakeistumėte jos poziciją"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Supratau"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-lt/strings_tv.xml b/libs/WindowManager/Shell/res/values-lt/strings_tv.xml index 81716a609fc5..f907055872ca 100644 --- a/libs/WindowManager/Shell/res/values-lt/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-lt/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Uždaryti PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Visas ekranas"</string> <string name="pip_move" msgid="1544227837964635439">"Perkelti PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Iškleisti PIP"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Sutraukti PIP"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml index 74d1b3f6578c..a77160bc262a 100644 --- a/libs/WindowManager/Shell/res/values-lv/strings.xml +++ b/libs/WindowManager/Shell/res/values-lv/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Vai ir problēmas ar kameru?\nPieskarieties, lai tās novērstu."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Vai problēma netika novērsta?\nPieskarieties, lai atjaunotu."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Vai nav problēmu ar kameru? Pieskarieties, lai nerādītu."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Dažas lietotnes vislabāk darbojas portreta režīmā"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Izmēģiniet vienu no šīm iespējām, lai efektīvi izmantotu pieejamo vietu"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pagrieziet ierīci, lai aktivizētu pilnekrāna režīmu"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Veiciet dubultskārienu blakus lietotnei, lai manītu tās pozīciju"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Labi"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-lv/strings_tv.xml b/libs/WindowManager/Shell/res/values-lv/strings_tv.xml index 5295cd230591..52cdae35fa17 100644 --- a/libs/WindowManager/Shell/res/values-lv/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-lv/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Aizvērt PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pilnekrāna režīms"</string> <string name="pip_move" msgid="1544227837964635439">"Pārvietot attēlu attēlā"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml index be6ed4d25ac1..bac0c9eee4c2 100644 --- a/libs/WindowManager/Shell/res/values-mk/strings.xml +++ b/libs/WindowManager/Shell/res/values-mk/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми со камерата?\nДопрете за да се совпадне повторно"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не се поправи?\nДопрете за враќање"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нема проблеми со камерата? Допрете за отфрлање."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Некои апликации најдобро работат во режим на портрет"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Испробајте една од опцииве за да го извлечете максимумот од вашиот простор"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ротирајте го уредот за да отворите на цел екран"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Допрете двапати до некоја апликација за да ја преместите"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Сфатив"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-mk/strings_tv.xml b/libs/WindowManager/Shell/res/values-mk/strings_tv.xml index fa48a6cc1846..e9ee13884afc 100644 --- a/libs/WindowManager/Shell/res/values-mk/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-mk/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Затвори PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Цел екран"</string> <string name="pip_move" msgid="1544227837964635439">"Премести PIP"</string> + <string name="pip_expand" msgid="7605396312689038178">"Прошири ја сликата во слика"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Собери ја сликата во слика"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml index 14a341b49c0e..de0f837fcd3f 100644 --- a/libs/WindowManager/Shell/res/values-ml/strings.xml +++ b/libs/WindowManager/Shell/res/values-ml/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ക്യാമറ പ്രശ്നങ്ങളുണ്ടോ?\nശരിയാക്കാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"അത് പരിഹരിച്ചില്ലേ?\nപുനഃസ്ഥാപിക്കാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ക്യാമറാ പ്രശ്നങ്ങളൊന്നുമില്ലേ? നിരസിക്കാൻ ടാപ്പ് ചെയ്യുക."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"ചില ആപ്പുകൾ പോർട്രെയ്റ്റിൽ മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്നു"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"നിങ്ങളുടെ ഇടം പരമാവധി പ്രയോജനപ്പെടുത്താൻ ഈ ഓപ്ഷനുകളിലൊന്ന് പരീക്ഷിക്കുക"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"പൂർണ്ണ സ്ക്രീനിലേക്ക് മാറാൻ ഈ ഉപകരണം റൊട്ടേറ്റ് ചെയ്യുക"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ഒരു ആപ്പിന്റെ സ്ഥാനം മാറ്റാൻ, അതിന് തൊട്ടടുത്ത് ഡബിൾ ടാപ്പ് ചെയ്യുക"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"മനസ്സിലായി"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ml/strings_tv.xml b/libs/WindowManager/Shell/res/values-ml/strings_tv.xml index 533375751378..1ed6b6e566de 100644 --- a/libs/WindowManager/Shell/res/values-ml/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ml/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP അടയ്ക്കുക"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"പൂര്ണ്ണ സ്ക്രീന്"</string> <string name="pip_move" msgid="1544227837964635439">"PIP നീക്കുക"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP വികസിപ്പിക്കുക"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP ചുരുക്കുക"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml index b59f2825b3b5..1205306e0833 100644 --- a/libs/WindowManager/Shell/res/values-mn/strings.xml +++ b/libs/WindowManager/Shell/res/values-mn/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерын асуудал гарсан уу?\nДахин тааруулахын тулд товшино уу"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Үүнийг засаагүй юу?\nБуцаахын тулд товшино уу"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерын асуудал байхгүй юу? Хаахын тулд товшино уу."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Зарим апп нь босоо чиглэлд хамгийн сайн ажилладаг"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Орон зайгаа сайтар ашиглахын тулд эдгээр сонголтуудын аль нэгийг туршиж үзээрэй"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Төхөөрөмжөө бүтэн дэлгэцээр үзэхийн тулд эргүүлнэ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Аппыг дахин байрлуулахын тулд хажууд нь хоёр товшино"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ойлголоо"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-mn/strings_tv.xml b/libs/WindowManager/Shell/res/values-mn/strings_tv.xml index ca1d27f29cdf..d4a6942ae9dc 100644 --- a/libs/WindowManager/Shell/res/values-mn/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-mn/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP-г хаах"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Бүтэн дэлгэц"</string> <string name="pip_move" msgid="1544227837964635439">"PIP-г зөөх"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP-г дэлгэх"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP-г хураах"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml index 3d2d6a36530c..c91d06fdf3d5 100644 --- a/libs/WindowManager/Shell/res/values-mr/strings.xml +++ b/libs/WindowManager/Shell/res/values-mr/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"कॅमेराशी संबंधित काही समस्या आहेत का?\nपुन्हा फिट करण्यासाठी टॅप करा"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"निराकरण झाले नाही?\nरिव्हर्ट करण्यासाठी कृपया टॅप करा"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"कॅमेराशी संबंधित कोणत्याही समस्या नाहीत का? डिसमिस करण्यासाठी टॅप करा."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"काही ॲप्स पोर्ट्रेटमध्ये सर्वोत्तम काम करतात"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"तुमच्या स्पेसचा पुरेपूर वापर करण्यासाठी, यांपैकी एक पर्याय वापरून पहा"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"फुल स्क्रीन करण्यासाठी, तुमचे डिव्हाइस फिरवा"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ॲपची स्थिती पुन्हा बदलण्यासाठी, त्याच्या शेजारी दोनदा टॅप करा"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"समजले"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-mr/strings_tv.xml b/libs/WindowManager/Shell/res/values-mr/strings_tv.xml index 212bd21db344..940f9832eb4a 100644 --- a/libs/WindowManager/Shell/res/values-mr/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-mr/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP बंद करा"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"फुल स्क्रीन"</string> <string name="pip_move" msgid="1544227837964635439">"PIP हलवा"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP चा विस्तार करा"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP कोलॅप्स करा"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml index 4e9a7e952a09..652a9919d163 100644 --- a/libs/WindowManager/Shell/res/values-ms/strings.xml +++ b/libs/WindowManager/Shell/res/values-ms/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Isu kamera?\nKetik untuk memuatkan semula"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Isu tidak dibetulkan?\nKetik untuk kembali"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tiada isu kamera? Ketik untuk mengetepikan."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Sesetengah apl berfungsi paling baik dalam mod potret"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Cuba salah satu daripada pilihan ini untuk memanfaatkan ruang anda sepenuhnya"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Putar peranti anda untuk beralih ke skrin penuh"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ketik dua kali bersebelahan apl untuk menempatkan semula apl"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ms/strings_tv.xml b/libs/WindowManager/Shell/res/values-ms/strings_tv.xml index ce2912650da7..f6fca3b490e7 100644 --- a/libs/WindowManager/Shell/res/values-ms/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ms/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Tutup PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Skrin penuh"</string> <string name="pip_move" msgid="1544227837964635439">"Alihkan PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml index 449e50257d42..15d182c6451e 100644 --- a/libs/WindowManager/Shell/res/values-my/strings.xml +++ b/libs/WindowManager/Shell/res/values-my/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ကင်မရာပြဿနာလား။\nပြင်ဆင်ရန် တို့ပါ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ကောင်းမသွားဘူးလား။\nပြန်ပြောင်းရန် တို့ပါ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ကင်မရာပြဿနာ မရှိဘူးလား။ ပယ်ရန် တို့ပါ။"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"အချို့အက်ပ်များသည် ဒေါင်လိုက်တွင် အကောင်းဆုံးလုပ်ဆောင်သည်"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"သင့်နေရာကို အကောင်းဆုံးအသုံးပြုနိုင်ရန် ဤရွေးစရာများထဲမှ တစ်ခုကို စမ်းကြည့်ပါ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ဖန်သားပြင်အပြည့်လုပ်ရန် သင့်စက်ကို လှည့်နိုင်သည်"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"အက်ပ်နေရာပြန်ချရန် ၎င်းဘေးတွင် နှစ်ချက်တို့နိုင်သည်"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ရပြီ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-my/strings_tv.xml b/libs/WindowManager/Shell/res/values-my/strings_tv.xml index 4847742130ba..c7c0894aa8fd 100644 --- a/libs/WindowManager/Shell/res/values-my/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-my/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP ကိုပိတ်ပါ"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"မျက်နှာပြင် အပြည့်"</string> <string name="pip_move" msgid="1544227837964635439">"PIP ရွှေ့ရန်"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml index 2172cc5d3815..9fd42b2f129c 100644 --- a/libs/WindowManager/Shell/res/values-nb/strings.xml +++ b/libs/WindowManager/Shell/res/values-nb/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du kameraproblemer?\nTrykk for å tilpasse"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ble ikke problemet løst?\nTrykk for å gå tilbake"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen kameraproblemer? Trykk for å lukke."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Noen apper fungerer best i stående format"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Prøv et av disse alternativene for å få mest mulig ut av plassen din"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Roter enheten for å starte fullskjerm"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dobbelttrykk ved siden av en app for å flytte den"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Greit"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-nb/strings_tv.xml b/libs/WindowManager/Shell/res/values-nb/strings_tv.xml index 7cef11c424ce..83222bfa81e7 100644 --- a/libs/WindowManager/Shell/res/values-nb/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-nb/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Lukk PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Fullskjerm"</string> <string name="pip_move" msgid="1544227837964635439">"Flytt BIB"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml index ff01dcd9ff2d..8dfec88cc29d 100644 --- a/libs/WindowManager/Shell/res/values-ne/strings.xml +++ b/libs/WindowManager/Shell/res/values-ne/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्यामेरासम्बन्धी समस्या देखियो?\nसमस्या हल गर्न ट्याप गर्नुहोस्"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"समस्या हल भएन?\nपहिलेको जस्तै बनाउन ट्याप गर्नुहोस्"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्यामेरासम्बन्धी कुनै पनि समस्या छैन? खारेज गर्न ट्याप गर्नुहोस्।"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"केही एपहरूले पोर्ट्रेटमा राम्रोसँग काम गर्छन्"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"तपाईं स्क्रिनको अधिकतम ठाउँ प्रयोग गर्न चाहनुहुन्छ भने यीमध्ये कुनै विकल्प प्रयोग गरी हेर्नुहोस्"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"तपाईं फुल स्क्रिन मोड हेर्न चाहनुहुन्छ भने आफ्नो डिभाइस रोटेट गर्नुहोस्"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"तपाईं जुन एपको स्थिति मिलाउन चाहनुहुन्छ सोही एपको छेउमा डबल ट्याप गर्नुहोस्"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"बुझेँ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ne/strings_tv.xml b/libs/WindowManager/Shell/res/values-ne/strings_tv.xml index 684d11490be3..ce21a0964094 100644 --- a/libs/WindowManager/Shell/res/values-ne/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ne/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP लाई बन्द गर्नुहोस्"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"फुल स्क्रिन"</string> <string name="pip_move" msgid="1544227837964635439">"PIP सार्नुहोस्"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml index 428cb3fb65d7..8468b04c66da 100644 --- a/libs/WindowManager/Shell/res/values-nl/strings.xml +++ b/libs/WindowManager/Shell/res/values-nl/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Cameraproblemen?\nTik om opnieuw passend te maken."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Is dit geen oplossing?\nTik om terug te zetten."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen cameraproblemen? Tik om te sluiten."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Sommige apps werken het best in de staande stand"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Probeer een van deze opties om optimaal gebruik te maken van je ruimte"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Draai je apparaat om naar volledig scherm te schakelen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dubbeltik naast een app om deze opnieuw te positioneren"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-nl/strings_tv.xml b/libs/WindowManager/Shell/res/values-nl/strings_tv.xml index 8562517bd58b..ebc873a56a7b 100644 --- a/libs/WindowManager/Shell/res/values-nl/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-nl/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP sluiten"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Volledig scherm"</string> <string name="pip_move" msgid="1544227837964635439">"SIS verplaatsen"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml index f9668a1112b3..a8d8448edf99 100644 --- a/libs/WindowManager/Shell/res/values-or/strings.xml +++ b/libs/WindowManager/Shell/res/values-or/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"କ୍ୟାମେରାରେ ସମସ୍ୟା ଅଛି?\nପୁଣି ଫିଟ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ଏହାର ସମାଧାନ ହୋଇନାହିଁ?\nଫେରିଯିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"କ୍ୟାମେରାରେ କିଛି ସମସ୍ୟା ନାହିଁ? ଖାରଜ କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"କିଛି ଆପ ପୋର୍ଟ୍ରେଟରେ ସବୁଠାରୁ ଭଲ କାମ କରେ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ଆପଣଙ୍କ ସ୍ପେସରୁ ଅଧିକ ଲାଭ ପାଇବାକୁ ଏହି ବିକଳ୍ପଗୁଡ଼ିକ ମଧ୍ୟରୁ ଗୋଟିଏ ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ପୂର୍ଣ୍ଣ-ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ରୋଟେଟ କରନ୍ତୁ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ଏକ ଆପକୁ ରିପୋଜିସନ କରିବା ପାଇଁ ଏହା ପାଖରେ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ବୁଝିଗଲି"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-or/strings_tv.xml b/libs/WindowManager/Shell/res/values-or/strings_tv.xml index f8bc01642d88..98745c692dea 100644 --- a/libs/WindowManager/Shell/res/values-or/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-or/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP ବନ୍ଦ କରନ୍ତୁ"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍"</string> <string name="pip_move" msgid="1544227837964635439">"PIPକୁ ମୁଭ କରନ୍ତୁ"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml index 7132597d5b11..f99176cb682d 100644 --- a/libs/WindowManager/Shell/res/values-pa/strings.xml +++ b/libs/WindowManager/Shell/res/values-pa/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਹਨ?\nਮੁੜ-ਫਿੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ਕੀ ਇਹ ਠੀਕ ਨਹੀਂ ਹੋਈ?\nਵਾਪਸ ਉਹੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ? ਖਾਰਜ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"ਕੁਝ ਐਪਾਂ ਪੋਰਟਰੇਟ ਵਿੱਚ ਬਿਹਤਰ ਕੰਮ ਕਰਦੀਆਂ ਹਨ"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ਆਪਣੀ ਜਗ੍ਹਾ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਲਾਹਾ ਲੈਣ ਲਈ ਇਨ੍ਹਾਂ ਵਿਕਲਪਾਂ ਵਿੱਚੋਂ ਕੋਈ ਇੱਕ ਵਰਤ ਕੇ ਦੇਖੋ"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ \'ਤੇ ਜਾਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਘੁਮਾਓ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ਕਿਸੇ ਐਪ ਦੀ ਜਗ੍ਹਾ ਬਦਲਣ ਲਈ ਉਸ ਦੇ ਅੱਗੇ ਡਬਲ ਟੈਪ ਕਰੋ"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ਸਮਝ ਲਿਆ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pa/strings_tv.xml b/libs/WindowManager/Shell/res/values-pa/strings_tv.xml index 1667e5fc6eac..793b87895c8d 100644 --- a/libs/WindowManager/Shell/res/values-pa/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-pa/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP ਬੰਦ ਕਰੋ"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ਪੂਰੀ ਸਕ੍ਰੀਨ"</string> <string name="pip_move" msgid="1544227837964635439">"PIP ਨੂੰ ਲਿਜਾਓ"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml index f7f97efa1a88..f2147c04d335 100644 --- a/libs/WindowManager/Shell/res/values-pl/strings.xml +++ b/libs/WindowManager/Shell/res/values-pl/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemy z aparatem?\nKliknij, aby dopasować"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Naprawa się nie udała?\nKliknij, aby cofnąć"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Brak problemów z aparatem? Kliknij, aby zamknąć"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Niektóre aplikacje działają najlepiej w orientacji pionowej"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Wypróbuj jedną z tych opcji, aby jak najlepiej wykorzystać miejsce"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Obróć urządzenie, aby przejść do pełnego ekranu"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Kliknij dwukrotnie obok aplikacji, aby ją przenieść"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pl/strings_tv.xml b/libs/WindowManager/Shell/res/values-pl/strings_tv.xml index 28bf66a7ee1b..06988e3d6396 100644 --- a/libs/WindowManager/Shell/res/values-pl/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-pl/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zamknij PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Pełny ekran"</string> <string name="pip_move" msgid="1544227837964635439">"Przenieś PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml index a3d2ab0feffa..2efc5543dd87 100644 --- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Alguns apps funcionam melhor em modo retrato"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Tente uma destas opções para aproveitar seu espaço ao máximo"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gire o dispositivo para entrar no modo de tela cheia"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes ao lado de um app para reposicionar"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendi"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings_tv.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings_tv.xml index 27626b8ecfd6..28b977ad9792 100644 --- a/libs/WindowManager/Shell/res/values-pt-rBR/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Fechar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Tela cheia"</string> <string name="pip_move" msgid="1544227837964635439">"Mover picture-in-picture"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml index 86872c811857..c68a6934dead 100644 --- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmara?\nToque aqui para reajustar"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Não foi corrigido?\nToque para reverter"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nenhum problema com a câmara? Toque para ignorar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Algumas apps funcionam melhor no modo vertical"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Experimente uma destas opções para aproveitar ao máximo o seu espaço"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rode o dispositivo para ficar em ecrã inteiro"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes junto a uma app para a reposicionar"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings_tv.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings_tv.xml index a2010cee9e03..6c1fa5905d1a 100644 --- a/libs/WindowManager/Shell/res/values-pt-rPT/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"Fechar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Ecrã inteiro"</string> <string name="pip_move" msgid="1544227837964635439">"Mover Ecrã no ecrã"</string> + <string name="pip_expand" msgid="7605396312689038178">"Expandir Ecrã no ecrã"</string> + <string name="pip_collapse" msgid="5732233773786896094">"Reduzir Ecrã no ecrã"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml index a3d2ab0feffa..2efc5543dd87 100644 --- a/libs/WindowManager/Shell/res/values-pt/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Alguns apps funcionam melhor em modo retrato"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Tente uma destas opções para aproveitar seu espaço ao máximo"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gire o dispositivo para entrar no modo de tela cheia"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes ao lado de um app para reposicionar"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendi"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-pt/strings_tv.xml b/libs/WindowManager/Shell/res/values-pt/strings_tv.xml index 27626b8ecfd6..28b977ad9792 100644 --- a/libs/WindowManager/Shell/res/values-pt/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-pt/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Fechar PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Tela cheia"</string> <string name="pip_move" msgid="1544227837964635439">"Mover picture-in-picture"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml index 5448e459a268..804d34f980ff 100644 --- a/libs/WindowManager/Shell/res/values-ro/strings.xml +++ b/libs/WindowManager/Shell/res/values-ro/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Aveți probleme cu camera foto?\nAtingeți pentru a reîncadra"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nu ați remediat problema?\nAtingeți pentru a reveni"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nu aveți probleme cu camera foto? Atingeți pentru a închide."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Unele aplicații funcționează cel mai bine în orientarea portret"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Încercați una dintre aceste opțiuni pentru a profita din plin de spațiu"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotiți dispozitivul pentru a trece în modul ecran complet"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Atingeți de două ori lângă o aplicație pentru a o repoziționa"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ro/strings_tv.xml b/libs/WindowManager/Shell/res/values-ro/strings_tv.xml index 18e29a60191f..0f8546e681d6 100644 --- a/libs/WindowManager/Shell/res/values-ro/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ro/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Închideți PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Ecran complet"</string> <string name="pip_move" msgid="1544227837964635439">"Mutați fereastra PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml index 64e74a27d32b..95bf1cf11435 100644 --- a/libs/WindowManager/Shell/res/values-ru/strings.xml +++ b/libs/WindowManager/Shell/res/values-ru/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблемы с камерой?\nНажмите, чтобы исправить."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не помогло?\nНажмите, чтобы отменить изменения."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нет проблем с камерой? Нажмите, чтобы закрыть."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Некоторые приложения лучше работают в вертикальном режиме"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Чтобы эффективно использовать экранное пространство, выполните одно из следующих действий:"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Чтобы перейти в полноэкранный режим, поверните устройство."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Чтобы переместить приложение, нажмите на него дважды."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ОК"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ru/strings_tv.xml b/libs/WindowManager/Shell/res/values-ru/strings_tv.xml index d119240adc4d..a128b1079a38 100644 --- a/libs/WindowManager/Shell/res/values-ru/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ru/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"\"Кадр в кадре\" – выйти"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Во весь экран"</string> <string name="pip_move" msgid="1544227837964635439">"Переместить PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml index 3cdaa72b0153..23dd65ad7b31 100644 --- a/libs/WindowManager/Shell/res/values-si/strings.xml +++ b/libs/WindowManager/Shell/res/values-si/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"කැමරා ගැටලුද?\nයළි සවි කිරීමට තට්ටු කරන්න"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"එය විසඳුවේ නැතිද?\nප්රතිවර්තනය කිරීමට තට්ටු කරන්න"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"කැමරා ගැටලු නොමැතිද? ඉවත දැමීමට තට්ටු කරන්න"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"සමහර යෙදුම් ප්රතිමූර්තිය තුළ හොඳින්ම ක්රියා කරයි"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ඔබගේ ඉඩෙන් උපරිම ප්රයෝජන ගැනීමට මෙම විකල්පවලින් එකක් උත්සාහ කරන්න"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"සම්පූර්ණ තිරයට යාමට ඔබගේ උපාංගය කරකවන්න"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"එය නැවත ස්ථානගත කිරීමට යෙදුමකට යාබදව දෙවරක් තට්ටු කරන්න"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"තේරුණා"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-si/strings_tv.xml b/libs/WindowManager/Shell/res/values-si/strings_tv.xml index 86769b6ee849..8b92ac032fdc 100644 --- a/libs/WindowManager/Shell/res/values-si/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-si/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP වසන්න"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"සම්පූර්ණ තිරය"</string> <string name="pip_move" msgid="1544227837964635439">"PIP ගෙන යන්න"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml index daa202175622..a231cacefb20 100644 --- a/libs/WindowManager/Shell/res/values-sk/strings.xml +++ b/libs/WindowManager/Shell/res/values-sk/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s kamerou?\nKlepnutím znova upravte."</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nevyriešilo sa to?\nKlepnutím sa vráťte."</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemáte problémy s kamerou? Klepnutím zatvoríte."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Niektoré aplikácie fungujú najlepšie v režime na výšku"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Vyskúšajte jednu z týchto možností a využívajte svoj priestor naplno"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Otočením zariadenia prejdete do režimu celej obrazovky"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvojitým klepnutím vedľa aplikácie zmeníte jej pozíciu"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Dobre"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sk/strings_tv.xml b/libs/WindowManager/Shell/res/values-sk/strings_tv.xml index 6f6ccb703cf6..390ea3989174 100644 --- a/libs/WindowManager/Shell/res/values-sk/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sk/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zavrieť režim PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Celá obrazovka"</string> <string name="pip_move" msgid="1544227837964635439">"Presunúť obraz v obraze"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml index b4c7b951d14a..adeaae978eaa 100644 --- a/libs/WindowManager/Shell/res/values-sl/strings.xml +++ b/libs/WindowManager/Shell/res/values-sl/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Težave s fotoaparatom?\nDotaknite se za vnovično prilagoditev"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"To ni odpravilo težave?\nDotaknite se za povrnitev"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nimate težav s fotoaparatom? Dotaknite se za opustitev."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Nekatere aplikacije najbolje delujejo v navpični postavitvi"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Poskusite eno od teh možnosti za čim boljši izkoristek prostora"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Če želite preklopiti v celozaslonski način, zasukajte napravo."</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvakrat se dotaknite ob aplikaciji, če jo želite prestaviti."</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"V redu"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sl/strings_tv.xml b/libs/WindowManager/Shell/res/values-sl/strings_tv.xml index 837794ad4be7..0cd2f6e442fc 100644 --- a/libs/WindowManager/Shell/res/values-sl/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sl/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Zapri način PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Celozaslonsko"</string> <string name="pip_move" msgid="1544227837964635439">"Premakni sliko v sliki"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml index 5051351bf340..2839b4bae7e4 100644 --- a/libs/WindowManager/Shell/res/values-sq/strings.xml +++ b/libs/WindowManager/Shell/res/values-sq/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Ka probleme me kamerën?\nTrokit për ta ripërshtatur"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nuk u rregullua?\nTrokit për ta rikthyer"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nuk ka probleme me kamerën? Trokit për ta shpërfillur."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Disa aplikacione funksionojnë më mirë në modalitetin vertikal"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Provo një nga këto opsione për ta shfrytëzuar sa më mirë hapësirën"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rrotullo ekranin për të kaluar në ekran të plotë"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Trokit dy herë pranë një aplikacioni për ta ripozicionuar"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"E kuptova"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sq/strings_tv.xml b/libs/WindowManager/Shell/res/values-sq/strings_tv.xml index 107870d0489f..da55ddba96fe 100644 --- a/libs/WindowManager/Shell/res/values-sq/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sq/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Mbyll PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Ekrani i plotë"</string> <string name="pip_move" msgid="1544227837964635439">"Zhvendos PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml index 96bb48a76368..9db6b7c63610 100644 --- a/libs/WindowManager/Shell/res/values-sr/strings.xml +++ b/libs/WindowManager/Shell/res/values-sr/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблема са камером?\nДодирните да бисте поново уклопили"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблем није решен?\nДодирните да бисте вратили"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немате проблема са камером? Додирните да бисте одбацили."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Неке апликације најбоље функционишу у усправном режиму"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Испробајте једну од ових опција да бисте на најбољи начин искористили простор"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ротирајте уређај за приказ преко целог екрана"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Двапут додирните поред апликације да бисте променили њену позицију"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Важи"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sr/strings_tv.xml b/libs/WindowManager/Shell/res/values-sr/strings_tv.xml index ee5690ba4a9a..a872cedb65c1 100644 --- a/libs/WindowManager/Shell/res/values-sr/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sr/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Затвори PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Цео екран"</string> <string name="pip_move" msgid="1544227837964635439">"Премести слику у слици"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml index 9fa5c19e3dd4..f6bd55423cdc 100644 --- a/libs/WindowManager/Shell/res/values-sv/strings.xml +++ b/libs/WindowManager/Shell/res/values-sv/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problem med kameran?\nTryck för att anpassa på nytt"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Löstes inte problemet?\nTryck för att återställa"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Inga problem med kameran? Tryck för att ignorera."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Vissa appar fungerar bäst i stående läge"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Testa med ett av dessa alternativ för att få ut mest möjliga av ytan"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotera skärmen för att gå över till helskärmsläge"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tryck snabbt två gånger bredvid en app för att flytta den"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sv/strings_tv.xml b/libs/WindowManager/Shell/res/values-sv/strings_tv.xml index 7355adf51e97..ae61e8779b09 100644 --- a/libs/WindowManager/Shell/res/values-sv/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sv/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Stäng PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Helskärm"</string> <string name="pip_move" msgid="1544227837964635439">"Flytta BIB"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml index 8c026f96392d..f6e558527ee5 100644 --- a/libs/WindowManager/Shell/res/values-sw/strings.xml +++ b/libs/WindowManager/Shell/res/values-sw/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Je, kuna hitilafu za kamera?\nGusa ili urekebishe"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Umeshindwa kurekebisha?\nGusa ili urejeshe nakala ya awali"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Je, hakuna hitilafu za kamera? Gusa ili uondoe."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Baadhi ya programu hufanya kazi vizuri zaidi zikiwa wima"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Jaribu moja kati ya chaguo hizi ili utumie nafasi ya skrini yako kwa ufanisi"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zungusha kifaa chako ili uende kwenye hali ya skrini nzima"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Gusa mara mbili karibu na programu ili uihamishe"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Nimeelewa"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-sw/strings_tv.xml b/libs/WindowManager/Shell/res/values-sw/strings_tv.xml index 0ee28416137a..5bafca153752 100644 --- a/libs/WindowManager/Shell/res/values-sw/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-sw/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Funga PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Skrini nzima"</string> <string name="pip_move" msgid="1544227837964635439">"Kuhamisha PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml index cb3d138035b2..d8334adfe5ef 100644 --- a/libs/WindowManager/Shell/res/values-ta/strings.xml +++ b/libs/WindowManager/Shell/res/values-ta/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"கேமரா தொடர்பான சிக்கல்களா?\nமீண்டும் பொருத்த தட்டவும்"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"சிக்கல்கள் சரிசெய்யப்படவில்லையா?\nமாற்றியமைக்க தட்டவும்"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"கேமரா தொடர்பான சிக்கல்கள் எதுவும் இல்லையா? நிராகரிக்க தட்டவும்."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"சில ஆப்ஸ் \'போர்ட்ரெய்ட்டில்\' சிறப்பாகச் செயல்படும்"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ஸ்பேஸ்களிலிருந்து அதிகப் பலன்களைப் பெற இந்த விருப்பங்களில் ஒன்றைப் பயன்படுத்துங்கள்"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"முழுத்திரைக்குச் செல்ல உங்கள் சாதனத்தைச் சுழற்றவும்"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ஆப்ஸை இடம் மாற்ற, ஆப்ஸுக்கு அடுத்து இருமுறை தட்டவும்"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"சரி"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ta/strings_tv.xml b/libs/WindowManager/Shell/res/values-ta/strings_tv.xml index 8bcc43bea59a..8a3487498084 100644 --- a/libs/WindowManager/Shell/res/values-ta/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ta/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIPஐ மூடு"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"முழுத்திரை"</string> <string name="pip_move" msgid="1544227837964635439">"PIPபை நகர்த்து"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml index 7589e70cc681..733075550007 100644 --- a/libs/WindowManager/Shell/res/values-te/strings.xml +++ b/libs/WindowManager/Shell/res/values-te/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"కెమెరా సమస్యలు ఉన్నాయా?\nరీఫిట్ చేయడానికి ట్యాప్ చేయండి"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"దాని సమస్యను పరిష్కరించలేదా?\nపూర్వస్థితికి మార్చడానికి ట్యాప్ చేయండి"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"కెమెరా సమస్యలు లేవా? తీసివేయడానికి ట్యాప్ చేయండి."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"కొన్ని యాప్లు పోర్ట్రెయిట్లో ఉత్తమంగా పని చేస్తాయి"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"మీ ప్రదేశాన్ని ఎక్కువగా ఉపయోగించుకోవడానికి ఈ ఆప్షన్లలో ఒకదాన్ని ట్రై చేయండి"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ఫుల్ స్క్రీన్కు వెళ్లడానికి మీ పరికరాన్ని తిప్పండి"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"యాప్ స్థానాన్ని మార్చడానికి దాని పక్కన డబుల్-ట్యాప్ చేయండి"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"అర్థమైంది"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-te/strings_tv.xml b/libs/WindowManager/Shell/res/values-te/strings_tv.xml index 6e80bd7b3a0c..bfa5df6a674e 100644 --- a/libs/WindowManager/Shell/res/values-te/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-te/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIPని మూసివేయి"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"ఫుల్-స్క్రీన్"</string> <string name="pip_move" msgid="1544227837964635439">"PIPను తరలించండి"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml index d8a33ff4c8e5..cfee8ea3242e 100644 --- a/libs/WindowManager/Shell/res/values-th/strings.xml +++ b/libs/WindowManager/Shell/res/values-th/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"หากพบปัญหากับกล้อง\nแตะเพื่อแก้ไข"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"หากไม่ได้แก้ไข\nแตะเพื่อเปลี่ยนกลับ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"หากไม่พบปัญหากับกล้อง แตะเพื่อปิด"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"บางแอปทำงานได้ดีที่สุดในแนวตั้ง"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"ลองใช้หนึ่งในตัวเลือกเหล่านี้เพื่อให้ได้ประโยชน์สูงสุดจากพื้นที่ว่าง"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"หมุนอุปกรณ์ให้แสดงเต็มหน้าจอ"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"แตะสองครั้งข้างแอปเพื่อเปลี่ยนตำแหน่ง"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"รับทราบ"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-th/strings_tv.xml b/libs/WindowManager/Shell/res/values-th/strings_tv.xml index b6f63699cc00..896664e33a5d 100644 --- a/libs/WindowManager/Shell/res/values-th/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-th/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"ปิด PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"เต็มหน้าจอ"</string> <string name="pip_move" msgid="1544227837964635439">"ย้าย PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml index 35a58b33931d..eed624dd5069 100644 --- a/libs/WindowManager/Shell/res/values-tl/strings.xml +++ b/libs/WindowManager/Shell/res/values-tl/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"May mga isyu sa camera?\nI-tap para i-refit"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Hindi ito naayos?\nI-tap para i-revert"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Walang isyu sa camera? I-tap para i-dismiss."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"May ilang app na pinakamainam gamitin nang naka-portrait"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Subukan ang isa sa mga opsyong ito para masulit ang iyong space"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"I-rotate ang iyong device para mag-full screen"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Mag-double tap sa tabi ng isang app para iposisyon ito ulit"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-tl/strings_tv.xml b/libs/WindowManager/Shell/res/values-tl/strings_tv.xml index 71ca2306ea03..0cc457aceb7e 100644 --- a/libs/WindowManager/Shell/res/values-tl/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-tl/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Isara ang PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Full screen"</string> <string name="pip_move" msgid="1544227837964635439">"Ilipat ang PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml index 8a9fb7546a20..2b4a2d0550f0 100644 --- a/libs/WindowManager/Shell/res/values-tr/strings.xml +++ b/libs/WindowManager/Shell/res/values-tr/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kameranızda sorun mu var?\nDüzeltmek için dokunun"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bu işlem sorunu düzeltmedi mi?\nİşlemi geri almak için dokunun"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kameranızda sorun yok mu? Kapatmak için dokunun."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Bazı uygulamalar dikey modda en iyi performansı gösterir"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Alanınızı en verimli şekilde kullanmak için bu seçeneklerden birini deneyin"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Tam ekrana geçmek için cihazınızı döndürün"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Yeniden konumlandırmak için uygulamanın yanına iki kez dokunun"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Anladım"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-tr/strings_tv.xml b/libs/WindowManager/Shell/res/values-tr/strings_tv.xml index e6ae7f167758..da0bf2df4c48 100644 --- a/libs/WindowManager/Shell/res/values-tr/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-tr/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"PIP\'yi kapat"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Tam ekran"</string> <string name="pip_move" msgid="1544227837964635439">"PIP\'yi taşı"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml index aac9031a7ca7..c3411a837c78 100644 --- a/libs/WindowManager/Shell/res/values-uk/strings.xml +++ b/libs/WindowManager/Shell/res/values-uk/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми з камерою?\nНатисніть, щоб пристосувати"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблему не вирішено?\nНатисніть, щоб скасувати зміни"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немає проблем із камерою? Торкніться, щоб закрити."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Деякі додатки найкраще працюють у вертикальній орієнтації"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Щоб максимально ефективно використовувати місце на екрані, спробуйте виконати одну з наведених нижче дій"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Щоб перейти в повноекранний режим, поверніть пристрій"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Щоб перемістити додаток, двічі торкніться області поруч із ним"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"ОK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-uk/strings_tv.xml b/libs/WindowManager/Shell/res/values-uk/strings_tv.xml index 97e1f09844fa..4c83bc8895d7 100644 --- a/libs/WindowManager/Shell/res/values-uk/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-uk/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Закрити PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"На весь екран"</string> <string name="pip_move" msgid="1544227837964635439">"Перемістити картинку в картинці"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml index e3bab32f309d..a31c2be25643 100644 --- a/libs/WindowManager/Shell/res/values-ur/strings.xml +++ b/libs/WindowManager/Shell/res/values-ur/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"کیمرے کے مسائل؟\nدوبارہ فٹ کرنے کیلئے تھپتھپائیں"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"یہ حل نہیں ہوا؟\nلوٹانے کیلئے تھپتھپائیں"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"کوئی کیمرے کا مسئلہ نہیں ہے؟ برخاست کرنے کیلئے تھپتھپائیں۔"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"کچھ ایپس پورٹریٹ میں بہترین کام کرتی ہیں"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"اپنی اسپیس کا زیادہ سے زیادہ فائدہ اٹھانے کے لیے ان اختیارات میں سے ایک کو آزمائیں"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"پوری اسکرین پر جانے کیلئے اپنا آلہ گھمائیں"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"کسی ایپ کی پوزیشن تبدیل کرنے کے لیے اس کے آگے دو بار تھپتھپائیں"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"سمجھ آ گئی"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ur/strings_tv.xml b/libs/WindowManager/Shell/res/values-ur/strings_tv.xml index 1418570f2538..c05729a123ed 100644 --- a/libs/WindowManager/Shell/res/values-ur/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-ur/strings_tv.xml @@ -22,4 +22,6 @@ <string name="pip_close" msgid="9135220303720555525">"PIP بند کریں"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"فُل اسکرین"</string> <string name="pip_move" msgid="1544227837964635439">"PIP کو منتقل کریں"</string> + <string name="pip_expand" msgid="7605396312689038178">"PIP کو پھیلائیں"</string> + <string name="pip_collapse" msgid="5732233773786896094">"PIP کو سکیڑیں"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml index 54ec89ae6b30..2e3222560dde 100644 --- a/libs/WindowManager/Shell/res/values-uz/strings.xml +++ b/libs/WindowManager/Shell/res/values-uz/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera nosozmi?\nQayta moslash uchun bosing"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tuzatilmadimi?\nQaytarish uchun bosing"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera muammosizmi? Yopish uchun bosing."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Ayrim ilovalar tik holatda ishlashga eng mos"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Muhitdan yanada samarali foydalanish uchun quyidagilardan birini sinang"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Butun ekranda ochish uchun qurilmani buring"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Qayta joylash uchun keyingi ilova ustiga ikki marta bosing"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-uz/strings_tv.xml b/libs/WindowManager/Shell/res/values-uz/strings_tv.xml index 31c762ef5f64..bfeaa0d9843a 100644 --- a/libs/WindowManager/Shell/res/values-uz/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-uz/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Kadr ichida kadr – chiqish"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Butun ekran"</string> <string name="pip_move" msgid="1544227837964635439">"PIPni siljitish"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml index b6837023ccb8..8f3cffecc952 100644 --- a/libs/WindowManager/Shell/res/values-vi/strings.xml +++ b/libs/WindowManager/Shell/res/values-vi/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Có vấn đề với máy ảnh?\nHãy nhấn để sửa lỗi"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bạn chưa khắc phục vấn đề?\nHãy nhấn để hủy bỏ"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Không có vấn đề với máy ảnh? Hãy nhấn để đóng."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Một số ứng dụng hoạt động tốt nhất ở chế độ dọc"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Hãy thử một trong các tuỳ chọn sau để tận dụng không gian"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Xoay thiết bị để chuyển sang chế độ toàn màn hình"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Nhấn đúp vào bên cạnh ứng dụng để đặt lại vị trí"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-vi/strings_tv.xml b/libs/WindowManager/Shell/res/values-vi/strings_tv.xml index b46cd49c1901..41ff256a7966 100644 --- a/libs/WindowManager/Shell/res/values-vi/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-vi/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Đóng PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Toàn màn hình"</string> <string name="pip_move" msgid="1544227837964635439">"Di chuyển PIP (Ảnh trong ảnh)"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml index 811d8602a499..19a9d371e435 100644 --- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相机有问题?\n点按即可整修"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"没有解决此问题?\n点按即可恢复"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相机没有问题?点按即可忽略。"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"某些应用在纵向模式下才能发挥最佳效果"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"这些选项都有助于您最大限度地利用屏幕空间,不妨从中择一试试"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋转设备即可进入全屏模式"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在某个应用旁边连续点按两次,即可调整它的位置"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"知道了"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings_tv.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings_tv.xml index b6fec635a470..f68077f39c58 100644 --- a/libs/WindowManager/Shell/res/values-zh-rCN/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"关闭画中画"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"全屏"</string> <string name="pip_move" msgid="1544227837964635439">"移动画中画窗口"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml index 2a017148f7c4..0c40e963f2e4 100644 --- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題?\n輕按即可修正"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未能修正問題?\n輕按即可還原"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機冇問題?㩒一下就可以即可閂咗佢。"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"部分應用程式需要使用直向模式才能發揮最佳效果"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"請嘗試以下選項,充分運用螢幕的畫面空間"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋轉裝置方向即可進入全螢幕模式"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在應用程式旁輕按兩下即可調整位置"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"知道了"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings_tv.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings_tv.xml index b5d54cb04354..77e848cfb1d5 100644 --- a/libs/WindowManager/Shell/res/values-zh-rHK/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"關閉 PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"全螢幕"</string> <string name="pip_move" msgid="1544227837964635439">"移動畫中畫"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml index 292a43912668..8691352cf94a 100644 --- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題嗎?\n輕觸即可修正"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未修正問題嗎?\n輕觸即可還原"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機沒問題嗎?輕觸即可關閉。"</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"某些應用程式在直向模式下才能發揮最佳效果"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"請試試這裡的任一方式,以充分運用螢幕畫面的空間"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋轉裝置方向即可進入全螢幕模式"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在應用程式旁輕觸兩下即可調整位置"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"我知道了"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings_tv.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings_tv.xml index 57db7a839ea2..f08545816d3e 100644 --- a/libs/WindowManager/Shell/res/values-zh-rTW/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"關閉子母畫面"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"全螢幕"</string> <string name="pip_move" msgid="1544227837964635439">"移動子母畫面"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml index 389eb08bf154..44ffbc6afa45 100644 --- a/libs/WindowManager/Shell/res/values-zu/strings.xml +++ b/libs/WindowManager/Shell/res/values-zu/strings.xml @@ -76,13 +76,9 @@ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Izinkinga zekhamera?\nThepha ukuze uyilinganise kabusha"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Akuyilungisanga?\nThepha ukuze ubuyele"</string> <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Azikho izinkinga zekhamera? Thepha ukuze ucashise."</string> - <!-- no translation found for letterbox_education_dialog_title (6688664582871779215) --> - <skip /> - <!-- no translation found for letterbox_education_dialog_subtext (4853542518367719562) --> - <skip /> - <!-- no translation found for letterbox_education_screen_rotation_text (5085786687366339027) --> - <skip /> - <!-- no translation found for letterbox_education_reposition_text (1068293354123934727) --> - <skip /> + <string name="letterbox_education_dialog_title" msgid="6688664582871779215">"Amanye ama-app asebenza ngcono uma eme ngobude"</string> + <string name="letterbox_education_dialog_subtext" msgid="4853542518367719562">"Zama enye yalezi zinketho ukuze usebenzise isikhala sakho ngokugcwele"</string> + <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zungezisa idivayisi yakho ukuze uye esikrinini esigcwele"</string> + <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Thepha kabili eduze kwe-app ukuze uyimise kabusha"</string> <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ngiyezwa"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-zu/strings_tv.xml b/libs/WindowManager/Shell/res/values-zu/strings_tv.xml index 646a488e4c35..e2382373868a 100644 --- a/libs/WindowManager/Shell/res/values-zu/strings_tv.xml +++ b/libs/WindowManager/Shell/res/values-zu/strings_tv.xml @@ -22,4 +22,8 @@ <string name="pip_close" msgid="9135220303720555525">"Vala i-PIP"</string> <string name="pip_fullscreen" msgid="7278047353591302554">"Iskrini esigcwele"</string> <string name="pip_move" msgid="1544227837964635439">"Hambisa i-PIP"</string> + <!-- no translation found for pip_expand (7605396312689038178) --> + <skip /> + <!-- no translation found for pip_collapse (5732233773786896094) --> + <skip /> </resources> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java index 34426991a459..61cbf6e3c93c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java @@ -364,6 +364,12 @@ public class StartingSurfaceDrawer { final StartingWindowRecord record = mStartingWindowRecords.get(taskId); final SplashScreenView contentView = viewSupplier.get(); record.mBGColor = contentView.getInitBackgroundColor(); + } else { + // release the icon view host + final SplashScreenView contentView = viewSupplier.get(); + if (contentView.getSurfaceHost() != null) { + SplashScreenView.releaseIconHost(contentView.getSurfaceHost()); + } } } catch (RuntimeException e) { // don't crash if something else bad happens, for example a diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt index 65eb9aa991c2..57bcbc093a62 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt @@ -17,6 +17,7 @@ package com.android.wm.shell.flicker.apppairs import android.platform.test.annotations.Presubmit +import android.view.Display import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice import com.android.server.wm.flicker.FlickerParametersRunnerFactory @@ -24,6 +25,7 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.server.wm.traces.common.WindowManagerConditionsFactory import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd import com.android.wm.shell.flicker.helpers.AppPairsHelper import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig @@ -60,7 +62,18 @@ class AppPairsTestSupportPairNonResizeableApps( // TODO pair apps through normal UX flow executeShellCommand( composePairsCommand(primaryTaskId, nonResizeableTaskId, pair = true)) - nonResizeableApp?.run { wmHelper.waitForFullScreenApp(nonResizeableApp.component) } + val waitConditions = mutableListOf( + WindowManagerConditionsFactory.isWindowVisible(primaryApp.component), + WindowManagerConditionsFactory.isLayerVisible(primaryApp.component), + WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY)) + + nonResizeableApp?.let { + waitConditions.add( + WindowManagerConditionsFactory.isWindowVisible(nonResizeableApp.component)) + waitConditions.add( + WindowManagerConditionsFactory.isLayerVisible(nonResizeableApp.component)) + } + wmHelper.waitFor(*waitConditions.toTypedArray()) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/ImeAppHelper.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/ImeAppHelper.kt index 0f00edea136f..cc5b9f9eb26d 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/ImeAppHelper.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/ImeAppHelper.kt @@ -62,7 +62,7 @@ open class ImeAppHelper(instrumentation: Instrumentation) : BaseAppHelper( if (wmHelper == null) { device.waitForIdle() } else { - require(wmHelper.waitImeShown()) { "IME did not appear" } + wmHelper.waitImeShown() } } @@ -79,7 +79,7 @@ open class ImeAppHelper(instrumentation: Instrumentation) : BaseAppHelper( if (wmHelper == null) { uiDevice.waitForIdle() } else { - require(wmHelper.waitImeGone()) { "IME did did not close" } + wmHelper.waitImeGone() } } else { // While pressing the back button should close the IME on TV as well, it may also lead diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt index 7e232ea32181..e9d438a569d5 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt @@ -58,17 +58,27 @@ class PipAppHelper(instrumentation: Instrumentation) : BaseAppHelper( } } - /** {@inheritDoc} */ - override fun launchViaIntent( + /** + * Launches the app through an intent instead of interacting with the launcher and waits + * until the app window is in PIP mode + */ + @JvmOverloads + fun launchViaIntentAndWaitForPip( wmHelper: WindowManagerStateHelper, - expectedWindowName: String, - action: String?, + expectedWindowName: String = "", + action: String? = null, stringExtras: Map<String, String> ) { - super.launchViaIntent(wmHelper, expectedWindowName, action, stringExtras) - wmHelper.waitPipShown() + launchViaIntentAndWaitShown(wmHelper, expectedWindowName, action, stringExtras, + waitConditions = arrayOf(WindowManagerStateHelper.pipShownCondition)) } + /** + * Expand the PIP window back to full screen via intent and wait until the app is visible + */ + fun exitPipToFullScreenViaIntent(wmHelper: WindowManagerStateHelper) = + launchViaIntentAndWaitShown(wmHelper) + private fun focusOnObject(selector: BySelector): Boolean { // We expect all the focusable UI elements to be arranged in a way so that it is possible // to "cycle" over all them by clicking the D-Pad DOWN button, going back up to "the top" diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt index f2c50935a3e9..274d34ba3c5b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt @@ -64,7 +64,18 @@ class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) { * Defines the transition used to run the test */ override val transition: FlickerBuilder.() -> Unit - get() = buildTransition(eachRun = true, stringExtras = emptyMap()) { + get() = { + setupAndTeardown(this) + setup { + eachRun { + pipApp.launchViaIntent(wmHelper) + } + } + teardown { + eachRun { + pipApp.exit(wmHelper) + } + } transitions { pipApp.clickEnterPipButton(wmHelper) } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt index 4f98b70e222a..e2d08346efb6 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt @@ -74,7 +74,7 @@ class ExitPipViaExpandButtonClickTest( // This will bring PipApp to fullscreen pipApp.expandPipWindowToApp(wmHelper) // Wait until the other app is no longer visible - wmHelper.waitForSurfaceAppeared(testApp.component.toWindowName()) + wmHelper.waitForSurfaceAppeared(testApp.component) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt index e00d7491839f..3fe6f02eccf7 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt @@ -72,9 +72,9 @@ class ExitPipViaIntentTest(testSpec: FlickerTestParameter) : ExitPipToAppTransit } transitions { // This will bring PipApp to fullscreen - pipApp.launchViaIntent(wmHelper) + pipApp.exitPipToFullScreenViaIntent(wmHelper) // Wait until the other app is no longer visible - wmHelper.waitForSurfaceAppeared(testApp.component.toWindowName()) + wmHelper.waitForWindowSurfaceDisappeared(testApp.component) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt index bb66f7bbc01f..654fa4ec9446 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipTransition.kt @@ -122,15 +122,14 @@ abstract class PipTransition(protected val testSpec: FlickerTestParameter) { setup { test { - removeAllTasksButHome() if (!eachRun) { - pipApp.launchViaIntent(wmHelper, stringExtras = stringExtras) + pipApp.launchViaIntentAndWaitForPip(wmHelper, stringExtras = stringExtras) wmHelper.waitPipShown() } } eachRun { if (eachRun) { - pipApp.launchViaIntent(wmHelper, stringExtras = stringExtras) + pipApp.launchViaIntentAndWaitForPip(wmHelper, stringExtras = stringExtras) wmHelper.waitPipShown() } } @@ -145,7 +144,6 @@ abstract class PipTransition(protected val testSpec: FlickerTestParameter) { if (!eachRun) { pipApp.exit(wmHelper) } - removeAllTasksButHome() } } diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp index 63b831de5da1..c8cc3526d792 100644 --- a/libs/androidfw/Android.bp +++ b/libs/androidfw/Android.bp @@ -33,6 +33,7 @@ license { cc_defaults { name: "libandroidfw_defaults", + cpp_std: "gnu++2b", cflags: [ "-Werror", "-Wunreachable-code", diff --git a/libs/androidfw/include/androidfw/StringPiece.h b/libs/androidfw/include/androidfw/StringPiece.h index 921877dc4982..fac2fa4fa575 100644 --- a/libs/androidfw/include/androidfw/StringPiece.h +++ b/libs/androidfw/include/androidfw/StringPiece.h @@ -288,12 +288,12 @@ inline ::std::basic_string<TChar>& operator+=(::std::basic_string<TChar>& lhs, template <typename TChar> inline bool operator==(const ::std::basic_string<TChar>& lhs, const BasicStringPiece<TChar>& rhs) { - return rhs == lhs; + return BasicStringPiece<TChar>(lhs) == rhs; } template <typename TChar> inline bool operator!=(const ::std::basic_string<TChar>& lhs, const BasicStringPiece<TChar>& rhs) { - return rhs != lhs; + return BasicStringPiece<TChar>(lhs) != rhs; } } // namespace android diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 6e695e68fbf2..2f95928b9b0a 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -8448,6 +8448,22 @@ public class AudioManager { } } + /** + * Returns the audio HAL version in the form MAJOR.MINOR. If there is no audio HAL found, null + * will be returned. + * + * @hide + */ + @TestApi + public static @Nullable String getHalVersion() { + try { + return getService().getHalVersion(); + } catch (RemoteException e) { + Log.e(TAG, "Error querying getHalVersion", e); + throw e.rethrowFromSystemServer(); + } + } + private final Object mMuteAwaitConnectionListenerLock = new Object(); @GuardedBy("mMuteAwaitConnectionListenerLock") diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index d702eb9aef57..4fdfcdd89503 100755 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -480,7 +480,6 @@ interface IAudioService { boolean sendFocusLoss(in AudioFocusInfo focusLoser, in IAudioPolicyCallback apcb); - @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)") void addAssistantServicesUids(in int[] assistantUID); @@ -501,4 +500,6 @@ interface IAudioService { in IAudioDeviceVolumeDispatcher cb, in String packageName, in AudioDeviceAttributes device, in List<VolumeInfo> volumes); + + String getHalVersion(); } diff --git a/packages/CompanionDeviceManager/Android.bp b/packages/CompanionDeviceManager/Android.bp index 6ded16371e8a..9f5bfd40e7e3 100644 --- a/packages/CompanionDeviceManager/Android.bp +++ b/packages/CompanionDeviceManager/Android.bp @@ -34,6 +34,7 @@ license { android_app { name: "CompanionDeviceManager", defaults: ["platform_app_defaults"], + certificate: "platform", srcs: ["src/**/*.java"], static_libs: [ diff --git a/packages/CompanionDeviceManager/AndroidManifest.xml b/packages/CompanionDeviceManager/AndroidManifest.xml index 06f2d9d0f0c8..8b5d214f7a10 100644 --- a/packages/CompanionDeviceManager/AndroidManifest.xml +++ b/packages/CompanionDeviceManager/AndroidManifest.xml @@ -31,6 +31,7 @@ <uses-permission android:name="android.permission.RADIO_SCAN_WITHOUT_LOCATION"/> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/> <application android:allowClearUserData="true" diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java index b51d3103caec..a6a8fcf9af62 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java @@ -37,6 +37,7 @@ import android.companion.AssociationRequest; import android.companion.CompanionDeviceManager; import android.companion.IAssociationRequestCallback; import android.content.Intent; +import android.content.pm.PackageManager; import android.net.MacAddress; import android.os.Bundle; import android.os.Handler; @@ -71,6 +72,9 @@ public class CompanionDeviceActivity extends AppCompatActivity { private static final String EXTRA_ASSOCIATION_REQUEST = "association_request"; private static final String EXTRA_RESULT_RECEIVER = "result_receiver"; + // Activity result: Internal Error. + private static final int RESULT_INTERNAL_ERROR = 2; + // AssociationRequestsProcessor -> UI private static final int RESULT_CODE_ASSOCIATION_CREATED = 0; private static final String EXTRA_ASSOCIATION = "association"; @@ -191,6 +195,20 @@ public class CompanionDeviceActivity extends AppCompatActivity { private void initUI() { if (DEBUG) Log.d(TAG, "initUI(), request=" + mRequest); + final String packageName = mRequest.getPackageName(); + final int userId = mRequest.getUserId(); + final CharSequence appLabel; + + try { + appLabel = getApplicationLabel(this, packageName, userId); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Package u" + userId + "/" + packageName + " not found."); + + CompanionDeviceDiscoveryService.stop(this); + setResultAndFinish(null, RESULT_INTERNAL_ERROR); + return; + } + setContentView(R.layout.activity_confirmation); mTitle = findViewById(R.id.title); @@ -203,8 +221,6 @@ public class CompanionDeviceActivity extends AppCompatActivity { mButtonAllow.setOnClickListener(this::onPositiveButtonClick); findViewById(R.id.btn_negative).setOnClickListener(this::onNegativeButtonClick); - final CharSequence appLabel = getApplicationLabel(this, mRequest.getPackageName()); - if (mRequest.isSelfManaged()) { initUiForSelfManagedAssociation(appLabel); } else if (mRequest.isSingleDevice()) { @@ -257,7 +273,7 @@ public class CompanionDeviceActivity extends AppCompatActivity { if (DEBUG) Log.i(TAG, "onAssociationCreated(), association=" + association); // Don't need to notify the app, CdmService has already done that. Just finish. - setResultAndFinish(association); + setResultAndFinish(association, RESULT_OK); } private void cancel(boolean discoveryTimeout) { @@ -284,10 +300,10 @@ public class CompanionDeviceActivity extends AppCompatActivity { } // ... then set result and finish ("sending" onActivityResult()). - setResultAndFinish(null); + setResultAndFinish(null, RESULT_CANCELED); } - private void setResultAndFinish(@Nullable AssociationInfo association) { + private void setResultAndFinish(@Nullable AssociationInfo association, int resultCode) { if (DEBUG) Log.i(TAG, "setResultAndFinish(), association=" + association); final Intent data = new Intent(); @@ -297,7 +313,7 @@ public class CompanionDeviceActivity extends AppCompatActivity { data.putExtra(CompanionDeviceManager.EXTRA_DEVICE, mSelectedDevice.getDevice()); } } - setResult(association != null ? RESULT_OK : RESULT_CANCELED, data); + setResult(resultCode, data); finish(); } diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/Utils.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/Utils.java index eab421e48446..e3e563d56e8a 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/Utils.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/Utils.java @@ -50,14 +50,13 @@ class Utils { } static @NonNull CharSequence getApplicationLabel( - @NonNull Context context, @NonNull String packageName) { + @NonNull Context context, @NonNull String packageName, int userId) + throws PackageManager.NameNotFoundException { final PackageManager packageManager = context.getPackageManager(); - final ApplicationInfo appInfo; - try { - appInfo = packageManager.getApplicationInfo(packageName, 0); - } catch (PackageManager.NameNotFoundException e) { - throw new RuntimeException(e); - } + + final ApplicationInfo appInfo = packageManager.getApplicationInfoAsUser( + packageName, PackageManager.ApplicationInfoFlags.of(0), userId); + return packageManager.getApplicationLabel(appInfo); } diff --git a/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java b/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java index 44b3b4e8488a..706aba3d156f 100644 --- a/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java +++ b/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java @@ -51,27 +51,34 @@ public class ActivityEmbeddingUtils { } /** - * Whether current activity is embedded in the Settings app or not. + * Whether the current activity is embedded in the Settings app or not. + * + * @param activity Activity that needs the check */ public static boolean isActivityEmbedded(Activity activity) { return SplitController.getInstance().isActivityEmbedded(activity); } /** - * Whether current activity is suggested to show back button or not. + * Whether the current activity should hide the navigate up button. + * + * @param activity Activity that needs the check + * @param isSecondLayerPage indicates if the activity(page) is shown in the 2nd layer of + * Settings app */ - public static boolean shouldHideBackButton(Activity activity, boolean isSecondaryLayerPage) { + public static boolean shouldHideNavigateUpButton(Activity activity, boolean isSecondLayerPage) { if (!BuildCompat.isAtLeastT()) { return false; } - if (!isSecondaryLayerPage) { + if (!isSecondLayerPage) { return false; } - final String shouldHideBackButton = Settings.Global.getString(activity.getContentResolver(), - "settings_hide_secondary_page_back_button_in_two_pane"); + final String shouldHideNavigateUpButton = + Settings.Global.getString(activity.getContentResolver(), + "settings_hide_second_layer_page_navigate_up_button_in_two_pane"); - if (TextUtils.isEmpty(shouldHideBackButton) - || TextUtils.equals("true", shouldHideBackButton)) { + if (TextUtils.isEmpty(shouldHideNavigateUpButton) + || Boolean.parseBoolean(shouldHideNavigateUpButton)) { return isActivityEmbedded(activity); } return false; diff --git a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java index 93be66ad4882..1e1dfae9f7ac 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java @@ -81,6 +81,7 @@ public class AvatarPickerActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.SudThemeGlifV3_DayNight); ThemeHelper.trySetDynamicColor(this); setContentView(R.layout.avatar_picker); setUpButtons(); diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index f0b180e5cab6..121f9e58a62a 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -588,6 +588,9 @@ <uses-permission android:name="android.permission.MANAGE_HOTWORD_DETECTION" /> <uses-permission android:name="android.permission.BIND_HOTWORD_DETECTION_SERVICE" /> + <!-- Permission required for CTS test - KeyguardLockedStateApiTest --> + <uses-permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" /> + <uses-permission android:name="android.permission.MANAGE_APP_HIBERNATION"/> <!-- Permission required for CTS test - ResourceObserverNativeTest --> diff --git a/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml b/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml new file mode 100644 index 000000000000..0544b871fa06 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2021 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT 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" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + android:color="?android:attr/colorControlHighlight"> + <item android:id="@android:id/mask"> + <shape android:shape="rectangle"> + <solid android:color="@android:color/white"/> + <corners android:radius="18dp"/> + </shape> + </item> + <item> + <shape android:shape="rectangle"> + <corners android:radius="18dp"/> + <solid android:color="?androidprv:attr/colorAccentPrimary"/> + </shape> + </item> +</ripple> diff --git a/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml b/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml index a3e289a42d05..e06bfdc500da 100644 --- a/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml +++ b/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml @@ -22,10 +22,6 @@ android:scrollbarAlwaysDrawVerticalTrack="true" android:scrollIndicators="top|bottom" android:fillViewport="true" - android:paddingTop="@dimen/dialog_button_bar_top_padding" - android:paddingStart="@dimen/dialog_side_padding" - android:paddingEnd="@dimen/dialog_side_padding" - android:paddingBottom="@dimen/dialog_bottom_padding" style="?android:attr/buttonBarStyle"> <com.android.internal.widget.ButtonBarLayout android:layout_width="match_parent" diff --git a/packages/SystemUI/res/layout/alert_dialog_systemui.xml b/packages/SystemUI/res/layout/alert_dialog_systemui.xml index f280cbd16a0f..ca8fadd9c7da 100644 --- a/packages/SystemUI/res/layout/alert_dialog_systemui.xml +++ b/packages/SystemUI/res/layout/alert_dialog_systemui.xml @@ -83,9 +83,15 @@ android:layout_height="wrap_content" /> </FrameLayout> - <include + <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" - layout="@layout/alert_dialog_button_bar_systemui" /> + android:paddingStart="@dimen/dialog_side_padding" + android:paddingEnd="@dimen/dialog_side_padding"> + <include + android:layout_width="match_parent" + android:layout_height="wrap_content" + layout="@layout/alert_dialog_button_bar_systemui" /> + </FrameLayout> </com.android.internal.widget.AlertDialogLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 42955caf5ae9..d8e1dae4c1c3 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ontkoppel)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan nie wissel nie. Tik om weer te probeer."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Bind nuwe toestel saam"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Bounommer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Bounommer is na knipbord gekopieer."</string> <string name="basic_status" msgid="2315371112182658176">"Maak gesprek oop"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktiewe programme</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiewe program</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nuwe inligting"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiewe programme"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Gestop"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Wysig gekopieerde teks"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Wysig gekopieerde prent"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Stuur na toestel in die omtrek"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Voeg by"</string> + <string name="manage_users" msgid="1823875311934643849">"Bestuur gebruikers"</string> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 03ae0e41ff41..7138755e94ba 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ተቋርጧል)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"መቀየር አይቻልም። እንደገና ለመሞከር መታ ያድርጉ።"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"አዲስ መሣሪያ ያጣምሩ"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"የግንብ ቁጥር"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"የገንባ ቁጥር ወደ ቅንጥብ ሰሌዳ ተቀድቷል።"</string> <string name="basic_status" msgid="2315371112182658176">"ውይይት ይክፈቱ"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ገቢር መተግበሪያዎች</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ገቢር መተግበሪያዎች</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"አዲስ መረጃ"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ገቢር መተግበሪያዎች"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"መቆሚያ"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ቆሟል"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"የተቀዳ ጽሁፍ አርትዕ ያድርጉ"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"የተቀዳ ምስል አርትዕ ያድርጉ"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"በአቅራቢያ ወዳለ መሳሪያ ይላኩ"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"አክል"</string> + <string name="manage_users" msgid="1823875311934643849">"ተጠቃሚዎችን ያስተዳድሩ"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 38dcb89cd56d..46e9251e3c34 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -830,6 +830,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(غير متّصل)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"لا يمكن التبديل. انقر لإعادة المحاولة."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"إقران جهاز جديد"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"رقم الإصدار"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"تم نسخ رقم الإصدار إلى الحافظة."</string> <string name="basic_status" msgid="2315371112182658176">"محادثة مفتوحة"</string> @@ -905,8 +909,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> تطبيق نشط</item> <item quantity="one">تطبيق واحد (<xliff:g id="COUNT_0">%s</xliff:g>) نشط</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"معلومات جديدة"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"# تطبيق نشط"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"إيقاف"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"متوقّف"</string> @@ -914,14 +917,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"تم النسخ."</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"من <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"إغلاق واجهة مستخدم النسخ"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"تعديل النص المنسوخ"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"تعديل الصورة المنسوخة"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"الإرسال إلى جهاز مجاور"</string> + <string name="add" msgid="81036585205287996">"إضافة"</string> + <string name="manage_users" msgid="1823875311934643849">"إدارة المستخدمين"</string> </resources> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 8d8a0fb32d96..beb91b73d57a 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(সংযোগ বিচ্ছিন্ন কৰা হৈছে)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"সলনি কৰিব নোৱাৰি। আকৌ চেষ্টা কৰিবলৈ টিপক।"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"নতুন ডিভাইচ পেয়াৰ কৰক"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"বিল্ডৰ নম্বৰ"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ক্লিপব’ৰ্ডলৈ বিল্ডৰ নম্বৰ প্ৰতিলিপি কৰা হ’ল।"</string> <string name="basic_status" msgid="2315371112182658176">"বাৰ্তালাপ খোলক"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> টা সক্ৰিয় এপ্</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> টা সক্ৰিয় এপ্</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"নতুন তথ্য"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"সক্ৰিয় এপ্"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"বন্ধ কৰক"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"বন্ধ হ’ল"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"প্ৰতিলিপি কৰা পাঠ সম্পাদনা কৰক"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"প্ৰতিলিপি কৰা প্ৰতিচ্ছবি সম্পাদনা কৰক"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"নিকটৱৰ্তী ডিভাইচলৈ পঠাওক"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"যোগ দিয়ক"</string> + <string name="manage_users" msgid="1823875311934643849">"ব্যৱহাৰকাৰী পৰিচালনা কৰক"</string> </resources> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 1fc28a88d390..97c3c76fd39f 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(bağlantı kəsildi)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Dəyişmək olmur. Yenidən cəhd etmək üçün toxunun."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Cihaz əlavə edin"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Montaj nömrəsi"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Versiya nömrəsi mübadilə buferinə kopyalandı."</string> <string name="basic_status" msgid="2315371112182658176">"Açıq söhbət"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktiv tətbiq</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiv tətbiq</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yeni məlumat"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiv tətbiqlər"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Dayandırın"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Dayandırılıb"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopyalandı"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Mənbə: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"UI kopyalanmasını qapadın"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Kopyalanmış mətni redaktə edin"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Kopyalanmış şəkli redaktə edin"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Yaxınlıqdakı cihaza göndərin"</string> + <string name="add" msgid="81036585205287996">"Əlavə edin"</string> + <string name="manage_users" msgid="1823875311934643849">"İstifadəçiləri idarə edin"</string> </resources> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 555b477770a4..5ac201b29d25 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(veza je prekinuta)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Prebacivanje nije uspelo. Probajte ponovo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Upari novi uređaj"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj verzije"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Broj verzije je kopiran u privremenu memoriju."</string> <string name="basic_status" msgid="2315371112182658176">"Otvorite konverzaciju"</string> @@ -884,8 +888,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aktivne aplikacije</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktivnih aplikacija</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nove informacije"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivne aplikacije"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Zaustavi"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zaustavljeno"</string> @@ -893,14 +896,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopirano je"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Iz: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Odbaci kopiranje korisničkog interfejsa"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Izmenite kopirani tekst"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Izmenite kopiranu sliku"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Pošalji na uređaj u blizini"</string> + <string name="add" msgid="81036585205287996">"Dodaj"</string> + <string name="manage_users" msgid="1823875311934643849">"Upravljajte korisnicima"</string> </resources> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 744600740be6..b87f9f971f53 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(адключана)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не ўдалося пераключыцца. Дакраніцеся, каб паўтарыць спробу."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Спалучыць з новай прыладай"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Нумар зборкі"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Нумар зборкі скапіраваны ў буфер абмену."</string> <string name="basic_status" msgid="2315371112182658176">"Адкрытая размова"</string> @@ -891,8 +895,7 @@ <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> актыўных праграм</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> актыўнай праграмы</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Новая інфармацыя"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Актыўныя праграмы"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Спыніць"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Спынена"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Скапіравана"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"З праграмы \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Закрыць інтэрфейс капіравання"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Змяніць скапіраваны тэкст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Змяніць скапіраваны відарыс"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Адправіць на прыладу паблізу"</string> + <string name="add" msgid="81036585205287996">"Дадаць"</string> + <string name="manage_users" msgid="1823875311934643849">"Кіраванне карыстальнікамі"</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index f7a1ad65b0f0..3d0fee975970 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(връзката е прекратена)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не може да се превключи. Докоснете за нов опит."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Сдвояване на ново устройство"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер на компилацията"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Номерът на компилацията е копиран в буферната памет."</string> <string name="basic_status" msgid="2315371112182658176">"Отворен разговор"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> активни приложения</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> активно приложение</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Нова информация"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Активни приложения"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Спиране"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Спряно"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Копирано"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"От <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Отхвърляне на ПИ за копиране"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Редактиране на копирания текст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Редактиране на копираното изображение"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Изпращане до устройство в близост"</string> + <string name="add" msgid="81036585205287996">"Добавяне"</string> + <string name="manage_users" msgid="1823875311934643849">"Управление на потребителите"</string> </resources> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 36a5bc48b2b4..3cf36e62a2e3 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ডিসকানেক্ট হয়ে গেছে)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"পাল্টানো যাচ্ছে না। আবার চেষ্টা করতে ট্যাপ করুন।"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"নতুন ডিভাইস পেয়ার করুন"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"বিল্ড নম্বর"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"বিল্ড নম্বর ক্লিপবোর্ডে কপি করা হয়েছে।"</string> <string name="basic_status" msgid="2315371112182658176">"খোলা কথোপকথন"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g>টি অ্যাক্টিভ অ্যাপ</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g>টি অ্যাক্টিভ অ্যাপ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"নতুন তথ্য"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"অ্যাক্টিভ অ্যাপ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"বন্ধ করুন"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"থামানো হয়েছে"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"কপি করা টেক্সট এডিট করুন"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"কপি করা ছবি এডিট করুন"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"আশেপাশের ডিভাইসে পাঠান"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"যোগ করুন"</string> + <string name="manage_users" msgid="1823875311934643849">"ব্যবহারকারীদের ম্যানেজ করুন"</string> </resources> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 1545c43aafbd..b432204a982f 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -692,7 +692,7 @@ <string name="running_foreground_services_title" msgid="5137313173431186685">"Aplikacije koje rade u pozadini"</string> <string name="running_foreground_services_msg" msgid="3009459259222695385">"Dodirnite za detalje o potrošnji baterije i prijenosa podataka"</string> <string name="mobile_data_disable_title" msgid="5366476131671617790">"Isključiti prijenos podataka na mobilnoj mreži?"</string> - <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nećete imati pristup podacima ni internetu putem mobilnog operatera <xliff:g id="CARRIER">%s</xliff:g>. Internet će biti dostupan samo putem WiFi mreže."</string> + <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nećete imati pristup podacima ni internetu putem mobilnog operatera <xliff:g id="CARRIER">%s</xliff:g>. Internet će biti dostupan samo putem WiFi-ja."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"vaš operater"</string> <string name="touch_filtered_warning" msgid="8119511393338714836">"Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Dozvoliti aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> da prikazuje isječke aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string> @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(veza je prekinuta)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nije moguće prebaciti. Dodirnite da pokušate ponovo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uparite novi uređaj"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj verzije"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Broj verzije je kopiran u međumemoriju."</string> <string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string> @@ -884,8 +888,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aktivne aplikacije</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktivnih aplikacija</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nove informacije"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivne aplikacije"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Zaustavi"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zaustavljeno"</string> @@ -896,8 +899,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Uredi kopirani tekst"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Uredi kopiranu sliku"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Pošalji na uređaj u blizini"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Dodaj"</string> + <string name="manage_users" msgid="1823875311934643849">"Upravljajte korisnicima"</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 621f5f9a5383..d13b504af6e4 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconnectat)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No es pot canviar. Torna-ho a provar."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincula un dispositiu nou"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilació"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"El número de compilació s\'ha copiat al porta-retalls."</string> <string name="basic_status" msgid="2315371112182658176">"Conversa oberta"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicacions actives</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicació activa</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informació nova"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicacions actives"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Atura"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Aturada"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"S\'ha copiat"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"De: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ignora la IU de còpia"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edita el text que has copiat"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edita la imatge que has copiat"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Envia a un dispositiu proper"</string> + <string name="add" msgid="81036585205287996">"Afegeix"</string> + <string name="manage_users" msgid="1823875311934643849">"Gestiona els usuaris"</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index ba976883136f..74720a3f591c 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odpojeno)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nelze přepnout. Klepnutím opakujte akci."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Spárovat nové zařízení"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Číslo sestavení"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Číslo sestavení bylo zkopírováno do schránky."</string> <string name="basic_status" msgid="2315371112182658176">"Otevřít konverzaci"</string> @@ -891,8 +895,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktivních aplikací</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktivních aplikací</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nové informace"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivní aplikace"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Konec"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zastaveno"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Zkopírováno"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Z aplikace <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Zavřít uživatelské rozhraní kopírování"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Upravit zkopírovaný text"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Upravit zkopírovaný obrázek"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Odeslat do zařízení v okolí"</string> + <string name="add" msgid="81036585205287996">"Přidat"</string> + <string name="manage_users" msgid="1823875311934643849">"Správa uživatelů"</string> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index bbcb9bc0b530..59fd98529d02 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(afbrudt)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Det var ikke muligt at skifte. Tryk for at prøve igen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Par ny enhed"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Buildnummer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Buildnummeret blev kopieret til udklipsholderen."</string> <string name="basic_status" msgid="2315371112182658176">"Åben samtale"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aktiv app</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktive apps</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nye oplysninger"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stoppet"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopieret"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Fra <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Luk brugerfladen for kopi"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Rediger kopieret tekst"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Rediger kopieret billede"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send til enhed i nærheden"</string> + <string name="add" msgid="81036585205287996">"Tilføj"</string> + <string name="manage_users" msgid="1823875311934643849">"Administrer brugere"</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 2b9f725e24e4..d6ec9a9049fe 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nicht verbunden)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Wechseln nicht möglich. Tippe, um es noch einmal zu versuchen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Neues Gerät koppeln"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build-Nummer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build-Nummer in Zwischenablage kopiert."</string> <string name="basic_status" msgid="2315371112182658176">"Offene Unterhaltung"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktive Apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktive App</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Neue Informationen"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive Apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Beenden"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Beendet"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopiert"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Von <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Kopieren-Benutzeroberfläche schließen"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Kopierten Text bearbeiten"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Kopiertes Bild bearbeiten"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"An Gerät in der Nähe senden"</string> + <string name="add" msgid="81036585205287996">"Hinzufügen"</string> + <string name="manage_users" msgid="1823875311934643849">"Nutzer verwalten"</string> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 609674929af5..b293bbf44864 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(αποσυνδέθηκε)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Δεν είναι δυνατή η εναλλαγή. Πατήστε για επανάληψη."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Σύζευξη νέας συσκευής"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Αριθμός έκδοσης"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Ο αριθμός έκδοσης αντιγράφηκε στο πρόχειρο."</string> <string name="basic_status" msgid="2315371112182658176">"Άνοιγμα συνομιλίας"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ενεργές εφαρμογές</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ενεργή εφαρμογή</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Νέες πληροφορίες"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ενεργές εφαρμογές"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Διακοπή"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Διακόπηκε"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Αντιγράφηκε"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Από <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Παράβλεψη διεπαφής χρήστη αντιγραφής"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Επεξεργασία αντιγραμμένου κειμένου"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Επεξεργασία αντιγραμμένης εικόνας"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Αποστολή σε κοντινή συσκευή"</string> + <string name="add" msgid="81036585205287996">"Προσθήκη"</string> + <string name="manage_users" msgid="1823875311934643849">"Διαχείριση χρηστών"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index f6dc3145bc9c..8d6a48d05908 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> active apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> active app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stopped"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit copied text"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit copied image"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send to nearby device"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Add"</string> + <string name="manage_users" msgid="1823875311934643849">"Manage users"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 0b4e00945337..165db2f1986d 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> active apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> active app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stopped"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit copied text"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit copied image"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send to nearby device"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Add"</string> + <string name="manage_users" msgid="1823875311934643849">"Manage users"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index f6dc3145bc9c..8d6a48d05908 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> active apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> active app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stopped"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit copied text"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit copied image"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send to nearby device"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Add"</string> + <string name="manage_users" msgid="1823875311934643849">"Manage users"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index f6dc3145bc9c..8d6a48d05908 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> active apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> active app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stopped"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit copied text"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit copied image"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send to nearby device"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Add"</string> + <string name="manage_users" msgid="1823875311934643849">"Manage users"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 18d87f3f6208..690a0af6a04e 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -806,6 +806,8 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string> + <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"To cast this session, please open the app."</string> + <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unknown app"</string> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 3f1cc42f880b..7df76de6e460 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No se pudo conectar. Presiona para volver a intentarlo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincular dispositivo nuevo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Se copió el número de compilación en el portapapeles."</string> <string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps activas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app activa</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nueva información"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps activas"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Detener"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Detenida"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Se copió"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"De <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Descartar la copia de la IU"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar el texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar la imagen copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar a dispositivos cercanos"</string> + <string name="add" msgid="81036585205287996">"Agregar"</string> + <string name="manage_users" msgid="1823875311934643849">"Administrar usuarios"</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index b84ed6512bdb..14484a53c5a9 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No se puede cambiar. Toca para volver a intentarlo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Emparejar nuevo dispositivo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Número de compilación copiado en el portapapeles."</string> <string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicaciones activas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicación activa</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Información nueva"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicaciones activas"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Detener"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Detenida"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiado"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Cerrar la interfaz de copia"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar imagen copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar a dispositivo cercano"</string> + <string name="add" msgid="81036585205287996">"Añadir"</string> + <string name="manage_users" msgid="1823875311934643849">"Gestionar usuarios"</string> </resources> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 91250c384eb3..81ef3848d4f5 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ühendus on katkestatud)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ei saa lülitada. Puudutage uuesti proovimiseks."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uue seadme sidumine"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Järgunumber"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Järgunumber kopeeriti lõikelauale."</string> <string name="basic_status" msgid="2315371112182658176">"Avage vestlus"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktiivset rakendust</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiivne rakendus</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Uus teave"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiivsed rakendused"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Peata"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Peatatud"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopeeritud"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Rakendusest <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Koopiast loobumise kasutajaliides"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Muuda kopeeritud teksti"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Muuda kopeeritud pilti"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Saada läheduses olevasse seadmesse"</string> + <string name="add" msgid="81036585205287996">"Lisa"</string> + <string name="manage_users" msgid="1823875311934643849">"Kasutajate haldamine"</string> </resources> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index b531794dc7a9..b7d52cbd9489 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(deskonektatuta)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ezin da aldatu. Berriro saiatzeko, sakatu hau."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parekatu beste gailu batekin"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Konpilazio-zenbakia"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Kopiatu da konpilazio-zenbakia arbelean."</string> <string name="basic_status" msgid="2315371112182658176">"Elkarrizketa irekia"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikazio aktibo</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikazio aktibo</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informazio berria"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktibo dauden aplikazioak"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Gelditu"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Geldituta"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopiatu da"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Jatorria: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Kopiatutako UIa baztertzeko botoia"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editatu kopiatutako testua"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editatu kopiatutako irudia"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Bidali inguruko gailu batera"</string> + <string name="add" msgid="81036585205287996">"Gehitu"</string> + <string name="manage_users" msgid="1823875311934643849">"Kudeatu erabiltzaileak"</string> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 642a82635396..9fb96265e29a 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(اتصال قطع شد)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"عوض نمیشود. برای تلاش مجدد ضربه بزنید."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"مرتبط کردن دستگاه جدید"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"شماره ساخت"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"شماره ساخت در بریدهدان کپی شد."</string> <string name="basic_status" msgid="2315371112182658176">"باز کردن مکالمه"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> برنامه فعال</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> برنامه فعال</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"اطلاعات جدید"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"برنامههای فعال"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"توقف"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"متوقف شد"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"کپی شد"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"از <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"رد کردن رابط کاربری کپی کردن"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"ویرایش نوشتار کپیشده"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"ویرایش تصویر کپیشده"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ارسال به دستگاهی در اطراف"</string> + <string name="add" msgid="81036585205287996">"افزودن"</string> + <string name="manage_users" msgid="1823875311934643849">"مدیریت کاربران"</string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index a9c11bce0360..eec7e46a29dd 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(yhteys katkaistu)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Vaihtaminen ei onnistunut. Yritä uudelleen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Muodosta uusi laitepari"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Koontiversion numero"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Koontiversion numero kopioitu leikepöydälle"</string> <string name="basic_status" msgid="2315371112182658176">"Avaa keskustelu"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktiivista sovellusta</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiivinen sovellus</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Uutta tietoa"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiiviset sovellukset"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Lopeta"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Pysäytetty"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopioitu"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Lähde: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Hylkää kopioitu UI"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Muokkaa kopioitua tekstiä"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Muokkaa kopioitua kuvaa"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Lähetä lähellä olevaan laitteeseen"</string> + <string name="add" msgid="81036585205287996">"Lisää"</string> + <string name="manage_users" msgid="1823875311934643849">"Ylläpidä käyttäjiä"</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 3ee8efa56019..0ec3fdf8b0b9 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(déconnecté)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Changement impossible. Touchez pour réessayer."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Associer un autre appareil"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numéro de version"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Le numéro de version a été copié dans le presse-papiers."</string> <string name="basic_status" msgid="2315371112182658176">"Ouvrir la conversation"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> application active</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applications actives</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelle information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Applications actives"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Arrêter"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Arrêtée"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copié"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"À partir de <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ignorer la copie de l\'IU"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Modifier le texte copié"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Modifier l\'image copiée"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Envoyer à un appareil à proximité"</string> + <string name="add" msgid="81036585205287996">"Ajouter"</string> + <string name="manage_users" msgid="1823875311934643849">"Gérer les utilisateurs"</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 0af35baae386..cbbee60f41a3 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(déconnecté)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Impossible de changer. Appuyez pour réessayer."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Associer un nouvel appareil"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numéro de build"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Numéro de build copié dans le presse-papiers."</string> <string name="basic_status" msgid="2315371112182658176">"Conversation ouverte"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> appli active</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applis actives</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelles informations"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Applis actives"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Arrêter"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Arrêtée"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copié"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"De <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Désactiver l\'interface de copie"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Modifier le texte copié"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Modifier l\'image copiée"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Envoyer à un appareil à proximité"</string> + <string name="add" msgid="81036585205287996">"Ajouter"</string> + <string name="manage_users" msgid="1823875311934643849">"Gérer les utilisateurs"</string> </resources> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 81efcb54769b..cc359257770d 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Non se puido realizar o cambio. Toca para tentalo de novo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincular dispositivo novo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Copiouse o número de compilación no portapapeis."</string> <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicacións activas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicación activa</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova información"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicacións activas"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Deter"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Detida"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiouse"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"De <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ignorar interface de copia"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar imaxe copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar a dispositivo próximo"</string> + <string name="add" msgid="81036585205287996">"Engadir"</string> + <string name="manage_users" msgid="1823875311934643849">"Xestionar usuarios"</string> </resources> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 98510d5012f6..90618a6d7a1f 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ડિસ્કનેક્ટ કરેલું)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"સ્વિચ કરી શકતા નથી. ફરી પ્રયાસ કરવા માટે ટૅપ કરો."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"નવા ડિવાઇસ સાથે જોડાણ કરો"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"બિલ્ડ નંબર"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"બિલ્ડ નંબર ક્લિપબૉર્ડ પર કૉપિ કર્યો."</string> <string name="basic_status" msgid="2315371112182658176">"વાતચીત ખોલો"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> સક્રિય ઍપ</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> સક્રિય ઍપ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"નવી માહિતી"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"સક્રિય ઍપ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"રોકો"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"બંધ કરેલી છે"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"કૉપિ કરવામાં આવી"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g>માંથી"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"\'UI | યૂઝર ઇન્ટરફેસ (UI) કૉપિ કરો\'ને છોડી દો"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"કૉપિ કરેલી ટેક્સ્ટમાં ફેરફાર કરો"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"કૉપિ કરેલી છબીમાં ફેરફાર કરો"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"નજીકના ડિવાઇસને મોકલો"</string> + <string name="add" msgid="81036585205287996">"ઉમેરો"</string> + <string name="manage_users" msgid="1823875311934643849">"વપરાશકર્તાઓને મેનેજ કરો"</string> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 2631f550d459..d47c71a943f3 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(डिसकनेक्ट हो गया)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"स्विच नहीं किया जा सकता. फिर से कोशिश करने के लिए टैप करें."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"नया डिवाइस जोड़ें"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नंबर"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नंबर को क्लिपबोर्ड पर कॉपी किया गया."</string> <string name="basic_status" msgid="2315371112182658176">"ऐसी बातचीत जिसमें इंटरैक्शन डेटा मौजूद नहीं है"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ऐप्लिकेशन चालू है</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ऐप्लिकेशन चालू हैं</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"नई जानकारी"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ये ऐप्लिकेशन चालू हैं"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"बंद करें"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"रुका हुआ है"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"कॉपी किया गया"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> से"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"कॉपी किया गया यूज़र इंटरफ़ेस (यूआई) खारिज करें"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"कॉपी किए गए टेक्स्ट में बदलाव करें"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"कॉपी की गई इमेज में बदलाव करें"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"कॉन्टेंट को आस-पास मौजूद डिवाइस पर भेजें"</string> + <string name="add" msgid="81036585205287996">"जोड़ें"</string> + <string name="manage_users" msgid="1823875311934643849">"उपयोगकर्ताओं को मैनेज करें"</string> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index da84b86547d1..64fdabb3c2f9 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nije povezano)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nije prebačeno. Dodirnite da biste pokušali ponovo."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uparite novi uređaj"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj međuverzije"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Broj međuverzije kopiran je u međuspremnik."</string> <string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string> @@ -884,8 +888,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aktivne aplikacije</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktivnih aplikacija</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nove informacije"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivne aplikacije"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Zaustavi"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zaustavljeno"</string> @@ -893,14 +896,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopirano"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Iz aplikacije <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Odbaci kopiranje korisničkog sučelja"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Uredi kopirani tekst"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Uredi kopiranu sliku"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Pošalji uređaju u blizini"</string> + <string name="add" msgid="81036585205287996">"Dodaj"</string> + <string name="manage_users" msgid="1823875311934643849">"Upravljanje korisnicima"</string> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 30a5be844385..6589e71a71b8 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(leválasztva)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"A váltás nem sikerült. Próbálja újra."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Új eszköz párosítása"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Buildszám"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Buildszám a vágólapra másolva."</string> <string name="basic_status" msgid="2315371112182658176">"Beszélgetés megnyitása"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktív alkalmazás</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktív alkalmazás</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Új információ"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktív alkalmazások"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Leállítás"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Leállítva"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Vágólapra másolt szöveg szerkesztése"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Vágólapra másolt kép szerkesztése"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Küldés közeli eszközre"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Hozzáadás"</string> + <string name="manage_users" msgid="1823875311934643849">"Felhasználók kezelése"</string> </resources> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 443da54eaf3d..fe0e091beedc 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(անջատված է)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Սխալ առաջացավ։ Հպեք՝ կրկնելու համար։"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Նոր սարքի զուգակցում"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Կառուցման համարը"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Կառուցման համարը պատճենվեց սեղմատախտակին։"</string> <string name="basic_status" msgid="2315371112182658176">"Բաց զրույց"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ակտիվ հավելված</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ակտիվ հավելված</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Նոր տեղեկություն"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ակտիվ հավելվածներ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Դադարեցնել"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Կանգնեցված է"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Պատճենվեց"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> հավելվածից"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Փակել պատճենների միջերեսը"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Փոփոխել պատճենված տեքստը"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Փոփոխել պատճենված պատկերը"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Ուղարկել մոտակա սարքի"</string> + <string name="add" msgid="81036585205287996">"Ավելացնել"</string> + <string name="manage_users" msgid="1823875311934643849">"Օգտատերերի կառավարում"</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index c7339c70eb71..cf4e6845ca27 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(terputus)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Tidak dapat beralih. Ketuk untuk mencoba lagi."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sambungkan perangkat baru"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nomor build"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Nomor versi disalin ke papan klip."</string> <string name="basic_status" msgid="2315371112182658176">"Membuka percakapan"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikasi aktif</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikasi aktif</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informasi baru"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplikasi aktif"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Berhenti"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Dihentikan"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Disalin"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Dari <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Tutup UI salin"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit teks yang disalin"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit gambar yang disalin"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Kirim ke perangkat di sekitar"</string> + <string name="add" msgid="81036585205287996">"Tambahkan"</string> + <string name="manage_users" msgid="1823875311934643849">"Kelola pengguna"</string> </resources> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index eddd24648a7b..0ac6c20e065d 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(aftengt)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ekki er hægt að skipta. Ýttu til að reyna aftur."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Para nýtt tæki"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Útgáfunúmer smíðar"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Útgáfunúmer smíðar afritað á klippiborð."</string> <string name="basic_status" msgid="2315371112182658176">"Opna samtal"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> virkt forrit</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> virk forrit</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nýjar upplýsingar"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Virk forrit"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stöðva"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stöðvað"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Afritað"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Frá <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Loka afriti notendaviðmóts"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Breyta afrituðum texta"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Breyta afritaðri mynd"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Senda í nálægt tæki"</string> + <string name="add" msgid="81036585205287996">"Bæta við"</string> + <string name="manage_users" msgid="1823875311934643849">"Stjórna notendum"</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 6a07f79e9e6f..f7af989238d1 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnesso)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Non puoi cambiare. Tocca per riprovare."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Accoppia nuovo dispositivo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numero build"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Numero build copiato negli appunti."</string> <string name="basic_status" msgid="2315371112182658176">"Apri conversazione"</string> @@ -877,22 +881,17 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app attiva</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> app attive</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nuove informazioni"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"App attive"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Interrompi"</string> - <!-- no translation found for fgs_manager_app_item_stop_button_stopped_label (6950382004441263922) --> - <skip /> + <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Interrotta"</string> <string name="clipboard_edit_text_copy" msgid="770856373439969178">"Copia"</string> <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiato"</string> - <!-- no translation found for clipboard_edit_source (9156488177277788029) --> - <skip /> + <string name="clipboard_edit_source" msgid="9156488177277788029">"Da <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ignora copia UI"</string> <string name="clipboard_edit_text_description" msgid="805254383912962103">"Modifica testo copiato"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Modifica immagine copiata"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Invia a dispositivo nelle vicinanze"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Aggiungi"</string> + <string name="manage_users" msgid="1823875311934643849">"Gestisci utenti"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index f959774c81ef..df47c1cc2b63 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(מנותק)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"לא ניתן להחליף. צריך להקיש כדי לנסות שוב."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"התאמה של מכשיר חדש"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"מספר Build"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"מספר ה-Build הועתק ללוח."</string> <string name="basic_status" msgid="2315371112182658176">"פתיחת שיחה"</string> @@ -891,8 +895,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> אפליקציות פעילות</item> <item quantity="one">אפליקציה פעילה אחת (<xliff:g id="COUNT_0">%s</xliff:g>)</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"מידע חדש"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"אפליקציות פעילות"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"עצירה"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"הופסקה"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"הועתק"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"המקור: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"ביטול של העתקת ממשק המשתמש"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"עריכת הטקסט שהועתק"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"עריכת התמונה שהועתקה"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"שליחה למכשיר בקרבת מקום"</string> + <string name="add" msgid="81036585205287996">"הוספה"</string> + <string name="manage_users" msgid="1823875311934643849">"ניהול משתמשים"</string> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 05ddace4a496..f0353b99a1c6 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(接続解除済み)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"切り替えられません。タップしてやり直してください。"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"新しいデバイスとのペア設定"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ビルド番号"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ビルド番号をクリップボードにコピーしました。"</string> <string name="basic_status" msgid="2315371112182658176">"空の会話"</string> @@ -877,8 +881,7 @@ <item quantity="other">有効なアプリ: <xliff:g id="COUNT_1">%s</xliff:g> 個</item> <item quantity="one">有効なアプリ: <xliff:g id="COUNT_0">%s</xliff:g> 個</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"最新情報"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"有効なアプリ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"停止中"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"コピーしたテキストを編集"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"コピーした画像を編集"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"付近のデバイスに送信"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"追加"</string> + <string name="manage_users" msgid="1823875311934643849">"ユーザーの管理"</string> </resources> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index cf77cacaaa3d..a0ce6be4e926 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(კავშირი გაწყვეტილია)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ვერ გადაირთო. შეეხეთ ხელახლა საცდელად."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ახალი მოწყობილობის დაწყვილება"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ანაწყობის ნომერი"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ანაწყობის ნომერი დაკოპირებულია გაცვლის ბუფერში."</string> <string name="basic_status" msgid="2315371112182658176">"მიმოწერის გახსნა"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> აქტიური აპი</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> აქტიური აპი</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ახალი ინფორმაცია"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"აქტიური აპები"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"შეწყვეტა"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"შეწყვეტილია"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"კოპირებული ტექსტის რედაქტირება"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"კოპირებული სურათის რედაქტირება"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ახლომახლო მოწყობილობაზე გაგზავნა"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"დამატება"</string> + <string name="manage_users" msgid="1823875311934643849">"მომხმარებლების მართვა"</string> </resources> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 32d2e512f1a7..42c5d043db7d 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ажыратулы)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ауысу мүмкін емес. Әрекетті қайталау үшін түртіңіз."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Жаңа құрылғымен жұптау"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Құрама нөмірі"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Құрама нөмірі буферге көшірілді."</string> <string name="basic_status" msgid="2315371112182658176">"Ашық әңгіме"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> белсенді қолданба</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> белсенді қолданба</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Жаңа ақпарат"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Белсенді қолданбалар"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Тоқтату"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Тоқтатылған"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Көшірілді"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасынан"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Көшіру интерфейсін жабу"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Көшірілген мәтінді өңдеу"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Көшірілген суретті өңдеу"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Маңайдағы құрылғыға жіберу"</string> + <string name="add" msgid="81036585205287996">"Қосу"</string> + <string name="manage_users" msgid="1823875311934643849">"Пайдаланушыларды басқару"</string> </resources> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 581d3e6bc6b2..72f001fde36f 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(បានដាច់)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"មិនអាចប្ដូរបានទេ។ សូមចុចដើម្បីព្យាយាមម្ដងទៀត។"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ផ្គូផ្គងឧបករណ៍ថ្មី"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"លេខកំណែបង្កើត"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"បានចម្លងលេខកំណែបង្កើតទៅឃ្លីបបត។"</string> <string name="basic_status" msgid="2315371112182658176">"បើកការសន្ទនា"</string> @@ -877,8 +881,7 @@ <item quantity="other">កម្មវិធីសកម្ម <xliff:g id="COUNT_1">%s</xliff:g></item> <item quantity="one">កម្មវិធីសកម្ម <xliff:g id="COUNT_0">%s</xliff:g></item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ព័ត៌មានថ្មី"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"កម្មវិធីសកម្ម"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ឈប់"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"បានឈប់"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"បានចម្លង"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"ពី <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"ច្រានចោល UI ចម្លង"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"កែអត្ថបទដែលបានចម្លង"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"កែរូបភាពដែលបានចម្លង"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ផ្ញើទៅឧបករណ៍នៅជិត"</string> + <string name="add" msgid="81036585205287996">"បញ្ចូល"</string> + <string name="manage_users" msgid="1823875311934643849">"គ្រប់គ្រងអ្នកប្រើប្រាស់"</string> </resources> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index f1428a0abce2..660c966f1d32 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -176,7 +176,7 @@ <skip /> <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ಅಧಿಸೂಚನೆಯ ಛಾಯೆ."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ಲಾಕ್ ಪರದೆ."</string> + <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ಲಾಕ್ ಸ್ಕ್ರೀನ್."</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ಕೆಲಸದ ಲಾಕ್ ಪರದೆ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ಮುಚ್ಚು"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ಸಂಪೂರ್ಣ ನಿಶ್ಯಬ್ಧ"</string> @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ಡಿಸ್ಕನೆಕ್ಟ್ ಆಗಿದೆ)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ಬದಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ಬಿಲ್ಡ್ ಸಂಖ್ಯೆ"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ಬಿಲ್ಡ್ ಸಂಖ್ಯೆಯನ್ನು ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಲ್ಲಿ ನಕಲಿಸಲಾಗಿದೆ."</string> <string name="basic_status" msgid="2315371112182658176">"ಸಂಭಾಷಣೆಯನ್ನು ತೆರೆಯಿರಿ"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ಸಕ್ರಿಯ ಆ್ಯಪ್ಗಳು</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ಸಕ್ರಿಯ ಆ್ಯಪ್ಗಳು</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ಹೊಸ ಮಾಹಿತಿ"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ಸಕ್ರಿಯ ಆ್ಯಪ್ಗಳು"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ನಿಲ್ಲಿಸಿ"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ನಿಲ್ಲಿಸಿದೆ"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"ನಕಲಿಸಿದ ಪಠ್ಯವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"ನಕಲಿಸಿದ ಚಿತ್ರವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಕ್ಕೆ ಕಳುಹಿಸಿ"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"ಸೇರಿಸಿ"</string> + <string name="manage_users" msgid="1823875311934643849">"ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಹಿಸಿ"</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 02246b48d4b1..3d60264d246c 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(연결 끊김)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"전환할 수 없습니다. 다시 시도하려면 탭하세요."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"새 기기와 페어링"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"빌드 번호"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"빌드 번호가 클립보드에 복사되었습니다."</string> <string name="basic_status" msgid="2315371112182658176">"대화 열기"</string> @@ -877,8 +881,7 @@ <item quantity="other">활성 상태의 앱 <xliff:g id="COUNT_1">%s</xliff:g>개</item> <item quantity="one">활성 상태의 앱 <xliff:g id="COUNT_0">%s</xliff:g>개</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"새로운 정보"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"활성 상태의 앱"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"중지"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"중지됨"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"복사됨"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"복사한 위치: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"UI 복사 닫기"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"복사된 텍스트 편집"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"복사된 이미지 편집"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"근처 기기에 전송"</string> + <string name="add" msgid="81036585205287996">"추가"</string> + <string name="manage_users" msgid="1823875311934643849">"사용자 관리"</string> </resources> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index c8c56caa9dea..f16736d5f96d 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ажыратылды)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Которулбай жатат. Кайталоо үчүн басыңыз."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Жаңы түзмөктү жупташтыруу"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Курама номери"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Курама номери алмашуу буферине көчүрүлдү."</string> <string name="basic_status" msgid="2315371112182658176">"Ачык сүйлөшүү"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> жигердүү колдонмо</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> жигердүү колдонмо</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Жаңы маалымат"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Жигердүү колдонмолор"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Токтотуу"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Токтотулду"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Көчүрүлдү"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> колдонмосунан"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Көчүрмөнү жабуу интерфейси"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Көчүрүлгөн текстти түзөтүү"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Көчүрүлгөн сүрөттү түзөтүү"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Жакын жердеги түзмөккө жөнөтүү"</string> + <string name="add" msgid="81036585205287996">"Кошуу"</string> + <string name="manage_users" msgid="1823875311934643849">"Колдонуучуларды башкаруу"</string> </resources> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 6b96c1a57d55..6be5b7ca8638 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ຕັດການເຊື່ອມຕໍ່ແລ້ວ)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ບໍ່ສາມາດສະຫຼັບໄດ້. ແຕະເພື່ອລອງໃໝ່."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ຈັບຄູ່ອຸປະກອນໃໝ່"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ໝາຍເລກສ້າງ"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ສຳເນົາໝາຍເລກສ້າງໄປໃສ່ຄລິບບອດແລ້ວ."</string> <string name="basic_status" msgid="2315371112182658176">"ເປີດການສົນທະນາ"</string> @@ -877,8 +881,7 @@ <item quantity="other">ແອັບທີ່ນຳໃຊ້ຢູ່ <xliff:g id="COUNT_1">%s</xliff:g> ແອັບ</item> <item quantity="one">ແອັບທີ່ນຳໃຊ້ຢູ່ <xliff:g id="COUNT_0">%s</xliff:g> ແອັບ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ຂໍ້ມູນໃໝ່"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ແອັບທີ່ນຳໃຊ້ຢູ່"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ຢຸດ"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ຢຸດແລ້ວ"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"ແກ້ໄຂຂໍ້ຄວາມທີ່ສຳເນົາແລ້ວ"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"ແກ້ໄຂຮູບທີ່ສຳເນົາແລ້ວ"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ສົ່ງໄປຫາອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງ"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"ເພີ່ມ"</string> + <string name="manage_users" msgid="1823875311934643849">"ຈັດການຜູ້ໃຊ້"</string> </resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 5179ad9d3e15..b0878c7405f9 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(atjungta)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nepavyko perjungti. Bandykite vėl palietę."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Naujo įrenginio susiejimas"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versijos numeris"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Versijos numeris nukopijuotas į iškarpinę."</string> <string name="basic_status" msgid="2315371112182658176">"Atidaryti pokalbį"</string> @@ -891,8 +895,7 @@ <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> aktyvios programos</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktyvių programų</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nauja informacija"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktyvios programos"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Sustabdyti"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Sustabdyta"</string> @@ -903,8 +906,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Redaguoti nukopijuotą tekstą"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Redaguoti nukopijuotą vaizdą"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Siųsti į įrenginį netoliese"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Pridėti"</string> + <string name="manage_users" msgid="1823875311934643849">"Tvarkyti naudotojus"</string> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 63b6b2e01d96..c32a047a9343 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(savienojums pārtraukts)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nevar pārslēgt. Pieskarieties, lai mēģinātu vēlreiz."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Savienošana pārī ar jaunu ierīci"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versijas numurs"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Versijas numurs ir kopēts starpliktuvē."</string> <string name="basic_status" msgid="2315371112182658176">"Atvērt sarunu"</string> @@ -884,8 +888,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aktīva lietotne</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktīvas lietotnes</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Jauna informācija"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktīvās lietotnes"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Apturēt"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Apturēta"</string> @@ -893,14 +896,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Nokopēts"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"No lietotnes <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Noraidīt ar kopēšanu saistīto lietotāja saskarnes elementu"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Rediģēt nokopēto tekstu"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Rediģēt nokopēto attēlu"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Sūtīt uz tuvumā esošu ierīci"</string> + <string name="add" msgid="81036585205287996">"Pievienot"</string> + <string name="manage_users" msgid="1823875311934643849">"Pārvaldīt lietotājus"</string> </resources> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 7642a9af994e..c8799da2e2be 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(врската е прекината)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не се префрла. Допрете и обидете се пак."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Спарете нов уред"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Број на верзија"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Бројот на верзијата е копиран во привремената меморија."</string> <string name="basic_status" msgid="2315371112182658176">"Започни разговор"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> активна апликација</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> активни апликации</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Нови информации"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Активни апликации"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Крај"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Запрено"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Копирано"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Од <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Отфрли го корисничкиот интерфејс за копирање"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Изменете го копираниот текст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Изменете ја копираната слика"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Испратете до уред во близина"</string> + <string name="add" msgid="81036585205287996">"Додај"</string> + <string name="manage_users" msgid="1823875311934643849">"Управувајте со корисниците"</string> </resources> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 1bde5a008916..2359ae6ef1c4 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(വിച്ഛേദിച്ചു)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"മാറാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യുക."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"പുതിയ ഉപകരണവുമായി ജോടിയാക്കുക"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ബിൽഡ് നമ്പർ"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ക്ലിപ്പ്ബോർഡിലേക്ക് ബിൽഡ് നമ്പർ പകർത്തി."</string> <string name="basic_status" msgid="2315371112182658176">"സംഭാഷണം തുറക്കുക"</string> @@ -877,8 +881,7 @@ <item quantity="other">സജീവമായ <xliff:g id="COUNT_1">%s</xliff:g> ആപ്പുകൾ</item> <item quantity="one">സജീവമായ <xliff:g id="COUNT_0">%s</xliff:g> ആപ്പ്</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"പുതിയ വിവരങ്ങൾ"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"സജീവമായ ആപ്പുകൾ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"നിർത്തുക"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"നിർത്തി"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"പകർത്തിയ ടെക്സ്റ്റ് എഡിറ്റ് ചെയ്യുക"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"പകർത്തിയ ചിത്രം എഡിറ്റ് ചെയ്യുക"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"സമീപത്തുള്ള ഉപകരണത്തിലേക്ക് അയയ്ക്കുക"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"ചേർക്കുക"</string> + <string name="manage_users" msgid="1823875311934643849">"ഉപയോക്താക്കളെ മാനേജ് ചെയ്യുക"</string> </resources> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index c63bd3d7d9dc..c0902796a2da 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(салсан)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Сэлгэх боломжгүй. Дахин оролдохын тулд товшино уу."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Шинэ төхөөрөмж хослуулах"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Хийцийн дугаар"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Хийцийн дугаарыг түр санах ойд хуулсан."</string> <string name="basic_status" msgid="2315371112182658176">"Харилцан яриаг нээх"</string> @@ -877,8 +881,7 @@ <item quantity="other">Идэвхтэй <xliff:g id="COUNT_1">%s</xliff:g> апп</item> <item quantity="one">Идэвхтэй <xliff:g id="COUNT_0">%s</xliff:g> апп</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Шинэ мэдээлэл"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Идэвхтэй аппууд"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Зогсоох"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Зогсоосон"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Хуулсан текстийг засах"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Хуулсан зургийг засах"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Ойролцоох төхөөрөмж рүү илгээх"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Нэмэх"</string> + <string name="manage_users" msgid="1823875311934643849">"Хэрэглэгчдийг удирдах"</string> </resources> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index fca67d2c5295..eb3b2ebb921e 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(डिस्कनेक्ट केलेले)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"स्विच करू शकत नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"नवीन डिव्हाइससोबत पेअर करा"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नंबर"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नंबर क्लिपबोर्डवर कॉपी केला."</string> <string name="basic_status" msgid="2315371112182658176">"संभाषण उघडा"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> अॅक्टिव्ह ॲप्स</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> अॅक्टिव्ह ॲप</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"नवीन माहिती"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"अॅक्टिव्ह ॲप्स"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"थांबवा"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"थांबवले"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"कॉपी केलेला मजकूर संपादित करा"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"कॉपी केलेली इमेज संपादित करा"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"जवळपासच्या डिव्हाइसवर पाठवा"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"जोडा"</string> + <string name="manage_users" msgid="1823875311934643849">"वापरकर्ते व्यवस्थापित करा"</string> </resources> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index b87a79cca38e..656080e72be1 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(diputuskan sambungan)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Tidak dapat menukar. Ketik untuk mencuba lagi."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Gandingkan peranti baharu"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nombor binaan"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Nombor binaan disalin ke papan keratan."</string> <string name="basic_status" msgid="2315371112182658176">"Buka perbualan"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apl aktif</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> apl aktif</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Maklumat baharu"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apl aktif"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Berhenti"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Dihentikan"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Disalin"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Daripada <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ketepikan penyalinan UI"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edit teks yang disalin"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edit imej yang disalin"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Hantar ke peranti berdekatan"</string> + <string name="add" msgid="81036585205287996">"Tambah"</string> + <string name="manage_users" msgid="1823875311934643849">"Urus pengguna"</string> </resources> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 0248d10fdda5..a72293cccbe8 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ချိတ်ဆက်မှု မရှိပါ)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ပြောင်း၍ မရပါ။ ပြန်စမ်းကြည့်ရန် တို့ပါ။"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"စက်အသစ် တွဲချိတ်ရန်"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"တည်ဆောက်မှုနံပါတ်"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"တည်ဆောက်မှုနံပါတ်ကို ကလစ်ဘုတ်သို့ မိတ္တူကူးပြီးပါပြီ။"</string> <string name="basic_status" msgid="2315371112182658176">"စကားဝိုင်းကို ဖွင့်ရန်"</string> @@ -877,8 +881,7 @@ <item quantity="other">ပွင့်နေသည့်အက်ပ် <xliff:g id="COUNT_1">%s</xliff:g> ခု</item> <item quantity="one">ပွင့်နေသည့်အက်ပ် <xliff:g id="COUNT_0">%s</xliff:g> ခု</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"အချက်အလက်သစ်"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ပွင့်နေသည့်အက်ပ်များ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ရပ်ရန်"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ရပ်ထားသည်"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"ကူးပြီးပါပြီ"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> ထံမှ"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"UI မိတ္တူမကူးတော့ရန်"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"ကူးထားသည့်စာသားကို တည်းဖြတ်ရန်"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"ကူးထားသည့်ပုံကို ပြင်ဆင်ရန်"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"အနီးတစ်ဝိုက်ရှိ စက်များသို့ ပို့ရန်"</string> + <string name="add" msgid="81036585205287996">"ထည့်ရန်"</string> + <string name="manage_users" msgid="1823875311934643849">"အသုံးပြုသူများ စီမံရန်"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 76cfef5704b1..45c0f9006483 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(frakoblet)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan ikke bytte. Trykk for å prøve igjen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Koble til en ny enhet"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Delversjonsnummer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Delversjonsnummeret er kopiert til utklippstavlen."</string> <string name="basic_status" msgid="2315371112182658176">"Åpen samtale"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktive apper</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiv app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ny informasjon"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive apper"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stopp"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stoppet"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopiert"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Fra <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Lukk kopi-UI"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Rediger den kopierte teksten"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Rediger det kopierte bildet"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Send til en enhet i nærheten"</string> + <string name="add" msgid="81036585205287996">"Legg til"</string> + <string name="manage_users" msgid="1823875311934643849">"Administrer brukere"</string> </resources> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 158a8913071a..938351f70c34 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(डिस्कनेक्ट गरिएको छ)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"बदल्न सकिएन। फेरि प्रयास गर्न ट्याप गर्नुहोस्।"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"नयाँ डिभाइस कनेक्ट गर्नुहोस्"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नम्बर"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नम्बर कपी गरी क्लिपबोर्डमा सारियो।"</string> <string name="basic_status" msgid="2315371112182658176">"वार्तालाप खोल्नुहोस्"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> वटा सक्रिय एप</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> सक्रिय एप</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"नयाँ जानकारी"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"सक्रिय एपहरू"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"रोक्नुहोस्"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"रोकिएको छ"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"कपी गरिएको टेक्स्ट सम्पादन गर्नुहोस्"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"कपी गरिएको फोटो सम्पादन गर्नुहोस्"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"नजिकैको डिभाइसमा पठाउनुहोस्"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"हाल्नुहोस्"</string> + <string name="manage_users" msgid="1823875311934643849">"प्रयोगकर्ताहरूको व्यवस्थापन गर्नुहोस्"</string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index f85bbee74115..67eee117deab 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(verbinding verbroken)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan niet schakelen. Tik om het opnieuw te proberen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Nieuw apparaat koppelen"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build-nummer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Build-nummer naar klembord gekopieerd."</string> <string name="basic_status" msgid="2315371112182658176">"Gesprek openen"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> actieve apps</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> actieve app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nieuwe informatie"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Actieve apps"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stoppen"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Gestopt"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Gekopieerd"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Uit <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"UI voor kopiëren sluiten"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Gekopieerde tekst bewerken"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Gekopieerde afbeelding bewerken"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Naar apparaat in de buurt sturen"</string> + <string name="add" msgid="81036585205287996">"Toevoegen"</string> + <string name="manage_users" msgid="1823875311934643849">"Gebruikers beheren"</string> </resources> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index dab199b72aa3..57cdf0bd032d 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ସ୍ୱିଚ କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ନୂଆ ଡିଭାଇସକୁ ପେୟାର୍ କରନ୍ତୁ"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ବିଲ୍ଡ ନମ୍ୱର"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"କ୍ଲିପବୋର୍ଡକୁ କପି କରାଯାଇଥିବା ବିଲ୍ଡ ନମ୍ୱର।"</string> <string name="basic_status" msgid="2315371112182658176">"ବାର୍ତ୍ତାଳାପ ଖୋଲନ୍ତୁ"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g>ଟି ସକ୍ରିୟ ଆପ</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g>ଟି ସକ୍ରିୟ ଆପ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ନୂଆ ସୂଚନା"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ସକ୍ରିୟ ଆପଗୁଡ଼ିକ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ବନ୍ଦ କରନ୍ତୁ"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ବନ୍ଦ ହୋଇଛି"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"କପି କରାଯାଇଥିବା ଟେକ୍ସଟକୁ ଏଡିଟ କରନ୍ତୁ"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"କପି କରାଯାଇଥିବା ଇମେଜକୁ ଏଡିଟ କରନ୍ତୁ"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ନିକଟସ୍ଥ ଡିଭାଇସକୁ ପଠାନ୍ତୁ"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"ଯୋଗ କରନ୍ତୁ"</string> + <string name="manage_users" msgid="1823875311934643849">"ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string> </resources> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 20b5bf21ded3..63eb3fb47b41 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ਡਿਸਕਨੈਕਟ ਹੈ)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"ਬਿਲਡ ਨੰਬਰ"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"ਬਿਲਡ ਨੰਬਰ ਨੂੰ ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ।"</string> <string name="basic_status" msgid="2315371112182658176">"ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ਕਿਰਿਆਸ਼ੀਲ ਐਪ</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ਕਿਰਿਆਸ਼ੀਲ ਐਪਾਂ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ਨਵੀਂ ਜਾਣਕਾਰੀ"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"ਕਿਰਿਆਸ਼ੀਲ ਐਪਾਂ"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ਬੰਦ ਕਰੋ"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ਬੰਦ ਹੈ"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"ਕਾਪੀ ਕੀਤੀ ਗਈ"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> ਤੋਂ"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"ਕਾਪੀ ਕੀਤੇ UI ਨੂੰ ਖਾਰਜ ਕਰੋ"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"ਕਾਪੀ ਕੀਤੀ ਲਿਖਤ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"ਕਾਪੀ ਕੀਤੇ ਗਏ ਚਿੱਤਰ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸ \'ਤੇ ਭੇਜੋ"</string> + <string name="add" msgid="81036585205287996">"ਸ਼ਾਮਲ ਕਰੋ"</string> + <string name="manage_users" msgid="1823875311934643849">"ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 4572922d60a5..463f1d872d16 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odłączono)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nie można przełączyć. Spróbuj ponownie."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sparuj nowe urządzenie"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numer kompilacji"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Numer kompilacji został skopiowany do schowka."</string> <string name="basic_status" msgid="2315371112182658176">"Otwarta rozmowa"</string> @@ -891,8 +895,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktywnej aplikacji</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktywna aplikacja</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nowa informacja"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktywne aplikacje"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Zatrzymaj"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zatrzymano"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Skopiowano"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Od: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Zamknij UI kopiowania"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Edytuj skopiowany tekst"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Edytuj skopiowany obraz"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Wyślij na urządzenie w pobliżu"</string> + <string name="add" msgid="81036585205287996">"Dodaj"</string> + <string name="manage_users" msgid="1823875311934643849">"Zarządzaj użytkownikami"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 1c902b0b8d65..226d338917ab 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(sem conexão)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não foi possível mudar. Toque para tentar novamente."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parear novo dispositivo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da versão"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Número da versão copiado para a área de transferência."</string> <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app ativo</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps ativos</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativos"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Parar"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Parado"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiado"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Do app <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Dispensar cópia da IU"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar imagem copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar para dispositivo próximo"</string> + <string name="add" msgid="81036585205287996">"Adicionar"</string> + <string name="manage_users" msgid="1823875311934643849">"Gerenciar usuários"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 1562abc674ec..d4cfc8330e73 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desligado)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não é possível mudar. Toque para tentar novamente."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sincronize o novo dispositivo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da compilação"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Número da compilação copiado para a área de transferência."</string> <string name="basic_status" msgid="2315371112182658176">"Abrir conversa"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app ativa</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps ativas</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Novas informações"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativas"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Parar"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Parada"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiado"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Da app <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ignorar cópia de IU"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar imagem copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar para dispositivo próximo"</string> + <string name="add" msgid="81036585205287996">"Adicionar"</string> + <string name="manage_users" msgid="1823875311934643849">"Gerir utilizadores"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 1c902b0b8d65..226d338917ab 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(sem conexão)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não foi possível mudar. Toque para tentar novamente."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parear novo dispositivo"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da versão"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Número da versão copiado para a área de transferência."</string> <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app ativo</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps ativos</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativos"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Parar"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Parado"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Copiado"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Do app <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Dispensar cópia da IU"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editar texto copiado"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editar imagem copiada"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Enviar para dispositivo próximo"</string> + <string name="add" msgid="81036585205287996">"Adicionar"</string> + <string name="manage_users" msgid="1823875311934643849">"Gerenciar usuários"</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index d520d509edf6..53524de9e311 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(deconectat)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nu se poate comuta. Atingeți pentru a încerca din nou."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Asociați un nou dispozitiv"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numărul versiunii"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Numărul versiunii s-a copiat în clipboard."</string> <string name="basic_status" msgid="2315371112182658176">"Deschideți conversația"</string> @@ -884,8 +888,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> de aplicații active</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicație activă</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informații noi"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicații active"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Opriți"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Oprită"</string> @@ -896,8 +899,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Editați textul copiat"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Editați imaginea copiată"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Trimiteți către un dispozitiv din apropiere"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Adăugați"</string> + <string name="manage_users" msgid="1823875311934643849">"Gestionați utilizatorii"</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 310a87e1a6da..969ad8a30339 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(нет подключения)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не удается переключиться. Нажмите, чтобы повторить попытку."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Подключить новое устройство"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер сборки"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Номер сборки скопирован в буфер обмена."</string> <string name="basic_status" msgid="2315371112182658176">"Открытый чат"</string> @@ -891,8 +895,7 @@ <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> активных приложений</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> активного приложения</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Новая информация"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Активные приложения"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Остановить"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Остановлено"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Скопировано."</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Из приложения \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Закрыть меню копирования"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Изменить скопированный текст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Изменить скопированное изображение"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Отправить на устройство поблизости"</string> + <string name="add" msgid="81036585205287996">"Добавить"</string> + <string name="manage_users" msgid="1823875311934643849">"Управление пользователями"</string> </resources> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index e730bb06b222..b94479993516 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(විසන්ධි විය)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"මාරු කිරීමට නොහැකිය. නැවත උත්සාහ කිරීමට තට්ටු කරන්න."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"නව උපාංගය යුගල කරන්න"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"නිමැවුම් අංකය"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"නිමැවුම් අංකය පසුරු පුවරුවට පිටපත් කරන ලදි."</string> <string name="basic_status" msgid="2315371112182658176">"සංවාදය විවෘත කරන්න"</string> @@ -877,8 +881,7 @@ <item quantity="one">සක්රිය යෙදුම් <xliff:g id="COUNT_1">%s</xliff:g></item> <item quantity="other">සක්රිය යෙදුම් <xliff:g id="COUNT_1">%s</xliff:g></item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"නව තොරතුරු"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"සක්රිය යෙදුම්"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"නවත්වන්න"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"නවත්වන ලදි"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"පිටපත් කරන ලදි"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> සිට"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Dismiss copy UI"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"පිටපත් කළ පෙළ සංස්කරණය කරන්න"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"පිටපත් කළ රූපය සංස්කරණය කරන්න"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"අවට උපාංගය වෙත යවන්න"</string> + <string name="add" msgid="81036585205287996">"එක් කරන්න"</string> + <string name="manage_users" msgid="1823875311934643849">"පරිශීලකයන් කළමනාකරණය කරන්න"</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index a3bbe44a3272..2236c8a990fa 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odpojené)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nedá sa prepnúť. Zopakujte klepnutím."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Spárovať nové zariadenie"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Číslo zostavy"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Číslo zostavy bolo skopírované do schránky."</string> <string name="basic_status" msgid="2315371112182658176">"Otvorená konverzácia"</string> @@ -891,8 +895,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktívnych aplikácií</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktívna aplikácia</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nové informácie"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktívne aplikácie"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Ukončiť"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zastavená"</string> @@ -903,8 +906,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Upraviť skopírovaný text"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Upraviť skopírovaný obrázok"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Odoslať do zariadenia v okolí"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Pridať"</string> + <string name="manage_users" msgid="1823875311934643849">"Spravovať používateľov"</string> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index d657277431ca..46ee48f86497 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(povezava je prekinjena)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Preklop ni mogoč. Če želite poskusiti znova, se dotaknite."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Seznanitev nove naprave"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Delovna različica"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Delovna različica je bila kopirana v odložišče."</string> <string name="basic_status" msgid="2315371112182658176">"Odprt pogovor"</string> @@ -891,8 +895,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aktivne aplikacije</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktivnih aplikacij</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nove informacije"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivne aplikacije"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Ustavi"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Ustavljeno"</string> @@ -903,8 +906,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Uredi kopirano besedilo"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Uredi kopirano sliko"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Pošlji v napravo v bližini"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Dodaj"</string> + <string name="manage_users" msgid="1823875311934643849">"Upravljanje uporabnikov"</string> </resources> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index f8ba65af9300..e3d233fef51e 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(shkëputur)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nuk mund të ndërrohet. Trokit për të provuar përsëri."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Çifto pajisjen e re"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numri i ndërtimit"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Numri i ndërtimit u kopjua te kujtesa e fragmenteve"</string> <string name="basic_status" msgid="2315371112182658176">"Hap bisedën"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacione aktive</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikacion aktiv</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informacion i ri"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplikacionet aktive"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Ndalo"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Ndaluar"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"U kopjua"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Nga <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Hiq kopjen e ndërfaqes së përdoruesit"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Modifiko tekstin e kopjuar"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Modifiko imazhin e kopjuar"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Dërgo te pajisja në afërsi"</string> + <string name="add" msgid="81036585205287996">"Shto"</string> + <string name="manage_users" msgid="1823875311934643849">"Menaxho përdoruesit"</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 5d89cf1d3e6c..4c593aba1d2c 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -812,6 +812,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(веза је прекинута)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Пребацивање није успело. Пробајте поново."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Упари нови уређај"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Број верзије"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Број верзије је копиран у привремену меморију."</string> <string name="basic_status" msgid="2315371112182658176">"Отворите конверзацију"</string> @@ -884,8 +888,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> активне апликације</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> активних апликација</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Нове информације"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Активне апликације"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Заустави"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Заустављено"</string> @@ -893,14 +896,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Копирано је"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Из: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Одбаци копирање корисничког интерфејса"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Измените копирани текст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Измените копирану слику"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Пошаљи на уређај у близини"</string> + <string name="add" msgid="81036585205287996">"Додај"</string> + <string name="manage_users" msgid="1823875311934643849">"Управљаjте корисницима"</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index b9a3ab106fcd..7686143ef426 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(frånkopplad)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Misslyckat byte. Tryck och försök igen."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parkoppla en ny enhet"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versionsnummer"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Versionsnumret har kopierats till urklipp."</string> <string name="basic_status" msgid="2315371112182658176">"Öppen konversation"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aktiva appar</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aktiv app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ny information"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiva appar"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stoppa"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Stoppad"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopierades"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Från <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Stäng användargränssnittet för kopiering"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Redigera kopierad text"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Redigera kopierad bild"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Skicka till enhet i närheten"</string> + <string name="add" msgid="81036585205287996">"Lägg till"</string> + <string name="manage_users" msgid="1823875311934643849">"Hantera användare"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 803a2b56067c..92b6d92e9428 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(imetenganishwa)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Imeshindwa kubadilisha. Gusa ili ujaribu tena."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Oanisha kifaa kipya"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nambari ya muundo"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Nambari ya muundo imewekwa kwenye ubao wa kunakili."</string> <string name="basic_status" msgid="2315371112182658176">"Fungua mazungumzo"</string> @@ -877,8 +881,7 @@ <item quantity="other">Programu <xliff:g id="COUNT_1">%s</xliff:g> zinatumika</item> <item quantity="one">Programu <xliff:g id="COUNT_0">%s</xliff:g> inatumika</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Maelezo mapya"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Programu zinazotumika"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Simamisha"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Imesimamishwa"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Imenakiliwa"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Kutoka <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Ondoa kiolesura cha nakala"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Badilisha maandishi yaliyonakiliwa"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Badilisha picha iliyonakiliwa"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Tuma kwenye kifaa kilicho karibu"</string> + <string name="add" msgid="81036585205287996">"Weka"</string> + <string name="manage_users" msgid="1823875311934643849">"Dhibiti watumiaji"</string> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 094559fb7a53..4ae3e1833a76 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(துண்டிக்கப்பட்டது)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"இணைக்க முடியவில்லை. மீண்டும் முயல தட்டவும்."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"புதிய சாதனத்தை இணைத்தல்"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"பதிப்பு எண்"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"பதிப்பு எண் கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது."</string> <string name="basic_status" msgid="2315371112182658176">"திறந்தநிலை உரையாடல்"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ஆப்ஸ் செயலில் உள்ளன</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ஆப்ஸ் செயலில் உள்ளது</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"புதிய தகவல்கள்"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"செயலிலுள்ள ஆப்ஸ்"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"நிறுத்து"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"இயங்கவில்லை"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"நகலெடுத்த வார்த்தைகளைத் திருத்து"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"நகலெடுத்த படத்தைத் திருத்து"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"அருகிலுள்ள சாதனத்திற்கு அனுப்பு"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"சேர்"</string> + <string name="manage_users" msgid="1823875311934643849">"பயனர்களை நிர்வகித்தல்"</string> </resources> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 59e8ef4a6e87..521c63e7158c 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(డిస్కనెక్ట్ అయ్యింది)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"స్విచ్ చేయడం సాధ్యం కాదు. మళ్ళీ ట్రై చేయడానికి ట్యాప్ చేయండి."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"కొత్త పరికరాన్ని పెయిర్ చేయండి"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"బిల్డ్ నంబర్"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"బిల్డ్ నంబర్, క్లిప్బోర్డ్కు కాపీ చేయబడింది."</string> <string name="basic_status" msgid="2315371112182658176">"సంభాషణను తెరవండి"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> యాక్టివ్గా ఉన్న యాప్లు</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> యాక్టివ్గా ఉన్న యాప్</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"కొత్త సమాచారం"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"యాక్టివ్గా ఉన్న యాప్లు"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ఆపివేయండి"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ఆపివేయబడింది"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"కాపీ చేసిన టెక్స్ట్ను ఎడిట్ చేయండి"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"కాపీ చేసిన ఇమేజ్లను ఎడిట్ చేయండి"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"సమీపంలోని పరికరానికి పంపండి"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"జోడించండి"</string> + <string name="manage_users" msgid="1823875311934643849">"యూజర్లను మేనేజ్ చేయండి"</string> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index a20744794360..23c8c569bccb 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ยกเลิกการเชื่อมต่อแล้ว)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"เปลี่ยนไม่ได้ แตะเพื่อลองอีกครั้ง"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"จับคู่อุปกรณ์ใหม่"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"หมายเลขบิลด์"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"คัดลอกหมายเลขบิลด์ไปยังคลิปบอร์ดแล้ว"</string> <string name="basic_status" msgid="2315371112182658176">"เปิดการสนทนา"</string> @@ -877,8 +881,7 @@ <item quantity="other">มี <xliff:g id="COUNT_1">%s</xliff:g> แอปที่ใช้งานอยู่</item> <item quantity="one">มี <xliff:g id="COUNT_0">%s</xliff:g> แอปที่ใช้งานอยู่</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"ข้อมูลใหม่"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"แอปที่ใช้งานอยู่"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"หยุด"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"หยุดแล้ว"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"คัดลอกแล้ว"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"จาก <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"ปิด UI การคัดลอก"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"แก้ไขข้อความที่คัดลอก"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"แก้ไขรูปภาพที่คัดลอก"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"ส่งไปยังอุปกรณ์ที่อยู่ใกล้เคียง"</string> + <string name="add" msgid="81036585205287996">"เพิ่ม"</string> + <string name="manage_users" msgid="1823875311934643849">"จัดการผู้ใช้"</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index db9c788037f9..ce652b89dbbf 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nadiskonekta)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Hindi makalipat. I-tap para subukan ulit."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Magpares ng bagong device"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numero ng build"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Nakopya sa clipboard ang numero ng build."</string> <string name="basic_status" msgid="2315371112182658176">"Buksan ang pag-uusap"</string> @@ -877,8 +881,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aktibong app</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> na aktibong app</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Bagong impormasyon"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Mga aktibong app"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Ihinto"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Inihinto"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Nakopya"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Mula sa <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"I-dismiss ang UI ng pagkopya"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"I-edit ang kinopyang text"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"I-edit ang kinopyang larawan"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Ipadala sa kalapit na device"</string> + <string name="add" msgid="81036585205287996">"Magdagdag"</string> + <string name="manage_users" msgid="1823875311934643849">"Pamahalaan ang mga user"</string> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 308af4f3cb3a..24005f20a380 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(bağlantı kesildi)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Geçiş yapılamıyor. Tekrar denemek için dokunun."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Yeni cihaz eşle"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Derleme numarası"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Derleme numarası panoya kopyalandı."</string> <string name="basic_status" msgid="2315371112182658176">"Görüşmeyi aç"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> etkin uygulama</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> etkin uygulama</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yeni bilgi"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Etkin uygulamalar"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Durdur"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Durduruldu"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Kopyalandı"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasından"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Kopyalanan kullanıcı arayüzünü kapat"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Kopyalanan metni düzenle"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Kopyalanan resmi düzenle"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Yakındaki cihaza gönder"</string> + <string name="add" msgid="81036585205287996">"Ekle"</string> + <string name="manage_users" msgid="1823875311934643849">"Kullanıcıları yönet"</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 01610607154e..c12490d423b5 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -818,6 +818,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(від’єднано)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не вдалося змінити підключення. Натисніть, щоб повторити спробу."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Підключити новий пристрій"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер складання"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Номер складання скопійовано в буфер обміну."</string> <string name="basic_status" msgid="2315371112182658176">"Відкрита розмова"</string> @@ -891,8 +895,7 @@ <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> активних додатків</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> активного додатка</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Нова інформація"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Активні додатки"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Зупинити"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Зупинено"</string> @@ -900,14 +903,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Скопійовано"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"З додатка <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Закрити вікно копіювання"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Редагувати скопійований текст"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Редагувати скопійоване зображення"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Надіслати на пристрій поблизу"</string> + <string name="add" msgid="81036585205287996">"Додати"</string> + <string name="manage_users" msgid="1823875311934643849">"Керувати користувачами"</string> </resources> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index ce492dd71fb4..8fd0e25f4521 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(غیر منسلک ہے)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"سوئچ نہیں کر سکتے۔ دوبارہ کوشش کرنے کے لیے تھپتھپائیں۔"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"نئے آلہ کا جوڑا بنائیں"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"بلڈ نمبر"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"بلڈ نمبر کلپ بورڈ میں کاپی ہو گیا۔"</string> <string name="basic_status" msgid="2315371112182658176">"گفتگو کھولیں"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> فعال ایپس</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> فعال ایپ</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"نئی معلومات"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"فعال ایپس"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"روکیں"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"رکی ہوئی ہے"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"کاپی کردہ ٹیکسٹ میں ترمیم کریں"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"کاپی کردہ تصویر میں ترمیم کریں"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"قریبی آلے کو بھیجیں"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"شامل کریں"</string> + <string name="manage_users" msgid="1823875311934643849">"صارفین کا نظم کریں"</string> </resources> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 6d6c3714fcdc..71778a5869ec 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(uzildi)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Xatolik. Qayta urinish uchun bosing."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Yangi qurilmani ulash"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nashr raqami"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Nashr raqami vaqtinchalik xotiraga nusxalandi."</string> <string name="basic_status" msgid="2315371112182658176">"Suhbatni ochish"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ta faol ilova</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ta faol ilova</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yangi axborot"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Faol ilovalar"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Stop"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Toʻxtatildi"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Nusxa olindi"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Manba: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"UI nusxasini bekor qilish"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Nusxa olingan matnni tahrirlash"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Nusxa olingan rasmni tahrirlash"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Yaqin-atrofdagi qurilmaga yuborish"</string> + <string name="add" msgid="81036585205287996">"Kiritish"</string> + <string name="manage_users" msgid="1823875311934643849">"Foydalanuvchilarni boshqarish"</string> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 5d69e030b194..29bc4bb0f9f9 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(đã ngắt kết nối)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Không thể chuyển đổi. Hãy nhấn để thử lại."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Ghép nối thiết bị mới"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Số bản dựng"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Đã sao chép số bản dựng vào bảng nhớ tạm."</string> <string name="basic_status" msgid="2315371112182658176">"Mở cuộc trò chuyện"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ứng dụng đang hoạt động</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ứng dụng đang hoạt động</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Thông tin mới"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ứng dụng đang hoạt động"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Dừng"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Đã dừng"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"Đã sao chép"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"Từ <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"Đóng giao diện người dùng sao chép"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"Chỉnh sửa văn bản đã sao chép"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Chỉnh sửa hình ảnh đã sao chép"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Gửi đến thiết bị ở gần"</string> + <string name="add" msgid="81036585205287996">"Thêm"</string> + <string name="manage_users" msgid="1823875311934643849">"Quản lý người dùng"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index f03290709a48..c553c57dcf2b 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(已断开连接)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"无法切换。点按即可重试。"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"与新设备配对"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本号"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"已将版本号复制到剪贴板。"</string> <string name="basic_status" msgid="2315371112182658176">"开放式对话"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 个使用中的应用</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 个使用中的应用</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"新信息"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"使用中的应用"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"已停止"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"已复制"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"来自<xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"关闭复制界面"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"修改所复制的文字"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"编辑所复制的图片"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"发送到附近的设备"</string> + <string name="add" msgid="81036585205287996">"添加"</string> + <string name="manage_users" msgid="1823875311934643849">"管理用户"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index dbb4ffc85d38..68f8704e7bd3 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(已中斷連線)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"無法切換,輕按即可重試。"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"配對新裝置"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本號碼"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"版本號碼已複製到剪貼簿。"</string> <string name="basic_status" msgid="2315371112182658176">"開啟對話"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 個使用中的應用程式</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 個使用中的應用程式</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"新資料"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"使用中的應用程式"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"已停止"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"已複製"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"來自「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"關閉剪貼簿使用者介面"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"編輯已複製的文字"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"編輯已複製的圖片"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"傳送至附近的裝置"</string> + <string name="add" msgid="81036585205287996">"新增"</string> + <string name="manage_users" msgid="1823875311934643849">"管理使用者"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index d7185a489e4b..c9a567e53333 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(連線中斷)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"無法切換,輕觸即可重試。"</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"配對新裝置"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本號碼"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"已將版本號碼複製到剪貼簿。"</string> <string name="basic_status" msgid="2315371112182658176">"開放式對話"</string> @@ -877,8 +881,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 個使用中的應用程式</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 個使用中的應用程式</item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"新資訊"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"使用中的應用程式"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"已停止"</string> @@ -886,14 +889,9 @@ <string name="clipboard_overlay_text_copied" msgid="1872624400464891363">"已複製"</string> <string name="clipboard_edit_source" msgid="9156488177277788029">"來自「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> <string name="clipboard_dismiss_description" msgid="7544573092766945657">"關閉剪貼簿 UI"</string> - <!-- no translation found for clipboard_edit_text_description (805254383912962103) --> - <skip /> - <!-- no translation found for clipboard_edit_image_description (8904857948976041306) --> - <skip /> - <!-- no translation found for clipboard_send_nearby_description (4629769637846717650) --> - <skip /> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="clipboard_edit_text_description" msgid="805254383912962103">"編輯複製的文字"</string> + <string name="clipboard_edit_image_description" msgid="8904857948976041306">"編輯複製的圖片"</string> + <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"傳送到鄰近裝置"</string> + <string name="add" msgid="81036585205287996">"新增"</string> + <string name="manage_users" msgid="1823875311934643849">"管理使用者"</string> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 5425b268ba7d..8b69c67a9e5d 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -806,6 +806,10 @@ <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(inqamukile)"</string> <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Akukwazi ukushintsha. Thepha ukuze uzame futhi."</string> <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Bhangqa idivayisi entsha"</string> + <!-- no translation found for media_output_dialog_launch_app_text (1527413319632586259) --> + <skip /> + <!-- no translation found for media_output_dialog_unknown_launch_app_name (1084899329829371336) --> + <skip /> <string name="build_number_clip_data_label" msgid="3623176728412560914">"Yakha inombolo"</string> <string name="build_number_copy_toast" msgid="877720921605503046">"Yakha inombolo ekopishelwe kubhodi yokunamathisela."</string> <string name="basic_status" msgid="2315371112182658176">"Vula ingxoxo"</string> @@ -877,8 +881,7 @@ <item quantity="one">ama-app asebenzayo angu-<xliff:g id="COUNT_1">%s</xliff:g></item> <item quantity="other">ama-app asebenzayo angu-<xliff:g id="COUNT_1">%s</xliff:g></item> </plurals> - <!-- no translation found for fgs_dot_content_description (2865071539464777240) --> - <skip /> + <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ulwazi olusha"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ama-app asebenzayo"</string> <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Misa"</string> <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Imisiwe"</string> @@ -889,8 +892,6 @@ <string name="clipboard_edit_text_description" msgid="805254383912962103">"Hlela umbhalo okopishiwe"</string> <string name="clipboard_edit_image_description" msgid="8904857948976041306">"Hlela umfanekiso okopishiwe"</string> <string name="clipboard_send_nearby_description" msgid="4629769637846717650">"Thumela kudivayisi eseduze"</string> - <!-- no translation found for add (81036585205287996) --> - <skip /> - <!-- no translation found for manage_users (1823875311934643849) --> - <skip /> + <string name="add" msgid="81036585205287996">"Faka"</string> + <string name="manage_users" msgid="1823875311934643849">"Phatha abasebenzisi"</string> </resources> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 9d65c3895827..f2eaa75496e8 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -381,12 +381,19 @@ <item name="android:buttonBarNeutralButtonStyle">@style/Widget.Dialog.Button.BorderButton</item> <item name="android:colorBackground">?androidprv:attr/colorSurface</item> <item name="android:alertDialogStyle">@style/AlertDialogStyle</item> + <item name="android:buttonBarStyle">@style/ButtonBarStyle</item> + <item name="android:buttonBarButtonStyle">@style/Widget.Dialog.Button.Large</item> </style> <style name="AlertDialogStyle" parent="@androidprv:style/AlertDialog.DeviceDefault"> <item name="android:layout">@layout/alert_dialog_systemui</item> </style> + <style name="ButtonBarStyle" parent="@androidprv:style/DeviceDefault.ButtonBar.AlertDialog"> + <item name="android:paddingTop">@dimen/dialog_button_bar_top_padding</item> + <item name="android:paddingBottom">@dimen/dialog_bottom_padding</item> + </style> + <style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" /> <style name="Theme.SystemUI.Dialog.GlobalActions" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen"> @@ -962,6 +969,11 @@ <item name="android:textColor">?android:attr/textColorPrimary</item> </style> + <style name="Widget.Dialog.Button.Large"> + <item name="android:background">@drawable/qs_dialog_btn_filled_large</item> + <item name="android:minHeight">56dp</item> + </style> + <style name="MainSwitch.Settingslib" parent="@android:style/Theme.DeviceDefault"> <item name="android:switchMinWidth">@dimen/settingslib_min_switch_width</item> </style> diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/AppTrace.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/AppTrace.java deleted file mode 100644 index 0241c593b850..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/AppTrace.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.systemui.shared.recents.utilities; - -import static android.os.Trace.TRACE_TAG_APP; - -/** - * Helper class for internal trace functions. - */ -public class AppTrace { - - /** - * Begins a new async trace section with the given {@param key} and {@param cookie}. - */ - public static void start(String key, int cookie) { - android.os.Trace.asyncTraceBegin(TRACE_TAG_APP, key, cookie); - } - - /** - * Begins a new async trace section with the given {@param key}. - */ - public static void start(String key) { - android.os.Trace.asyncTraceBegin(TRACE_TAG_APP, key, 0); - } - - /** - * Ends an existing async trace section with the given {@param key}. - */ - public static void end(String key) { - android.os.Trace.asyncTraceEnd(TRACE_TAG_APP, key, 0); - } - - /** - * Ends an existing async trace section with the given {@param key} and {@param cookie}. - */ - public static void end(String key, int cookie) { - android.os.Trace.asyncTraceEnd(TRACE_TAG_APP, key, cookie); - } - - /** - * Begins a new trace section with the given {@param key}. Can be nested. - */ - public static void beginSection(String key) { - android.os.Trace.beginSection(key); - } - - /** - * Ends an existing trace section started in the last {@link #beginSection(String)}. - */ - public static void endSection() { - android.os.Trace.endSection(); - } - - /** - * Traces a counter value. - */ - public static void count(String name, int count) { - android.os.Trace.traceCounter(TRACE_TAG_APP, name, count); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/RectFEvaluator.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/RectFEvaluator.java deleted file mode 100644 index 51c1b5aa13d7..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/RectFEvaluator.java +++ /dev/null @@ -1,52 +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.systemui.shared.recents.utilities; - -import android.animation.TypeEvaluator; -import android.graphics.RectF; - -/** - * This evaluator can be used to perform type interpolation between <code>RectF</code> values. - */ -public class RectFEvaluator implements TypeEvaluator<RectF> { - - private final RectF mRect = new RectF(); - - /** - * This function returns the result of linearly interpolating the start and - * end Rect values, with <code>fraction</code> representing the proportion - * between the start and end values. The calculation is a simple parametric - * calculation on each of the separate components in the Rect objects - * (left, top, right, and bottom). - * - * <p>The object returned will be the <code>reuseRect</code> passed into the constructor.</p> - * - * @param fraction The fraction from the starting to the ending values - * @param startValue The start Rect - * @param endValue The end Rect - * @return A linear interpolation between the start and end values, given the - * <code>fraction</code> parameter. - */ - @Override - public RectF evaluate(float fraction, RectF startValue, RectF endValue) { - float left = startValue.left + ((endValue.left - startValue.left) * fraction); - float top = startValue.top + ((endValue.top - startValue.top) * fraction); - float right = startValue.right + ((endValue.right - startValue.right) * fraction); - float bottom = startValue.bottom + ((endValue.bottom - startValue.bottom) * fraction); - mRect.set(left, top, right, bottom); - return mRect; - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityCompat.java index 0c7e56e0715e..0f937bdfe449 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityCompat.java @@ -42,31 +42,4 @@ public class ActivityCompat { public void unregisterRemoteAnimations() { mWrapped.unregisterRemoteAnimations(); } - - /** - * @see android.view.ViewDebug#dumpv2(View, ByteArrayOutputStream) - */ - public boolean encodeViewHierarchy(ByteArrayOutputStream out) { - View view = null; - if (mWrapped.getWindow() != null && - mWrapped.getWindow().peekDecorView() != null && - mWrapped.getWindow().peekDecorView().getViewRootImpl() != null) { - view = mWrapped.getWindow().peekDecorView().getViewRootImpl().getView(); - } - if (view == null) { - return false; - } - - final ViewHierarchyEncoder encoder = new ViewHierarchyEncoder(out); - int[] location = view.getLocationOnScreen(); - encoder.addProperty("window:left", location[0]); - encoder.addProperty("window:top", location[1]); - view.encode(encoder); - encoder.endStream(); - return true; - } - - public int getDisplayId() { - return mWrapped.getDisplayId(); - } } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java index 48fcbbda7e46..461c2dc2c2af 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java @@ -262,7 +262,6 @@ public class ActivityManagerWrapper { * Starts a task from Recents synchronously. */ public boolean startActivityFromRecents(Task.TaskKey taskKey, ActivityOptions options) { - ActivityOptionsCompat.addTaskInfo(options, taskKey); return startActivityFromRecents(taskKey.id, options); } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java index e2ca349cc5c8..db62f88325dc 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java @@ -104,15 +104,4 @@ public abstract class ActivityOptionsCompat { opts.setSourceInfo(ActivityOptions.SourceInfo.TYPE_LAUNCHER, uptimeMillis); return opts; } - - /** - * Sets Task specific information to the activity options - */ - public static void addTaskInfo(ActivityOptions opts, Task.TaskKey taskKey) { - if (taskKey.windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { - // We show non-visible docked tasks in Recents, but we always want to launch - // them in the fullscreen stack. - opts.setLaunchWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); - } - } } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ClipDescriptionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ClipDescriptionCompat.java deleted file mode 100644 index 0b1141ee9b30..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ClipDescriptionCompat.java +++ /dev/null @@ -1,39 +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.systemui.shared.system; - -import android.content.ClipDescription; -import android.content.Intent; - -/** - * Wrapper around ClipDescription. - */ -public abstract class ClipDescriptionCompat { - - public static String MIMETYPE_APPLICATION_ACTIVITY = - ClipDescription.MIMETYPE_APPLICATION_ACTIVITY; - - public static String MIMETYPE_APPLICATION_SHORTCUT = - ClipDescription.MIMETYPE_APPLICATION_SHORTCUT; - - public static String MIMETYPE_APPLICATION_TASK = - ClipDescription.MIMETYPE_APPLICATION_TASK; - - public static String EXTRA_PENDING_INTENT = ClipDescription.EXTRA_PENDING_INTENT; - - public static String EXTRA_TASK_ID = Intent.EXTRA_TASK_ID; -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java deleted file mode 100644 index d1c77a6e7c5a..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ConfigurationCompat.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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.systemui.shared.system; - -import android.content.res.Configuration; - -/** - * Wraps the Configuration to access the window configuration. - */ -public class ConfigurationCompat { - - public static int getWindowConfigurationRotation(Configuration c) { - return c.windowConfiguration.getRotation(); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/DockedStackListenerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/DockedStackListenerCompat.java deleted file mode 100644 index bb319e625b44..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/DockedStackListenerCompat.java +++ /dev/null @@ -1,63 +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.systemui.shared.system; - -import android.view.IDockedStackListener; - -/** - * An interface to track docked stack changes. - */ -public class DockedStackListenerCompat { - - IDockedStackListener.Stub mListener = new IDockedStackListener.Stub() { - @Override - public void onDividerVisibilityChanged(boolean visible) {} - - @Override - public void onDockedStackExistsChanged(boolean exists) { - DockedStackListenerCompat.this.onDockedStackExistsChanged(exists); - } - - @Override - public void onDockedStackMinimizedChanged(boolean minimized, long animDuration, - boolean isHomeStackResizable) { - DockedStackListenerCompat.this.onDockedStackMinimizedChanged(minimized, animDuration, - isHomeStackResizable); - } - - @Override - public void onAdjustedForImeChanged(boolean adjustedForIme, long animDuration) {} - - @Override - public void onDockSideChanged(final int newDockSide) { - DockedStackListenerCompat.this.onDockSideChanged(newDockSide); - } - }; - - public void onDockedStackExistsChanged(boolean exists) { - // To be overridden - } - - public void onDockedStackMinimizedChanged(boolean minimized, long animDuration, - boolean isHomeStackResizable) { - // To be overridden - } - - public void onDockSideChanged(final int newDockSide) { - // To be overridden - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LatencyTrackerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/LatencyTrackerCompat.java index a8c19ec24124..e6ae19eebc72 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LatencyTrackerCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/LatencyTrackerCompat.java @@ -24,14 +24,6 @@ import com.android.internal.util.LatencyTracker; * @see LatencyTracker */ public class LatencyTrackerCompat { - /** - * @see LatencyTracker - * @deprecated Please use {@link LatencyTrackerCompat#logToggleRecents(Context, int)} instead. - */ - @Deprecated - public static void logToggleRecents(int duration) { - LatencyTracker.logActionDeprecated(LatencyTracker.ACTION_TOGGLE_RECENTS, duration, false); - } /** @see LatencyTracker */ public static void logToggleRecents(Context context, int duration) { diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LauncherAppsCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/LauncherAppsCompat.java deleted file mode 100644 index d24c779b1416..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/LauncherAppsCompat.java +++ /dev/null @@ -1,34 +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.systemui.shared.system; - -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.pm.LauncherApps; -import android.os.Bundle; -import android.os.UserHandle; - -/** - * Wrapper around LauncherApps. - */ -public abstract class LauncherAppsCompat { - - public static PendingIntent getMainActivityLaunchIntent(LauncherApps launcherApps, - ComponentName component, Bundle startActivityOptions, UserHandle user) { - return launcherApps.getMainActivityLaunchIntent(component, startActivityOptions, user); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/MetricsLoggerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/MetricsLoggerCompat.java deleted file mode 100644 index 952c8aee2408..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/MetricsLoggerCompat.java +++ /dev/null @@ -1,50 +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.systemui.shared.system; - -import com.android.internal.logging.MetricsLogger; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -public class MetricsLoggerCompat { - - private final MetricsLogger mMetricsLogger; - public static final int OVERVIEW_ACTIVITY = MetricsEvent.OVERVIEW_ACTIVITY; - - public MetricsLoggerCompat() { - mMetricsLogger = new MetricsLogger(); - } - - public void action(int category) { - mMetricsLogger.action(category); - } - - public void action(int category, int value) { - mMetricsLogger.action(category, value); - } - - public void visible(int category) { - mMetricsLogger.visible(category); - } - - public void hidden(int category) { - mMetricsLogger.hidden(category); - } - - public void visibility(int category, boolean visible) { - mMetricsLogger.visibility(category, visible); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java deleted file mode 100644 index 7c8c23eba73b..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RotationWatcher.java +++ /dev/null @@ -1,69 +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.systemui.shared.system; - -import android.content.Context; -import android.os.RemoteException; -import android.util.Log; -import android.view.IRotationWatcher; -import android.view.WindowManagerGlobal; - -public abstract class RotationWatcher { - - private static final String TAG = "RotationWatcher"; - - private final Context mContext; - - private final IRotationWatcher mWatcher = new IRotationWatcher.Stub() { - - @Override - public void onRotationChanged(int rotation) { - RotationWatcher.this.onRotationChanged(rotation); - - } - }; - - private boolean mIsWatching = false; - - public RotationWatcher(Context context) { - mContext = context; - } - - protected abstract void onRotationChanged(int rotation); - - public void enable() { - if (!mIsWatching) { - try { - WindowManagerGlobal.getWindowManagerService().watchRotation(mWatcher, - mContext.getDisplayId()); - mIsWatching = true; - } catch (RemoteException e) { - Log.w(TAG, "Failed to set rotation watcher", e); - } - } - } - - public void disable() { - if (mIsWatching) { - try { - WindowManagerGlobal.getWindowManagerService().removeRotationWatcher(mWatcher); - mIsWatching = false; - } catch (RemoteException e) { - Log.w(TAG, "Failed to remove rotation watcher", e); - } - } - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskDescriptionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskDescriptionCompat.java deleted file mode 100644 index 35952f55ec1e..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskDescriptionCompat.java +++ /dev/null @@ -1,49 +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.systemui.shared.system; - -import android.app.ActivityManager; -import android.graphics.Bitmap; - -public class TaskDescriptionCompat { - - private ActivityManager.TaskDescription mTaskDescription; - - public TaskDescriptionCompat(ActivityManager.TaskDescription td) { - mTaskDescription = td; - } - - public int getPrimaryColor() { - return mTaskDescription != null - ? mTaskDescription.getPrimaryColor() - : 0; - } - - public int getBackgroundColor() { - return mTaskDescription != null - ? mTaskDescription.getBackgroundColor() - : 0; - } - - public static Bitmap getIcon(ActivityManager.TaskDescription desc, int userId) { - if (desc.getInMemoryIcon() != null) { - return desc.getInMemoryIcon(); - } - return ActivityManager.TaskDescription.loadTaskDescriptionIcon( - desc.getIconFilename(), userId); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ThreadedRendererCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ThreadedRendererCompat.java deleted file mode 100644 index ffd8a08905f0..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ThreadedRendererCompat.java +++ /dev/null @@ -1,34 +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.systemui.shared.system; - -import android.view.ThreadedRenderer; - -/** - * @see ThreadedRenderer - */ -public class ThreadedRendererCompat { - - public static int EGL_CONTEXT_PRIORITY_REALTIME_NV = 0x3357; - public static int EGL_CONTEXT_PRIORITY_HIGH_IMG = 0x3101; - public static int EGL_CONTEXT_PRIORITY_MEDIUM_IMG = 0x3102; - public static int EGL_CONTEXT_PRIORITY_LOW_IMG = 0x3103; - - public static void setContextPriority(int priority) { - ThreadedRenderer.setContextPriority(priority); - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TonalCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TonalCompat.java deleted file mode 100644 index 4a0f89b7dc7d..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TonalCompat.java +++ /dev/null @@ -1,53 +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.systemui.shared.system; - -import android.app.WallpaperColors; -import android.content.Context; - -import com.android.internal.colorextraction.ColorExtractor.GradientColors; -import com.android.internal.colorextraction.types.Tonal; - -public class TonalCompat { - - private final Tonal mTonal; - - public TonalCompat(Context context) { - mTonal = new Tonal(context); - } - - public ExtractionInfo extractDarkColors(WallpaperColors colors) { - GradientColors darkColors = new GradientColors(); - mTonal.extractInto(colors, new GradientColors(), darkColors, new GradientColors()); - - ExtractionInfo result = new ExtractionInfo(); - result.mainColor = darkColors.getMainColor(); - result.secondaryColor = darkColors.getSecondaryColor(); - result.supportsDarkText = darkColors.supportsDarkText(); - if (colors != null) { - result.supportsDarkTheme = - (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0; - } - return result; - } - - public static class ExtractionInfo { - public int mainColor; - public int secondaryColor; - public boolean supportsDarkText; - public boolean supportsDarkTheme; - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java deleted file mode 100644 index 89c60f1d3f06..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java +++ /dev/null @@ -1,67 +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.systemui.shared.system; - -import android.graphics.HardwareRenderer; -import android.view.SurfaceControl; -import android.view.View; -import android.view.ViewRootImpl; - -import java.util.function.LongConsumer; - -/** - * Helper class to expose some ViewRoomImpl methods - */ -public class ViewRootImplCompat { - - private final ViewRootImpl mViewRoot; - - public ViewRootImplCompat(View view) { - mViewRoot = view == null ? null : view.getViewRootImpl(); - } - - public SurfaceControl getRenderSurfaceControl() { - return mViewRoot == null ? null : mViewRoot.getSurfaceControl(); - } - - public boolean isValid() { - return mViewRoot != null; - } - - public View getView() { - return mViewRoot == null ? null : mViewRoot.getView(); - } - - public void registerRtFrameCallback(LongConsumer callback) { - if (mViewRoot != null) { - mViewRoot.registerRtFrameCallback( - new HardwareRenderer.FrameDrawingCallback() { - @Override - public void onFrameDraw(long l) { - callback.accept(l); - } - }); - } - } - - public void mergeWithNextTransaction(SurfaceControl.Transaction t, long frame) { - if (mViewRoot != null) { - mViewRoot.mergeWithNextTransaction(t, frame); - } else { - t.apply(); - } - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperEngineCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperEngineCompat.java deleted file mode 100644 index 73dc60dbc7da..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperEngineCompat.java +++ /dev/null @@ -1,56 +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.systemui.shared.system; - -import android.graphics.Rect; -import android.service.wallpaper.IWallpaperEngine; -import android.util.Log; - -/** - * @see IWallpaperEngine - */ -public class WallpaperEngineCompat { - - private static final String TAG = "WallpaperEngineCompat"; - - /** - * Returns true if {@link IWallpaperEngine#scalePreview(Rect)} is available. - */ - public static boolean supportsScalePreview() { - try { - return IWallpaperEngine.class.getMethod("scalePreview", Rect.class) != null; - } catch (NoSuchMethodException | SecurityException e) { - return false; - } - } - - private final IWallpaperEngine mWrappedEngine; - - public WallpaperEngineCompat(IWallpaperEngine wrappedEngine) { - mWrappedEngine = wrappedEngine; - } - - /** - * @see IWallpaperEngine#scalePreview(Rect) - */ - public void scalePreview(Rect scaleToRect) { - try { - mWrappedEngine.scalePreview(scaleToRect); - } catch (Exception e) { - Log.i(TAG, "Couldn't call scalePreview method on WallpaperEngine", e); - } - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperManagerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperManagerCompat.java deleted file mode 100644 index 1f194eca816f..000000000000 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WallpaperManagerCompat.java +++ /dev/null @@ -1,51 +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.systemui.shared.system; - -import android.app.WallpaperManager; -import android.content.Context; -import android.content.res.Resources; -import android.os.IBinder; - -/** - * @see WallpaperManager - */ -public class WallpaperManagerCompat { - private final WallpaperManager mWallpaperManager; - - public WallpaperManagerCompat(Context context) { - mWallpaperManager = context.getSystemService(WallpaperManager.class); - } - - /** - * @see WallpaperManager#setWallpaperZoomOut(IBinder, float) - */ - public void setWallpaperZoomOut(IBinder windowToken, float zoom) { - mWallpaperManager.setWallpaperZoomOut(windowToken, zoom); - } - - /** - * @return the max scale for the wallpaper when it's fully zoomed out - */ - public static float getWallpaperZoomOutMaxScale(Context context) { - return context.getResources() - .getFloat(Resources.getSystem().getIdentifier( - /* name= */ "config_wallpaperMaxScale", - /* defType= */ "dimen", - /* defPackage= */ "android")); - } -}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index ec11065682ff..3a6165c03e24 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -38,13 +38,13 @@ import android.util.DumpableContainer; import android.util.Log; import android.util.TimingsTraceLog; import android.view.SurfaceControl; +import android.view.ThreadedRenderer; import com.android.internal.protolog.common.ProtoLog; import com.android.systemui.dagger.ContextComponentHelper; import com.android.systemui.dagger.GlobalRootComponent; import com.android.systemui.dagger.SysUIComponent; import com.android.systemui.dump.DumpManager; -import com.android.systemui.shared.system.ThreadedRendererCompat; import com.android.systemui.util.NotificationChannels; import java.lang.reflect.Constructor; @@ -118,11 +118,11 @@ public class SystemUIApplication extends Application implements // The priority is defaulted at medium. int sfPriority = SurfaceControl.getGPUContextPriority(); Log.i(TAG, "Found SurfaceFlinger's GPU Priority: " + sfPriority); - if (sfPriority == ThreadedRendererCompat.EGL_CONTEXT_PRIORITY_REALTIME_NV) { + if (sfPriority == ThreadedRenderer.EGL_CONTEXT_PRIORITY_REALTIME_NV) { Log.i(TAG, "Setting SysUI's GPU Context priority to: " - + ThreadedRendererCompat.EGL_CONTEXT_PRIORITY_HIGH_IMG); - ThreadedRendererCompat.setContextPriority( - ThreadedRendererCompat.EGL_CONTEXT_PRIORITY_HIGH_IMG); + + ThreadedRenderer.EGL_CONTEXT_PRIORITY_HIGH_IMG); + ThreadedRenderer.setContextPriority( + ThreadedRenderer.EGL_CONTEXT_PRIORITY_HIGH_IMG); } // Enable binder tracing on system server for calls originating from SysUI diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index 0d20403b08f2..de03993a6f17 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -43,6 +43,7 @@ import android.os.Handler; import android.os.RemoteException; import android.util.Log; import android.util.Range; +import android.util.Size; import android.view.Choreographer; import android.view.Display; import android.view.Gravity; @@ -62,6 +63,8 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.accessibility.IRemoteMagnificationAnimationCallback; +import androidx.core.math.MathUtils; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.R; @@ -166,6 +169,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold private final Rect mMagnificationFrameBoundary = new Rect(); // The top Y of the system gesture rect at the bottom. Set to -1 if it is invalid. private int mSystemGestureTop = -1; + private int mMinWindowSize; private final WindowMagnificationAnimationController mAnimationController; private final SfVsyncFrameCallbackProvider mSfVsyncFrameProvider; @@ -208,8 +212,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold mBounceEffectDuration = mResources.getInteger( com.android.internal.R.integer.config_shortAnimTime); updateDimensions(); - setMagnificationFrameWith(mWindowBounds, mWindowBounds.width() / 2, - mWindowBounds.height() / 2); + + final Size windowSize = getDefaultWindowSizeWithWindowBounds(mWindowBounds); + setMagnificationFrame(windowSize.getWidth(), windowSize.getHeight(), + mWindowBounds.width() / 2, mWindowBounds.height() / 2); computeBounceAnimationScale(); mMirrorWindowControl = mirrorWindowControl; @@ -281,6 +287,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold R.dimen.magnification_drag_view_size); mOuterBorderSize = mResources.getDimensionPixelSize( R.dimen.magnification_outer_border_margin); + mMinWindowSize = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.accessibility_window_magnifier_min_size); } private void computeBounceAnimationScale() { @@ -414,9 +422,12 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold return false; } mWindowBounds.set(currentWindowBounds); + final Size windowSize = getDefaultWindowSizeWithWindowBounds(mWindowBounds); final float newCenterX = (getCenterX()) * mWindowBounds.width() / oldWindowBounds.width(); final float newCenterY = (getCenterY()) * mWindowBounds.height() / oldWindowBounds.height(); - setMagnificationFrameWith(mWindowBounds, (int) newCenterX, (int) newCenterY); + + setMagnificationFrame(windowSize.getWidth(), windowSize.getHeight(), (int) newCenterX, + (int) newCenterY); calculateMagnificationFrameBoundary(); return true; } @@ -454,11 +465,6 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold mWindowBounds.set(currentWindowBounds); - calculateMagnificationFrameBoundary(); - - if (!isWindowVisible()) { - return; - } // Keep MirrorWindow position on the screen unchanged when device rotates 90° // clockwise or anti-clockwise. @@ -469,14 +475,13 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } else if (rotationDegree == 270) { matrix.postTranslate(0, mWindowBounds.height()); } - // The rect of MirrorView is going to be transformed. - LayoutParams params = - (LayoutParams) mMirrorView.getLayoutParams(); - mTmpRect.set(params.x, params.y, params.x + params.width, params.y + params.height); - final RectF transformedRect = new RectF(mTmpRect); + + final RectF transformedRect = new RectF(mMagnificationFrame); + // The window frame is going to be transformed by the rotation matrix. + transformedRect.inset(-mMirrorSurfaceMargin, -mMirrorSurfaceMargin); matrix.mapRect(transformedRect); - moveWindowMagnifier(transformedRect.left - mTmpRect.left, - transformedRect.top - mTmpRect.top); + setWindowSizeAndCenter((int) transformedRect.width(), (int) transformedRect.height(), + (int) transformedRect.centerX(), (int) transformedRect.centerY()); } /** Returns the rotation degree change of two {@link Surface.Rotation} */ @@ -573,16 +578,52 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } } - private void setMagnificationFrameWith(Rect windowBounds, int centerX, int centerY) { + /** + * Sets the window size with given width and height in pixels without changing the + * window center. The width or the height will be clamped in the range + * [{@link #mMinWindowSize}, screen width or height]. + * + * @param width the window width in pixels + * @param height the window height in pixels. + */ + public void setWindowSize(int width, int height) { + setWindowSizeAndCenter(width, height, Float.NaN, Float.NaN); + } + + void setWindowSizeAndCenter(int width, int height, float centerX, float centerY) { + width = MathUtils.clamp(width, mMinWindowSize, mWindowBounds.width()); + height = MathUtils.clamp(height, mMinWindowSize, mWindowBounds.height()); + + if (Float.isNaN(centerX)) { + centerX = mMagnificationFrame.centerX(); + } + if (Float.isNaN(centerX)) { + centerY = mMagnificationFrame.centerY(); + } + + final int frameWidth = width - 2 * mMirrorSurfaceMargin; + final int frameHeight = height - 2 * mMirrorSurfaceMargin; + setMagnificationFrame(frameWidth, frameHeight, (int) centerX, (int) centerY); + calculateMagnificationFrameBoundary(); + // Correct the frame position to ensure it is inside the boundary. + updateMagnificationFramePosition(0, 0); + modifyWindowMagnification(true); + } + + private void setMagnificationFrame(int width, int height, int centerX, int centerY) { // Sets the initial frame area for the mirror and place it to the given center on the // display. + final int initX = centerX - width / 2; + final int initY = centerY - height / 2; + mMagnificationFrame.set(initX, initY, initX + width, initY + height); + } + + private Size getDefaultWindowSizeWithWindowBounds(Rect windowBounds) { int initSize = Math.min(windowBounds.width(), windowBounds.height()) / 2; initSize = Math.min(mResources.getDimensionPixelSize(R.dimen.magnification_max_frame_size), initSize); initSize += 2 * mMirrorSurfaceMargin; - final int initX = centerX - initSize / 2; - final int initY = centerY - initSize / 2; - mMagnificationFrame.set(initX, initY, initX + initSize, initY + initSize); + return new Size(initSize, initSize); } /** @@ -596,8 +637,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } mTransaction.show(mMirrorSurface) .reparent(mMirrorSurface, mMirrorSurfaceView.getSurfaceControl()); - - modifyWindowMagnification(mTransaction); + modifyWindowMagnification(false); } private void addDragTouchListeners() { @@ -615,18 +655,25 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } /** - * Modifies the placement of the mirrored content when the position of mMirrorView is updated. + * Modifies the placement of the mirrored content when the position or size of mMirrorView is + * updated. + * + * @param computeWindowSize set to {@code true} to compute window size with + * {@link #mMagnificationFrame}. */ - private void modifyWindowMagnification(SurfaceControl.Transaction t) { + private void modifyWindowMagnification(boolean computeWindowSize) { mSfVsyncFrameProvider.postFrameCallback(mMirrorViewGeometryVsyncCallback); - updateMirrorViewLayout(); + updateMirrorViewLayout(computeWindowSize); } /** - * Updates the layout params of MirrorView and translates MirrorView position when the view is - * moved close to the screen edges. + * Updates the layout params of MirrorView based on the size of {@link #mMagnificationFrame} + * and translates MirrorView position when the view is moved close to the screen edges; + * + * @param computeWindowSize set to {@code true} to compute window size with + * {@link #mMagnificationFrame}. */ - private void updateMirrorViewLayout() { + private void updateMirrorViewLayout(boolean computeWindowSize) { if (!isWindowVisible()) { return; } @@ -637,6 +684,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold (LayoutParams) mMirrorView.getLayoutParams(); params.x = mMagnificationFrame.left - mMirrorSurfaceMargin; params.y = mMagnificationFrame.top - mMirrorSurfaceMargin; + if (computeWindowSize) { + params.width = mMagnificationFrame.width() + 2 * mMirrorSurfaceMargin; + params.height = mMagnificationFrame.height() + 2 * mMirrorSurfaceMargin; + } // Translates MirrorView position to make MirrorSurfaceView that is inside MirrorView // able to move close to the screen edges. @@ -899,7 +950,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold createMirrorWindow(); showControls(); } else { - modifyWindowMagnification(mTransaction); + modifyWindowMagnification(false); } } @@ -930,7 +981,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold return; } if (updateMagnificationFramePosition((int) offsetX, (int) offsetY)) { - modifyWindowMagnification(mTransaction); + modifyWindowMagnification(false); } } @@ -1014,9 +1065,15 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold pw.println(" mOverlapWithGestureInsets:" + mOverlapWithGestureInsets); pw.println(" mScale:" + mScale); pw.println(" mMirrorViewBounds:" + (isWindowVisible() ? mMirrorViewBounds : "empty")); + pw.println(" mMagnificationFrameBoundary:" + + (isWindowVisible() ? mMagnificationFrameBoundary : "empty")); + pw.println(" mMagnificationFrame:" + + (isWindowVisible() ? mMagnificationFrame : "empty")); pw.println(" mSourceBounds:" + (isWindowVisible() ? mSourceBounds : "empty")); pw.println(" mSystemGestureTop:" + mSystemGestureTop); + pw.println(" mMagnificationFrameOffsetX:" + mMagnificationFrameOffsetX); + pw.println(" mMagnificationFrameOffsetY:" + mMagnificationFrameOffsetY); } private class MirrorWindowA11yDelegate extends View.AccessibilityDelegate { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index e088f548a356..5d6bbae1f14a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -202,11 +202,12 @@ public class CastTile extends QSTileImpl<BooleanState> { mActivityStarter .postStartActivityDismissingKeyguard(getLongClickIntent(), 0, controller); - }); + }, R.style.Theme_SystemUI_Dialog, false /* showProgressBarWhenEmpty */); holder.init(dialog); SystemUIDialog.setShowForAllUsers(dialog, true); SystemUIDialog.registerDismissListener(dialog); SystemUIDialog.setWindowOnTop(dialog, mKeyguard.isShowing()); + SystemUIDialog.setDialogSize(dialog); mUiHandler.post(() -> { if (view != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 0509a7caa719..7f43f9f3d215 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -327,7 +327,9 @@ public class KeyguardIndicationController { private void updateOrganizedOwnedDevice() { // avoid calling this method since it has an IPC mOrganizationOwnedDevice = whitelistIpcs(this::isOrganizationOwnedDevice); - updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); + if (!mDozing) { + updateDisclosure(); + } } private void updateDisclosure() { @@ -1185,7 +1187,7 @@ public class KeyguardIndicationController { mTopIndicationView.clearMessages(); mRotateTextViewController.clearMessages(); } else { - updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); + updateIndication(false); } } }; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index 1dd5e227a909..6e5926db519d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -88,6 +88,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; @LargeTest @TestableLooper.RunWithLooper @@ -345,15 +346,17 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { @Test public void onOrientationChanged_disabled_updateDisplayRotation() { - final Display display = Mockito.spy(mContext.getDisplay()); - when(display.getRotation()).thenReturn(Surface.ROTATION_90); - when(mContext.getDisplay()).thenReturn(display); + final Rect windowBounds = new Rect(mWindowManager.getCurrentWindowMetrics().getBounds()); + // Rotate the window clockwise 90 degree. + windowBounds.set(windowBounds.top, windowBounds.left, windowBounds.bottom, + windowBounds.right); + mWindowManager.setWindowBounds(windowBounds); + final int newRotation = simulateRotateTheDevice(); - mInstrumentation.runOnMainSync(() -> { - mWindowMagnificationController.onConfigurationChanged(ActivityInfo.CONFIG_ORIENTATION); - }); + mInstrumentation.runOnMainSync(() -> mWindowMagnificationController.onConfigurationChanged( + ActivityInfo.CONFIG_ORIENTATION)); - assertEquals(Surface.ROTATION_90, mWindowMagnificationController.mRotation); + assertEquals(newRotation, mWindowMagnificationController.mRotation); } @Test @@ -603,6 +606,113 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { ReferenceTestUtils.waitForCondition(() -> hasMagnificationOverlapFlag()); } + @Test + public void setMinimumWindowSize_enabled_expectedWindowSize() { + final int minimumWindowSize = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.accessibility_window_magnifier_min_size); + final int expectedWindowHeight = minimumWindowSize; + final int expectedWindowWidth = minimumWindowSize; + mInstrumentation.runOnMainSync( + () -> mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, + Float.NaN, Float.NaN)); + + final AtomicInteger actualWindowHeight = new AtomicInteger(); + final AtomicInteger actualWindowWidth = new AtomicInteger(); + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.setWindowSize(expectedWindowWidth, expectedWindowHeight); + actualWindowHeight.set(mWindowManager.getLayoutParamsFromAttachedView().height); + actualWindowWidth.set(mWindowManager.getLayoutParamsFromAttachedView().width); + + }); + + assertEquals(expectedWindowHeight, actualWindowHeight.get()); + assertEquals(expectedWindowWidth, actualWindowWidth.get()); + } + + @Test + public void setMinimumWindowSizeThenEnable_expectedWindowSize() { + final int minimumWindowSize = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.accessibility_window_magnifier_min_size); + final int expectedWindowHeight = minimumWindowSize; + final int expectedWindowWidth = minimumWindowSize; + + final AtomicInteger actualWindowHeight = new AtomicInteger(); + final AtomicInteger actualWindowWidth = new AtomicInteger(); + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.setWindowSize(expectedWindowWidth, expectedWindowHeight); + mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, + Float.NaN, Float.NaN); + actualWindowHeight.set(mWindowManager.getLayoutParamsFromAttachedView().height); + actualWindowWidth.set(mWindowManager.getLayoutParamsFromAttachedView().width); + }); + + assertEquals(expectedWindowHeight, actualWindowHeight.get()); + assertEquals(expectedWindowWidth, actualWindowWidth.get()); + } + + @Test + public void setWindowSizeLessThanMin_enabled_minimumWindowSize() { + final int minimumWindowSize = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.accessibility_window_magnifier_min_size); + mInstrumentation.runOnMainSync( + () -> mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, + Float.NaN, Float.NaN)); + + final AtomicInteger actualWindowHeight = new AtomicInteger(); + final AtomicInteger actualWindowWidth = new AtomicInteger(); + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.setWindowSize(minimumWindowSize - 10, + minimumWindowSize - 10); + actualWindowHeight.set(mWindowManager.getLayoutParamsFromAttachedView().height); + actualWindowWidth.set(mWindowManager.getLayoutParamsFromAttachedView().width); + }); + + assertEquals(minimumWindowSize, actualWindowHeight.get()); + assertEquals(minimumWindowSize, actualWindowWidth.get()); + } + + @Test + public void setWindowSizeLargerThanScreenSize_enabled_windowSizeIsScreenSize() { + final Rect bounds = mWindowManager.getCurrentWindowMetrics().getBounds(); + mInstrumentation.runOnMainSync( + () -> mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, + Float.NaN, Float.NaN)); + + final AtomicInteger actualWindowHeight = new AtomicInteger(); + final AtomicInteger actualWindowWidth = new AtomicInteger(); + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.setWindowSize(bounds.width() + 10, bounds.height() + 10); + actualWindowHeight.set(mWindowManager.getLayoutParamsFromAttachedView().height); + actualWindowWidth.set(mWindowManager.getLayoutParamsFromAttachedView().width); + }); + + assertEquals(bounds.height(), actualWindowHeight.get()); + assertEquals(bounds.width(), actualWindowWidth.get()); + } + + @Test + public void setWindowCenterOutOfScreen_enabled_magnificationCenterIsInsideTheScreen() { + + final int minimumWindowSize = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.accessibility_window_magnifier_min_size); + final Rect bounds = mWindowManager.getCurrentWindowMetrics().getBounds(); + mInstrumentation.runOnMainSync( + () -> mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, + Float.NaN, Float.NaN)); + + final AtomicInteger magnificationCenterX = new AtomicInteger(); + final AtomicInteger magnificationCenterY = new AtomicInteger(); + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.setWindowSizeAndCenter(minimumWindowSize, + minimumWindowSize, bounds.right, bounds.bottom); + magnificationCenterX.set((int) mWindowMagnificationController.getCenterX()); + magnificationCenterY.set((int) mWindowMagnificationController.getCenterY()); + }); + + assertTrue(magnificationCenterX.get() < bounds.right); + assertTrue(magnificationCenterY.get() < bounds.bottom); + } + private CharSequence getAccessibilityWindowTitle() { final View mirrorView = mWindowManager.getAttachedView(); if (mirrorView == null) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index 466d954e7be0..65271bc456b4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -779,8 +779,11 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { public void testOnKeyguardShowingChanged_showing_updatesPersistentMessages() { createController(); - // GIVEN keyguard is showing + // GIVEN keyguard is showing and not dozing when(mKeyguardStateController.isShowing()).thenReturn(true); + mController.setVisible(true); + mExecutor.runAllReady(); + reset(mRotateTextViewController); // WHEN keyguard showing changed called mKeyguardStateControllerCallback.onKeyguardShowingChanged(); diff --git a/services/cloudsearch/java/com/android/server/cloudsearch/CloudSearchManagerService.java b/services/cloudsearch/java/com/android/server/cloudsearch/CloudSearchManagerService.java index daead0a5ff9d..874f6fec41e0 100644 --- a/services/cloudsearch/java/com/android/server/cloudsearch/CloudSearchManagerService.java +++ b/services/cloudsearch/java/com/android/server/cloudsearch/CloudSearchManagerService.java @@ -109,7 +109,7 @@ public class CloudSearchManagerService extends @Override public void search(@NonNull SearchRequest searchRequest, @NonNull ICloudSearchManagerCallback callBack) { - searchRequest.setSource( + searchRequest.setCallerPackageName( mContext.getPackageManager().getNameForUid(Binder.getCallingUid())); runForUserLocked("search", searchRequest.getRequestId(), (service) -> service.onSearchLocked(searchRequest, callBack)); diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 111bd340a3d1..e6953f0032c7 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -657,6 +657,11 @@ public abstract class PackageManagerInternal { public abstract void notifyPackageUse(String packageName, int reason); /** + * Notify the package is force stopped. + */ + public abstract void onPackageProcessKilledForUninstall(String packageName); + + /** * Returns a package object for the given package name. */ public abstract @Nullable AndroidPackage getPackage(@NonNull String packageName); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6813f3f83135..8c04c1e32291 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -694,12 +694,6 @@ public class ActivityManagerService extends IActivityManager.Stub return (isFg) ? mFgBroadcastQueue : mBgBroadcastQueue; } - /** - * The package name of the DeviceOwner. This package is not permitted to have its data cleared. - * <p>Not actually used</p> - */ - private volatile String mDeviceOwnerName; - private volatile int mDeviceOwnerUid = INVALID_UID; /** @@ -6238,17 +6232,6 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override - public void updateDeviceOwner(String packageName) { - final int callingUid = Binder.getCallingUid(); - if (callingUid != 0 && callingUid != SYSTEM_UID) { - throw new SecurityException("updateDeviceOwner called from non-system process"); - } - synchronized (this) { - mDeviceOwnerName = packageName; - } - } - - @Override public void updateLockTaskPackages(int userId, String[] packages) { mActivityTaskManager.updateLockTaskPackages(userId, packages); } @@ -13596,6 +13579,8 @@ public class ActivityManagerService extends IActivityManager.Stub intent.getIntExtra(Intent.EXTRA_UID, -1)), false, true, true, false, fullUninstall, userId, removed ? "pkg removed" : "pkg changed"); + getPackageManagerInternal() + .onPackageProcessKilledForUninstall(ssp); } else { // Kill any app zygotes always, since they can't fork new // processes with references to the old code @@ -15623,24 +15608,20 @@ public class ActivityManagerService extends IActivityManager.Stub } for (int i = 0, size = processes.size(); i < size; i++) { ProcessRecord app = processes.get(i); - pw.println(String.format("------ DUMP RESOURCES %s (%s) ------", + pw.println(String.format("Resources History for %s (%s)", app.processName, app.info.packageName)); pw.flush(); try { - TransferPipe tp = new TransferPipe(); + TransferPipe tp = new TransferPipe(" "); try { IApplicationThread thread = app.getThread(); if (thread != null) { app.getThread().dumpResources(tp.getWriteFd(), null); tp.go(fd.getFileDescriptor(), 2000); - pw.println(String.format("------ END DUMP RESOURCES %s (%s) ------", - app.processName, - app.info.packageName)); - pw.flush(); } else { pw.println(String.format( - "------ DUMP RESOURCES %s (%s) failed, no thread ------", + " Resources history for %s (%s) failed, no thread", app.processName, app.info.packageName)); } @@ -15648,11 +15629,7 @@ public class ActivityManagerService extends IActivityManager.Stub tp.kill(); } } catch (IOException e) { - pw.println(String.format( - "------ EXCEPTION DUMPING RESOURCES for %s (%s): %s ------", - app.processName, - app.info.packageName, - e.getMessage())); + pw.println(" " + e.getMessage()); pw.flush(); } diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index b813bc48118a..0edbea0dbd28 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -90,6 +90,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.compat.CompatibilityOverrideConfig; import com.android.internal.compat.IPlatformCompat; import com.android.internal.os.BackgroundThread; +import com.android.internal.util.FrameworkStatsLog; import com.android.server.LocalServices; import com.android.server.ServiceThread; import com.android.server.SystemService; @@ -268,16 +269,34 @@ public final class GameManagerService extends IGameManagerService.Stub { break; } case SET_GAME_STATE: { - if (mPowerManagerInternal == null) { - final Bundle data = msg.getData(); - Slog.d(TAG, "Error setting loading mode for package " - + data.getString(PACKAGE_NAME_MSG_KEY) - + " and userId " + data.getInt(USER_ID_MSG_KEY)); - break; - } final GameState gameState = (GameState) msg.obj; final boolean isLoading = gameState.isLoading(); - mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, isLoading); + final Bundle data = msg.getData(); + final String packageName = data.getString(PACKAGE_NAME_MSG_KEY); + final int userId = data.getInt(USER_ID_MSG_KEY); + + // Restrict to games only. Requires performance mode to be enabled. + final boolean boostEnabled = + getGameMode(packageName, userId) == GameManager.GAME_MODE_PERFORMANCE; + int uid; + try { + uid = mPackageManager.getPackageUidAsUser(packageName, userId); + } catch (NameNotFoundException e) { + Slog.v(TAG, "Failed to get package metadata"); + uid = -1; + } + FrameworkStatsLog.write(FrameworkStatsLog.GAME_STATE_CHANGED, packageName, uid, + boostEnabled, gameStateModeToStatsdGameState(gameState.getMode()), + isLoading, gameState.getLabel(), gameState.getQuality()); + + if (boostEnabled) { + if (mPowerManagerInternal == null) { + Slog.d(TAG, "Error setting loading mode for package " + packageName + + " and userId " + userId); + break; + } + mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, isLoading); + } break; } } @@ -387,12 +406,6 @@ public final class GameManagerService extends IGameManagerService.Stub { // Restrict to games only. return; } - - if (getGameMode(packageName, userId) != GameManager.GAME_MODE_PERFORMANCE) { - // Requires performance mode to be enabled. - return; - } - final Message msg = mHandler.obtainMessage(SET_GAME_STATE); final Bundle data = new Bundle(); data.putString(PACKAGE_NAME_MSG_KEY, packageName); @@ -1543,6 +1556,22 @@ public final class GameManagerService extends IGameManagerService.Stub { return out.toString(); } + private static int gameStateModeToStatsdGameState(int mode) { + switch (mode) { + case GameState.MODE_NONE: + return FrameworkStatsLog.GAME_STATE_CHANGED__STATE__MODE_NONE; + case GameState.MODE_GAMEPLAY_INTERRUPTIBLE: + return FrameworkStatsLog.GAME_STATE_CHANGED__STATE__MODE_GAMEPLAY_INTERRUPTIBLE; + case GameState.MODE_GAMEPLAY_UNINTERRUPTIBLE: + return FrameworkStatsLog.GAME_STATE_CHANGED__STATE__MODE_GAMEPLAY_UNINTERRUPTIBLE; + case GameState.MODE_CONTENT: + return FrameworkStatsLog.GAME_STATE_CHANGED__STATE__MODE_CONTENT; + case GameState.MODE_UNKNOWN: + default: + return FrameworkStatsLog.GAME_STATE_CHANGED__STATE__MODE_UNKNOWN; + } + } + private static ServiceThread createServiceThread() { ServiceThread handlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 0b9fb1a72f8d..a67e6af5e60b 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -127,6 +127,7 @@ import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.HwBinder; import android.os.IBinder; import android.os.Looper; import android.os.Message; @@ -10410,6 +10411,25 @@ public class AudioService extends IAudioService.Stub return mMediaFocusControl.sendFocusLoss(focusLoser); } + private static final String[] HAL_VERSIONS = new String[] {"7.1", "7.0", "6.0", "4.0", "2.0"}; + + /** @see AudioManager#getHalVersion */ + public @Nullable String getHalVersion() { + for (String version : HAL_VERSIONS) { + try { + HwBinder.getService( + String.format("android.hardware.audio@%s::IDevicesFactory", version), + "default"); + return version; + } catch (NoSuchElementException e) { + // Ignore, the specified HAL interface is not found. + } catch (RemoteException re) { + Log.e(TAG, "Remote exception when getting hardware audio service:", re); + } + } + return null; + } + /** see AudioManager.hasRegisteredDynamicPolicy */ public boolean hasRegisteredDynamicPolicy() { synchronized (mAudioPolicies) { diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index f50011020694..7550d7e25de5 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -3952,12 +3952,22 @@ public final class DisplayManagerService extends SystemService { * Listens to changes in device state and reports the state to LogicalDisplayMapper. */ class DeviceStateListener implements DeviceStateManager.DeviceStateCallback { + // Base state corresponds to the physical state of the device + private int mBaseState = DeviceStateManager.INVALID_DEVICE_STATE; + @Override public void onStateChanged(int deviceState) { + boolean isDeviceStateOverrideActive = deviceState != mBaseState; synchronized (mSyncRoot) { - mLogicalDisplayMapper.setDeviceStateLocked(deviceState); + mLogicalDisplayMapper + .setDeviceStateLocked(deviceState, isDeviceStateOverrideActive); } } + + @Override + public void onBaseStateChanged(int state) { + mBaseState = state; + } }; private class BrightnessPair { diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 9067f2e25152..accdd5610921 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -63,6 +63,7 @@ import com.android.internal.display.BrightnessSynchronizer; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.FrameworkStatsLog; +import com.android.internal.util.RingBuffer; import com.android.server.LocalServices; import com.android.server.am.BatteryStatsService; import com.android.server.display.RampAnimator.DualRampAnimator; @@ -155,6 +156,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private static final int REPORTED_TO_POLICY_SCREEN_ON = 2; private static final int REPORTED_TO_POLICY_SCREEN_TURNING_OFF = 3; + private static final int RINGBUFFER_MAX = 100; + private final String TAG; private final Object mLock = new Object(); @@ -212,6 +215,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final float mScreenBrightnessDefault; + // Previously logged screen brightness. Used for autobrightness event dumpsys. + private float mPreviousScreenBrightness = Float.NaN; + // The minimum allowed brightness while in VR. private final float mScreenBrightnessForVrRangeMinimum; @@ -387,6 +393,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final Runnable mOnBrightnessChangeRunnable; + // Used for keeping record in dumpsys for when and to which brightness auto adaptions were made. + private RingBuffer<AutobrightnessEvent> mAutobrightnessEventRingBuffer; + // A record of state for skipping brightness ramps. private int mSkipRampState = RAMP_STATE_SKIP_NONE; @@ -988,6 +997,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mHbmController, mBrightnessThrottler, mIdleModeBrightnessMapper, mDisplayDeviceConfig.getAmbientHorizonShort(), mDisplayDeviceConfig.getAmbientHorizonLong()); + + mAutobrightnessEventRingBuffer = + new RingBuffer<>(AutobrightnessEvent.class, RINGBUFFER_MAX); } else { mUseSoftwareAutoBrightnessConfig = false; } @@ -1558,6 +1570,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call Slog.v(TAG, "Brightness [" + brightnessState + "] manual adjustment."); } + // Add any automatic changes to autobrightness ringbuffer for dumpsys. + if (mBrightnessReason.reason == BrightnessReason.REASON_AUTOMATIC + && !BrightnessSynchronizer.floatEquals( + mPreviousScreenBrightness, brightnessState)) { + mPreviousScreenBrightness = brightnessState; + mAutobrightnessEventRingBuffer.append(new AutobrightnessEvent( + System.currentTimeMillis(), brightnessState)); + } + // Update display white-balance. if (mDisplayWhiteBalanceController != null) { if (state == Display.STATE_ON && mDisplayWhiteBalanceSettings.isEnabled()) { @@ -2491,6 +2512,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mAutomaticBrightnessController != null) { mAutomaticBrightnessController.dump(pw); + dumpAutobrightnessEvents(pw); } if (mHbmController != null) { @@ -2547,6 +2569,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } + private void dumpAutobrightnessEvents(PrintWriter pw) { + int size = mAutobrightnessEventRingBuffer.size(); + if (size < 1) { + pw.println("No Automatic Brightness Adjustments"); + return; + } + + pw.println("Automatic Brightness Adjustments Last " + size + " Events: "); + AutobrightnessEvent[] eventArray = mAutobrightnessEventRingBuffer.toArray(); + for (int i = 0; i < mAutobrightnessEventRingBuffer.size(); i++) { + pw.println(" " + eventArray[i].toString()); + } + } + private static float clampAbsoluteBrightness(float value) { return MathUtils.constrain(value, PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX); @@ -2615,6 +2651,21 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } + private static class AutobrightnessEvent { + final long mTime; + final float mBrightness; + + AutobrightnessEvent(long time, float brightness) { + mTime = time; + mBrightness = brightness; + } + + @Override + public String toString() { + return TimeUtils.formatForLogging(mTime) + " - Brightness: " + mBrightness; + } + } + private final class DisplayControllerHandler extends Handler { public DisplayControllerHandler(Looper looper) { super(looper, null, true /*async*/); diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index d233c5ee2ffc..2e80efb957d4 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -255,10 +255,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { public boolean updateDisplayPropertiesLocked(SurfaceControl.StaticDisplayInfo staticInfo, SurfaceControl.DynamicDisplayInfo dynamicInfo, SurfaceControl.DesiredDisplayModeSpecs modeSpecs) { - boolean changed = - updateSystemPreferredDisplayMode(dynamicInfo.preferredBootDisplayMode); - changed |= updateDisplayModesLocked( - dynamicInfo.supportedDisplayModes, dynamicInfo.activeDisplayModeId, modeSpecs); + boolean changed = updateDisplayModesLocked( + dynamicInfo.supportedDisplayModes, dynamicInfo.preferredBootDisplayMode, + dynamicInfo.activeDisplayModeId, modeSpecs); changed |= updateStaticInfo(staticInfo); changed |= updateColorModesLocked(dynamicInfo.supportedColorModes, dynamicInfo.activeColorMode); @@ -273,10 +272,12 @@ final class LocalDisplayAdapter extends DisplayAdapter { } public boolean updateDisplayModesLocked( - SurfaceControl.DisplayMode[] displayModes, int activeDisplayModeId, - SurfaceControl.DesiredDisplayModeSpecs modeSpecs) { + SurfaceControl.DisplayMode[] displayModes, int preferredSfDisplayModeId, + int activeSfDisplayModeId, SurfaceControl.DesiredDisplayModeSpecs modeSpecs) { mSfDisplayModes = Arrays.copyOf(displayModes, displayModes.length); - mActiveSfDisplayMode = getModeById(displayModes, activeDisplayModeId); + mActiveSfDisplayMode = getModeById(displayModes, activeSfDisplayModeId); + SurfaceControl.DisplayMode preferredSfDisplayMode = + getModeById(displayModes, preferredSfDisplayModeId); // Build an updated list of all existing modes. ArrayList<DisplayModeRecord> records = new ArrayList<>(); @@ -335,6 +336,27 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } + boolean preferredModeChanged = false; + + if (preferredSfDisplayModeId != INVALID_MODE_ID && preferredSfDisplayMode != null) { + DisplayModeRecord preferredRecord = null; + for (DisplayModeRecord record : records) { + if (record.hasMatchingMode(preferredSfDisplayMode)) { + preferredRecord = record; + break; + } + } + + if (preferredRecord != null) { + int preferredModeId = preferredRecord.mMode.getModeId(); + if (mSurfaceControlProxy.getBootDisplayModeSupport() + && mSystemPreferredModeId != preferredModeId) { + mSystemPreferredModeId = preferredModeId; + preferredModeChanged = true; + } + } + } + boolean activeModeChanged = false; // Check whether SurfaceFlinger or the display device changed the active mode out from @@ -373,7 +395,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { boolean recordsChanged = records.size() != mSupportedModes.size() || modesAdded; // If the records haven't changed then we're done here. if (!recordsChanged) { - return activeModeChanged; + return activeModeChanged || preferredModeChanged; } mSupportedModes.clear(); @@ -386,14 +408,14 @@ final class LocalDisplayAdapter extends DisplayAdapter { mDefaultModeId = mSystemPreferredModeId != INVALID_MODE_ID ? mSystemPreferredModeId : activeRecord.mMode.getModeId(); mDefaultModeGroup = mSystemPreferredModeId != INVALID_MODE_ID - ? getModeById(mSfDisplayModes, mSystemPreferredModeId).group + ? preferredSfDisplayMode.group : mActiveSfDisplayMode.group; } else if (modesAdded && activeModeChanged) { Slog.d(TAG, "New display modes are added and the active mode has changed, " + "use active mode as default mode."); mDefaultModeId = activeRecord.mMode.getModeId(); mDefaultModeGroup = mActiveSfDisplayMode.group; - } else if (findDisplayModeIdLocked(mDefaultModeId, mDefaultModeGroup) < 0) { + } else if (findSfDisplayModeIdLocked(mDefaultModeId, mDefaultModeGroup) < 0) { Slog.w(TAG, "Default display mode no longer available, using currently" + " active mode as default."); mDefaultModeId = activeRecord.mMode.getModeId(); @@ -545,15 +567,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { return true; } - private boolean updateSystemPreferredDisplayMode(int modeId) { - if (!mSurfaceControlProxy.getBootDisplayModeSupport() - || mSystemPreferredModeId == modeId) { - return false; - } - mSystemPreferredModeId = modeId; - return true; - } - private SurfaceControl.DisplayMode getModeById(SurfaceControl.DisplayMode[] supportedModes, int modeId) { for (SurfaceControl.DisplayMode mode : supportedModes) { @@ -887,8 +900,10 @@ final class LocalDisplayAdapter extends DisplayAdapter { if (mUserPreferredMode == null) { mSurfaceControlProxy.clearBootDisplayMode(getDisplayTokenLocked()); } else { + int preferredSfDisplayModeId = findSfDisplayModeIdLocked( + mUserPreferredMode.getModeId(), mDefaultModeGroup); mSurfaceControlProxy.setBootDisplayMode(getDisplayTokenLocked(), - mUserPreferredMode.getModeId()); + preferredSfDisplayModeId); } } @@ -923,9 +938,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { // mode based on vendor requirements. // Note: We prefer the default mode group over the current one as this is the mode // group the vendor prefers. - int baseModeId = findDisplayModeIdLocked(displayModeSpecs.baseModeId, + int baseSfModeId = findSfDisplayModeIdLocked(displayModeSpecs.baseModeId, mDefaultModeGroup); - if (baseModeId < 0) { + if (baseSfModeId < 0) { // When a display is hotplugged, it's possible for a mode to be removed that was // previously valid. Because of the way display changes are propagated through the // framework, and the caching of the display mode specs in LogicalDisplay, it's @@ -943,7 +958,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { getHandler().sendMessage(PooledLambda.obtainMessage( LocalDisplayDevice::setDesiredDisplayModeSpecsAsync, this, getDisplayTokenLocked(), - new SurfaceControl.DesiredDisplayModeSpecs(baseModeId, + new SurfaceControl.DesiredDisplayModeSpecs(baseSfModeId, mDisplayModeSpecs.allowGroupSwitching, mDisplayModeSpecs.primaryRefreshRateRange.min, mDisplayModeSpecs.primaryRefreshRateRange.max, @@ -1090,14 +1105,14 @@ final class LocalDisplayAdapter extends DisplayAdapter { pw.println("mDisplayDeviceConfig=" + mDisplayDeviceConfig); } - private int findDisplayModeIdLocked(int modeId, int modeGroup) { - int matchingModeId = INVALID_MODE_ID; - DisplayModeRecord record = mSupportedModes.get(modeId); + private int findSfDisplayModeIdLocked(int displayModeId, int modeGroup) { + int matchingSfDisplayModeId = INVALID_MODE_ID; + DisplayModeRecord record = mSupportedModes.get(displayModeId); if (record != null) { for (SurfaceControl.DisplayMode mode : mSfDisplayModes) { if (record.hasMatchingMode(mode)) { - if (matchingModeId == INVALID_MODE_ID) { - matchingModeId = mode.id; + if (matchingSfDisplayModeId == INVALID_MODE_ID) { + matchingSfDisplayModeId = mode.id; } // Prefer to return a mode that matches the modeGroup @@ -1107,7 +1122,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } } - return matchingModeId; + return matchingSfDisplayModeId; } // Returns a mode with id = modeId. diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java index 6f5729f89e0f..add0a9f77108 100644 --- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java +++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java @@ -359,7 +359,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { mDeviceStateToLayoutMap.dumpLocked(ipw); } - void setDeviceStateLocked(int state) { + void setDeviceStateLocked(int state, boolean isOverrideActive) { Slog.i(TAG, "Requesting Transition to state: " + state + ", from state=" + mDeviceState + ", interactive=" + mInteractive); // As part of a state transition, we may need to turn off some displays temporarily so that @@ -370,12 +370,10 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { resetLayoutLocked(mDeviceState, state, LogicalDisplay.DISPLAY_PHASE_LAYOUT_TRANSITION); } mPendingDeviceState = state; - final boolean wakeDevice = mDeviceStatesOnWhichToWakeUp.get(mPendingDeviceState) - && !mDeviceStatesOnWhichToWakeUp.get(mDeviceState) - && !mInteractive && mBootCompleted; - final boolean sleepDevice = mDeviceStatesOnWhichToSleep.get(mPendingDeviceState) - && !mDeviceStatesOnWhichToSleep.get(mDeviceState) - && mInteractive && mBootCompleted; + final boolean wakeDevice = shouldDeviceBeWoken(mPendingDeviceState, mDeviceState, + mInteractive, mBootCompleted); + final boolean sleepDevice = shouldDeviceBePutToSleep(mPendingDeviceState, mDeviceState, + isOverrideActive, mInteractive, mBootCompleted); // If all displays are off already, we can just transition here, unless we are trying to // wake or sleep the device as part of this transition. In that case defer the final @@ -429,6 +427,53 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { } } + /** + * Returns if the device should be woken up or not. Called to check if the device state we are + * moving to is one that should awake the device, as well as if we are moving from a device + * state that shouldn't have been already woken from. + * + * @param pendingState device state we are moving to + * @param currentState device state we are currently in + * @param isInteractive if the device is in an interactive state + * @param isBootCompleted is the device fully booted + * + * @see #shouldDeviceBePutToSleep + * @see #setDeviceStateLocked + */ + @VisibleForTesting + boolean shouldDeviceBeWoken(int pendingState, int currentState, boolean isInteractive, + boolean isBootCompleted) { + return mDeviceStatesOnWhichToWakeUp.get(pendingState) + && !mDeviceStatesOnWhichToWakeUp.get(currentState) + && !isInteractive && isBootCompleted; + } + + /** + * Returns if the device should be put to sleep or not. + * + * Includes a check to verify that the device state that we are moving to, {@code pendingState}, + * is the same as the physical state of the device, {@code baseState}. Different values for + * these parameters indicate a device state override is active, and we shouldn't put the device + * to sleep to provide a better user experience. + * + * @param pendingState device state we are moving to + * @param currentState device state we are currently in + * @param isOverrideActive if a device state override is currently active or not + * @param isInteractive if the device is in an interactive state + * @param isBootCompleted is the device fully booted + * + * @see #shouldDeviceBeWoken + * @see #setDeviceStateLocked + */ + @VisibleForTesting + boolean shouldDeviceBePutToSleep(int pendingState, int currentState, boolean isOverrideActive, + boolean isInteractive, boolean isBootCompleted) { + return mDeviceStatesOnWhichToSleep.get(pendingState) + && !mDeviceStatesOnWhichToSleep.get(currentState) + && !isOverrideActive + && isInteractive && isBootCompleted; + } + private boolean areAllTransitioningDisplaysOffLocked() { final int count = mLogicalDisplays.size(); for (int i = 0; i < count; i++) { diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java index b2f500a59ba9..d2d80ffde532 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java @@ -408,6 +408,11 @@ final class InputMethodBindingController { @GuardedBy("ImfLock.class") @NonNull InputBindResult bindCurrentMethod() { + if (mSelectedMethodId == null) { + Slog.e(TAG, "mSelectedMethodId is null!"); + return InputBindResult.NO_IME; + } + InputMethodInfo info = mMethodMap.get(mSelectedMethodId); if (info == null) { throw new IllegalArgumentException("Unknown id: " + mSelectedMethodId); diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java index d42e2c63e80d..0b8f94c574c6 100644 --- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java +++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java @@ -1607,6 +1607,8 @@ public class LocationProviderManager extends public @Nullable Location getLastLocation(LastLocationRequest request, CallerIdentity identity, @PermissionLevel int permissionLevel) { + request = calculateLastLocationRequest(request); + if (!isActive(request.isBypass(), identity)) { return null; } @@ -1634,6 +1636,38 @@ public class LocationProviderManager extends return location; } + private LastLocationRequest calculateLastLocationRequest(LastLocationRequest baseRequest) { + LastLocationRequest.Builder builder = new LastLocationRequest.Builder(baseRequest); + + boolean locationSettingsIgnored = baseRequest.isLocationSettingsIgnored(); + if (locationSettingsIgnored) { + // if we are not currently allowed use location settings ignored, disable it + if (!mSettingsHelper.getIgnoreSettingsAllowlist().contains( + getIdentity().getPackageName(), getIdentity().getAttributionTag()) + && !mLocationManagerInternal.isProvider(null, getIdentity())) { + locationSettingsIgnored = false; + } + + builder.setLocationSettingsIgnored(locationSettingsIgnored); + } + + boolean adasGnssBypass = baseRequest.isAdasGnssBypass(); + if (adasGnssBypass) { + // if we are not currently allowed use adas gnss bypass, disable it + if (!GPS_PROVIDER.equals(mName)) { + Log.e(TAG, "adas gnss bypass request received in non-gps provider"); + adasGnssBypass = false; + } else if (!mLocationSettings.getUserSettings( + getIdentity().getUserId()).isAdasGnssLocationEnabled()) { + adasGnssBypass = false; + } + + builder.setAdasGnssBypass(adasGnssBypass); + } + + return builder.build(); + } + /** * This function does not perform any permissions or safety checks, by calling it you are * committing to performing all applicable checks yourself. This always returns a "fine" diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index 9b1005880e07..a5067439db58 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -29,7 +29,6 @@ import android.apex.CompressedApexInfoList; import android.apex.IApexService; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; -import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.SigningDetails; import android.content.pm.parsing.result.ParseResult; @@ -813,7 +812,7 @@ public abstract class ApexManager { throw new RuntimeException(re); } catch (Exception e) { throw new PackageManagerException( - PackageInstaller.SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "apexd verification failed : " + e.getMessage()); } } @@ -840,7 +839,7 @@ public abstract class ApexManager { throw new RuntimeException(re); } catch (Exception e) { throw new PackageManagerException( - PackageInstaller.SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Failed to mark apexd session as ready : " + e.getMessage()); } } diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index c09c904ff931..1fc291d17b8c 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -183,7 +183,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -1596,18 +1595,16 @@ final class InstallPackageHelper { parsedPackage.setRestrictUpdateHash(oldPackage.getRestrictUpdateHash()); } - // Check for shared user id changes - if (!Objects.equals(oldPackage.getSharedUserId(), - parsedPackage.getSharedUserId()) - // Don't mark as invalid if the app is trying to - // leave a sharedUserId - && parsedPackage.getSharedUserId() != null) { + // APK should not change its sharedUserId declarations + final var oldSharedUid = oldPackage.getSharedUserId() != null + ? oldPackage.getSharedUserId() : "<nothing>"; + final var newSharedUid = parsedPackage.getSharedUserId() != null + ? parsedPackage.getSharedUserId() : "<nothing>"; + if (!oldSharedUid.equals(newSharedUid)) { throw new PrepareFailure(INSTALL_FAILED_UID_CHANGED, "Package " + parsedPackage.getPackageName() + " shared user changed from " - + (oldPackage.getSharedUserId() != null - ? oldPackage.getSharedUserId() : "<nothing>") - + " to " + parsedPackage.getSharedUserId()); + + oldSharedUid + " to " + newSharedUid); } // In case of rollback, remember per-user/profile install state @@ -2889,9 +2886,13 @@ final class InstallPackageHelper { } } - final boolean deferInstallObserver = succeeded && update && !killApp; + final boolean deferInstallObserver = succeeded && update; if (deferInstallObserver) { - mPm.scheduleDeferredNoKillInstallObserver(res, installObserver); + if (killApp) { + mPm.scheduleDeferredPendingKillInstallObserver(res, installObserver); + } else { + mPm.scheduleDeferredNoKillInstallObserver(res, installObserver); + } } else { mPm.notifyInstallObserver(res, installObserver); } @@ -3696,10 +3697,13 @@ final class InstallPackageHelper { } disabledPkgSetting = mPm.mSettings.getDisabledSystemPkgLPr( parsedPackage.getPackageName()); - sharedUserSetting = (parsedPackage.getSharedUserId() != null) - ? mPm.mSettings.getSharedUserLPw(parsedPackage.getSharedUserId(), - 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true) - : null; + if (parsedPackage.getSharedUserId() != null && !parsedPackage.isLeavingSharedUid()) { + sharedUserSetting = mPm.mSettings.getSharedUserLPw( + parsedPackage.getSharedUserId(), + 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true /*create*/); + } else { + sharedUserSetting = null; + } if (DEBUG_PACKAGE_SCANNING && (parseFlags & ParsingPackageUtils.PARSE_CHATTY) != 0 && sharedUserSetting != null) { diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java index b028a2cef2a5..e8faca9765f8 100644 --- a/services/core/java/com/android/server/pm/PackageHandler.java +++ b/services/core/java/com/android/server/pm/PackageHandler.java @@ -24,6 +24,7 @@ import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL; import static com.android.server.pm.PackageManagerService.DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD; import static com.android.server.pm.PackageManagerService.DEFERRED_NO_KILL_INSTALL_OBSERVER; import static com.android.server.pm.PackageManagerService.DEFERRED_NO_KILL_POST_DELETE; +import static com.android.server.pm.PackageManagerService.DEFERRED_PENDING_KILL_INSTALL_OBSERVER; import static com.android.server.pm.PackageManagerService.DOMAIN_VERIFICATION; import static com.android.server.pm.PackageManagerService.ENABLE_ROLLBACK_STATUS; import static com.android.server.pm.PackageManagerService.ENABLE_ROLLBACK_TIMEOUT; @@ -126,10 +127,12 @@ final class PackageHandler extends Handler { } } } break; - case DEFERRED_NO_KILL_INSTALL_OBSERVER: { - String packageName = (String) msg.obj; + case DEFERRED_NO_KILL_INSTALL_OBSERVER: + case DEFERRED_PENDING_KILL_INSTALL_OBSERVER: { + final String packageName = (String) msg.obj; if (packageName != null) { - mPm.notifyInstallObserver(packageName); + final boolean killApp = msg.what == DEFERRED_PENDING_KILL_INSTALL_OBSERVER; + mPm.notifyInstallObserver(packageName, killApp); } } break; case WRITE_SETTINGS: { diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index fe2fe097bdf6..2973c827a549 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -334,7 +334,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements StagingManager.StagedSession stagedSession = session.mStagedSession; if (!stagedSession.isInTerminalState() && stagedSession.hasParentSessionId() && getSession(stagedSession.getParentSessionId()) == null) { - stagedSession.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + stagedSession.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "An orphan staged session " + stagedSession.sessionId() + " is found, " + "parent " + stagedSession.getParentSessionId() + " is missing"); continue; @@ -852,7 +852,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements mSilentUpdatePolicy, mInstallThread.getLooper(), mStagingManager, sessionId, userId, callingUid, installSource, params, createdMillis, 0L, stageDir, stageCid, null, null, false, false, false, false, null, SessionInfo.INVALID_ID, - false, false, false, SessionInfo.SESSION_NO_ERROR, ""); + false, false, false, PackageManager.INSTALL_UNKNOWN, ""); synchronized (mSessions) { mSessions.put(sessionId, session); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index ced1c7d136aa..3cf0c1455b5b 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -82,7 +82,6 @@ import android.content.pm.InstallationFileParcel; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; -import android.content.pm.PackageInstaller.SessionInfo.SessionErrorCode; import android.content.pm.PackageInstaller.SessionParams; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; @@ -462,7 +461,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @GuardedBy("mLock") private boolean mSessionFailed; @GuardedBy("mLock") - private int mSessionErrorCode = SessionInfo.SESSION_NO_ERROR; + private int mSessionErrorCode = PackageManager.INSTALL_UNKNOWN; @GuardedBy("mLock") private String mSessionErrorMessage; @@ -2315,7 +2314,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { maybeFinishChildSessions(INSTALL_SUCCEEDED, "Session installed"); } else { PackageManagerException e = (PackageManagerException) t.getCause(); - setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + setSessionFailed(e.error, PackageManager.installStatusToString(e.error, e.getMessage())); dispatchSessionFinished(e.error, e.getMessage(), null); maybeFinishChildSessions(e.error, e.getMessage()); @@ -4023,7 +4022,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mSessionReady = true; mSessionApplied = false; mSessionFailed = false; - mSessionErrorCode = SessionInfo.SESSION_NO_ERROR; + mSessionErrorCode = PackageManager.INSTALL_UNKNOWN; mSessionErrorMessage = ""; } mCallback.onSessionChanged(this); @@ -4051,7 +4050,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mSessionReady = false; mSessionApplied = true; mSessionFailed = false; - mSessionErrorCode = SessionInfo.SESSION_NO_ERROR; + mSessionErrorCode = INSTALL_SUCCEEDED; mSessionErrorMessage = ""; Slog.d(TAG, "Marking session " + sessionId + " as applied"); } @@ -4081,7 +4080,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } /** {@hide} */ - @SessionErrorCode int getSessionErrorCode() { synchronized (mLock) { return mSessionErrorCode; @@ -4569,7 +4567,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { final boolean isFailed = in.getAttributeBoolean(null, ATTR_IS_FAILED, false); final boolean isApplied = in.getAttributeBoolean(null, ATTR_IS_APPLIED, false); final int sessionErrorCode = in.getAttributeInt(null, ATTR_SESSION_ERROR_CODE, - SessionInfo.SESSION_NO_ERROR); + PackageManager.INSTALL_UNKNOWN); final String sessionErrorMessage = readStringAttribute(in, ATTR_SESSION_ERROR_MESSAGE); if (!isStagedSessionStateValid(isReady, isApplied, isFailed)) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index c05faf14cae4..429123964e8d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -840,6 +840,9 @@ public class PackageManagerService extends IPackageManager.Stub private final Map<String, Pair<PackageInstalledInfo, IPackageInstallObserver2>> mNoKillInstallObservers = Collections.synchronizedMap(new HashMap<>()); + private final Map<String, Pair<PackageInstalledInfo, IPackageInstallObserver2>> + mPendingKillInstallObservers = Collections.synchronizedMap(new HashMap<>()); + // Internal interface for permission manager final PermissionManagerServiceInternal mPermissionManager; @@ -887,9 +890,11 @@ public class PackageManagerService extends IPackageManager.Stub static final int CHECK_PENDING_INTEGRITY_VERIFICATION = 26; static final int DOMAIN_VERIFICATION = 27; static final int PRUNE_UNUSED_STATIC_SHARED_LIBRARIES = 28; + static final int DEFERRED_PENDING_KILL_INSTALL_OBSERVER = 29; static final int DEFERRED_NO_KILL_POST_DELETE_DELAY_MS = 3 * 1000; private static final int DEFERRED_NO_KILL_INSTALL_OBSERVER_DELAY_MS = 500; + private static final int DEFERRED_PENDING_KILL_INSTALL_OBSERVER_DELAY_MS = 1000; static final int WRITE_SETTINGS_DELAY = 10*1000; // 10 seconds @@ -1166,13 +1171,14 @@ public class PackageManagerService extends IPackageManager.Stub Computer computer = snapshotComputer(); ArraySet<String> packagesToNotify = computer.getNotifyPackagesForReplacedReceived(packages); for (int index = 0; index < packagesToNotify.size(); index++) { - notifyInstallObserver(packagesToNotify.valueAt(index)); + notifyInstallObserver(packagesToNotify.valueAt(index), false /* killApp */); } } - void notifyInstallObserver(String packageName) { - Pair<PackageInstalledInfo, IPackageInstallObserver2> pair = - mNoKillInstallObservers.remove(packageName); + void notifyInstallObserver(String packageName, boolean killApp) { + final Pair<PackageInstalledInfo, IPackageInstallObserver2> pair = + killApp ? mPendingKillInstallObservers.remove(packageName) + : mNoKillInstallObservers.remove(packageName); if (pair != null) { notifyInstallObserver(pair.first, pair.second); @@ -1211,6 +1217,15 @@ public class PackageManagerService extends IPackageManager.Stub delay ? getPruneUnusedSharedLibrariesDelay() : 0); } + void scheduleDeferredPendingKillInstallObserver(PackageInstalledInfo info, + IPackageInstallObserver2 observer) { + final String packageName = info.mPkg.getPackageName(); + mPendingKillInstallObservers.put(packageName, Pair.create(info, observer)); + final Message message = mHandler.obtainMessage(DEFERRED_PENDING_KILL_INSTALL_OBSERVER, + packageName); + mHandler.sendMessageDelayed(message, DEFERRED_PENDING_KILL_INSTALL_OBSERVER_DELAY_MS); + } + private static long getPruneUnusedSharedLibrariesDelay() { return SystemProperties.getLong("debug.pm.prune_unused_shared_libraries_delay", PRUNE_UNUSED_SHARED_LIBRARIES_DELAY); @@ -7393,6 +7408,12 @@ public class PackageManagerService extends IPackageManager.Stub } @Override + public void onPackageProcessKilledForUninstall(String packageName) { + mHandler.post(() -> PackageManagerService.this.notifyInstallObserver(packageName, + true /* killApp */)); + } + + @Override public SparseArray<String> getAppsWithSharedUserIds() { return mComputer.getAppsWithSharedUserIds(); } diff --git a/services/core/java/com/android/server/pm/PackageSessionVerifier.java b/services/core/java/com/android/server/pm/PackageSessionVerifier.java index 6b57deba56b5..2016fc3093b3 100644 --- a/services/core/java/com/android/server/pm/PackageSessionVerifier.java +++ b/services/core/java/com/android/server/pm/PackageSessionVerifier.java @@ -24,7 +24,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.IPackageInstallObserver2; import android.content.pm.PackageInfo; -import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.SigningDetails; @@ -110,7 +109,7 @@ final class PackageSessionVerifier { verifyAPK(session, callback); } catch (PackageManagerException e) { String errorMessage = PackageManager.installStatusToString(e.error, e.getMessage()); - session.setSessionFailed(SessionInfo.SESSION_VERIFICATION_FAILED, errorMessage); + session.setSessionFailed(e.error, errorMessage); callback.onResult(e.error, e.getMessage()); } }); @@ -137,7 +136,7 @@ final class PackageSessionVerifier { } if (returnCode != PackageManager.INSTALL_SUCCEEDED) { String errorMessage = PackageManager.installStatusToString(returnCode, msg); - session.setSessionFailed(SessionInfo.SESSION_VERIFICATION_FAILED, errorMessage); + session.setSessionFailed(returnCode, errorMessage); callback.onResult(returnCode, msg); } else { session.setSessionReady(); @@ -220,7 +219,7 @@ final class PackageSessionVerifier { } private void onVerificationFailure(StagingManager.StagedSession session, Callback callback, - @SessionInfo.SessionErrorCode int errorCode, String errorMessage) { + int errorCode, String errorMessage) { if (!ensureActiveApexSessionIsAborted(session)) { Slog.e(TAG, "Failed to abort apex session " + session.sessionId()); // Safe to ignore active apex session abortion failure since session will be marked @@ -312,7 +311,7 @@ final class PackageSessionVerifier { // Failed to get hold of StorageManager Slog.e(TAG, "Failed to get hold of StorageManager", e); throw new PackageManagerException( - SessionInfo.SESSION_UNKNOWN_ERROR, + PackageManager.INSTALL_FAILED_INTERNAL_ERROR, "Failed to get hold of StorageManager"); } // Proactively mark session as ready before calling apexd. Although this call order @@ -350,7 +349,7 @@ final class PackageSessionVerifier { final ParseResult<SigningDetails> newResult = ApkSignatureVerifier.verify( input.reset(), apexPath, minSignatureScheme); if (newResult.isError()) { - throw new PackageManagerException(SessionInfo.SESSION_VERIFICATION_FAILED, + throw new PackageManagerException(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Failed to parse APEX package " + apexPath + " : " + newResult.getException(), newResult.getException()); } @@ -369,7 +368,7 @@ final class PackageSessionVerifier { input.reset(), existingApexPkg.applicationInfo.sourceDir, SigningDetails.SignatureSchemeVersion.JAR); if (existingResult.isError()) { - throw new PackageManagerException(SessionInfo.SESSION_VERIFICATION_FAILED, + throw new PackageManagerException(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Failed to parse APEX package " + existingApexPkg.applicationInfo.sourceDir + " : " + existingResult.getException(), existingResult.getException()); } @@ -383,7 +382,7 @@ final class PackageSessionVerifier { return; } - throw new PackageManagerException(SessionInfo.SESSION_VERIFICATION_FAILED, + throw new PackageManagerException(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "APK-container signature of APEX package " + packageName + " with version " + newApexPkg.versionCodeMajor + " and path " + apexPath + " is not" + " compatible with the one currently installed on device"); @@ -426,11 +425,12 @@ final class PackageSessionVerifier { packageInfo = PackageInfoWithoutStateUtils.generate(parsedPackage, apexInfo, flags); if (packageInfo == null) { throw new PackageManagerException( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Unable to generate package info: " + apexInfo.modulePath); } } catch (PackageManagerException e) { - throw new PackageManagerException(SessionInfo.SESSION_VERIFICATION_FAILED, + throw new PackageManagerException( + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Failed to parse APEX package " + apexInfo.modulePath + " : " + e, e); } result.add(packageInfo); @@ -452,7 +452,7 @@ final class PackageSessionVerifier { } } throw new PackageManagerException( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Could not find rollback id for commit session: " + sessionId); } @@ -560,7 +560,7 @@ final class PackageSessionVerifier { try { checkActiveSessions(InstallLocationUtils.getStorageManager().supportsCheckpoint()); } catch (RemoteException e) { - throw new PackageManagerException(SessionInfo.SESSION_VERIFICATION_FAILED, + throw new PackageManagerException(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, "Can't query fs-checkpoint status : " + e); } } @@ -576,7 +576,7 @@ final class PackageSessionVerifier { } if (!supportsCheckpoint && activeSessions > 1) { throw new PackageManagerException( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS, "Cannot stage multiple sessions without checkpoint support"); } } @@ -607,13 +607,13 @@ final class PackageSessionVerifier { // will be deleted. } stagedSession.setSessionFailed( - SessionInfo.SESSION_CONFLICT, + PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS, "Session was failed by rollback session: " + session.sessionId()); Slog.i(TAG, "Session " + stagedSession.sessionId() + " is marked failed due to " + "rollback session: " + session.sessionId()); } else if (!isRollback(session) && isRollback(stagedSession)) { throw new PackageManagerException( - SessionInfo.SESSION_CONFLICT, + PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS, "Session was failed by rollback session: " + stagedSession.sessionId()); } @@ -636,7 +636,7 @@ final class PackageSessionVerifier { final String packageName = child.getPackageName(); if (packageName == null) { throw new PackageManagerException( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, "Cannot stage session " + child.sessionId() + " with package name null"); } for (StagingManager.StagedSession stagedSession : mStagedSessions) { @@ -648,14 +648,14 @@ final class PackageSessionVerifier { if (stagedSession.getCommittedMillis() < parent.getCommittedMillis()) { // Fail the session committed later when there are overlapping packages throw new PackageManagerException( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS, "Package: " + packageName + " in session: " + child.sessionId() + " has been staged already by session: " + stagedSession.sessionId()); } else { stagedSession.setSessionFailed( - SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS, "Package: " + packageName + " in session: " + stagedSession.sessionId() + " has been staged already by session: " diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java index 8921fee6c8e0..2215acb0ee74 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackage.java +++ b/services/core/java/com/android/server/pm/ShortcutPackage.java @@ -341,7 +341,7 @@ class ShortcutPackage extends ShortcutPackageItem { public void ensureAllShortcutsVisibleToLauncher(@NonNull List<ShortcutInfo> shortcuts) { for (ShortcutInfo shortcut : shortcuts) { - if (!shortcut.isIncludedIn(ShortcutInfo.SURFACE_LAUNCHER)) { + if (shortcut.isExcludedFromSurfaces(ShortcutInfo.SURFACE_LAUNCHER)) { throw new IllegalArgumentException("Shortcut ID=" + shortcut.getId() + " is hidden from launcher and may not be manipulated via APIs"); } @@ -402,7 +402,7 @@ class ShortcutPackage extends ShortcutPackageItem { & (ShortcutInfo.FLAG_PINNED | ShortcutInfo.FLAG_CACHED_ALL)); } - if (!newShortcut.isIncludedIn(ShortcutInfo.SURFACE_LAUNCHER)) { + if (newShortcut.isExcludedFromSurfaces(ShortcutInfo.SURFACE_LAUNCHER)) { if (isAppSearchEnabled()) { synchronized (mLock) { mTransientShortcuts.put(newShortcut.getId(), newShortcut); @@ -480,7 +480,7 @@ class ShortcutPackage extends ShortcutPackageItem { & (ShortcutInfo.FLAG_PINNED | ShortcutInfo.FLAG_CACHED_ALL)); } - if (!newShortcut.isIncludedIn(ShortcutInfo.SURFACE_LAUNCHER)) { + if (newShortcut.isExcludedFromSurfaces(ShortcutInfo.SURFACE_LAUNCHER)) { if (isAppSearchEnabled()) { synchronized (mLock) { mTransientShortcuts.put(newShortcut.getId(), newShortcut); diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index 1cf2dc52e430..6e29c3009ff8 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -2227,7 +2227,7 @@ public class ShortcutService extends IShortcutService.Stub { Objects.requireNonNull(shortcut); Preconditions.checkArgument(shortcut.isEnabled(), "Shortcut must be enabled"); Preconditions.checkArgument( - shortcut.isIncludedIn(ShortcutInfo.SURFACE_LAUNCHER), + !shortcut.isExcludedFromSurfaces(ShortcutInfo.SURFACE_LAUNCHER), "Shortcut excluded from launcher cannot be pinned"); ret.complete(String.valueOf(requestPinItem( packageName, userId, shortcut, null, null, resultIntent))); diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 52a7beda43fb..43dde5cce2d6 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -28,8 +28,6 @@ import android.content.IntentFilter; import android.content.pm.ApexStagedEvent; import android.content.pm.IStagedApexObserver; import android.content.pm.PackageInstaller; -import android.content.pm.PackageInstaller.SessionInfo; -import android.content.pm.PackageInstaller.SessionInfo.SessionErrorCode; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.StagedApexInfo; @@ -124,7 +122,7 @@ public class StagingManager { boolean containsApkSession(); boolean containsApexSession(); void setSessionReady(); - void setSessionFailed(@SessionErrorCode int errorCode, String errorMessage); + void setSessionFailed(int errorCode, String errorMessage); void setSessionApplied(); CompletableFuture<Void> installSession(); boolean hasParentSessionId(); @@ -279,7 +277,7 @@ public class StagingManager { String packageName = apexSession.getPackageName(); String errorMsg = mApexManager.getApkInApexInstallError(packageName); if (errorMsg != null) { - throw new PackageManagerException(SessionInfo.SESSION_ACTIVATION_FAILED, + throw new PackageManagerException(PackageManager.INSTALL_ACTIVATION_FAILED, "Failed to install apk-in-apex of " + packageName + " : " + errorMsg); } } @@ -392,7 +390,7 @@ public class StagingManager { revertMsg += " Reason for revert: " + reasonForRevert; } Slog.d(TAG, revertMsg); - session.setSessionFailed(SessionInfo.SESSION_UNKNOWN_ERROR, revertMsg); + session.setSessionFailed(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, revertMsg); return; } @@ -477,7 +475,7 @@ public class StagingManager { for (String apkInApex : mApexManager.getApksInApex(packageName)) { if (!apkNames.add(apkInApex)) { throw new PackageManagerException( - SessionInfo.SESSION_ACTIVATION_FAILED, + PackageManager.INSTALL_ACTIVATION_FAILED, "Package: " + packageName + " in session: " + apexSession.sessionId() + " has duplicate apk-in-apex: " + apkInApex, null); @@ -495,9 +493,7 @@ public class StagingManager { // Should be impossible throw new RuntimeException(e); } catch (ExecutionException ee) { - PackageManagerException e = (PackageManagerException) ee.getCause(); - final String errorMsg = PackageManager.installStatusToString(e.error, e.getMessage()); - throw new PackageManagerException(SessionInfo.SESSION_ACTIVATION_FAILED, errorMsg); + throw (PackageManagerException) ee.getCause(); } } @@ -651,7 +647,7 @@ public class StagingManager { // is upgrading. Fail all the sessions and exit early. for (int i = 0; i < sessions.size(); i++) { StagedSession session = sessions.get(i); - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "Build fingerprint has changed"); } return; @@ -691,7 +687,7 @@ public class StagingManager { final ApexSessionInfo apexSession = apexSessions.get(session.sessionId()); if (apexSession == null || apexSession.isUnknown) { hasFailedApexSession = true; - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, "apexd did " + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "apexd did " + "not know anything about a staged session supposed to be activated"); continue; } else if (isApexSessionFailed(apexSession)) { @@ -707,7 +703,7 @@ public class StagingManager { errorMsg += " Error: " + apexSession.errorMessage; } Slog.d(TAG, errorMsg); - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, errorMsg); + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, errorMsg); continue; } else if (apexSession.isActivated || apexSession.isSuccess) { hasAppliedApexSession = true; @@ -716,13 +712,13 @@ public class StagingManager { // Apexd did not apply the session for some unknown reason. There is no guarantee // that apexd will install it next time. Safer to proactively mark it as failed. hasFailedApexSession = true; - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "Staged session " + session.sessionId() + " at boot didn't activate nor " + "fail. Marking it as failed anyway."); } else { Slog.w(TAG, "Apex session " + session.sessionId() + " is in impossible state"); hasFailedApexSession = true; - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "Impossible state"); } } @@ -742,7 +738,7 @@ public class StagingManager { // Session has been already failed in the loop above. continue; } - session.setSessionFailed(SessionInfo.SESSION_ACTIVATION_FAILED, + session.setSessionFailed(PackageManager.INSTALL_ACTIVATION_FAILED, "Another apex session failed"); } return; @@ -758,7 +754,7 @@ public class StagingManager { } catch (Exception e) { Slog.e(TAG, "Staged install failed due to unhandled exception", e); onInstallationFailure(session, new PackageManagerException( - SessionInfo.SESSION_ACTIVATION_FAILED, + PackageManager.INSTALL_FAILED_INTERNAL_ERROR, "Staged install failed due to unhandled exception: " + e), supportsCheckpoint, needsCheckpoint); } diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java index cdc2b1245b1e..f6f9faf98c40 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java @@ -290,6 +290,9 @@ public interface ParsingPackage extends ParsingPackageRead { /** @see R#styleable.AndroidManifest_inheritKeyStoreKeys */ ParsingPackage setInheritKeyStoreKeys(boolean inheritKeyStoreKeys); + /** @see R#styleable.AndroidManifest_sharedUserMaxSdkVersion */ + ParsingPackage setLeavingSharedUid(boolean leavingSharedUid); + ParsingPackage setLabelRes(int labelRes); ParsingPackage setLargestWidthLimitDp(int largestWidthLimitDp); diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java index 177eaca8e06f..67670272ef8b 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java @@ -549,6 +549,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, private static final long SDK_LIBRARY = 1L << 49; private static final long INHERIT_KEYSTORE_KEYS = 1L << 50; private static final long ENABLE_ON_BACK_INVOKED_CALLBACK = 1L << 51; + private static final long LEAVING_SHARED_UID = 1L << 52; } private ParsingPackageImpl setBoolean(@Booleans.Values long flag, boolean value) { @@ -2403,6 +2404,11 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, } @Override + public boolean isLeavingSharedUid() { + return getBoolean(Booleans.LEAVING_SHARED_UID); + } + + @Override public ParsingPackageImpl setBaseRevisionCode(int value) { baseRevisionCode = value; return this; @@ -2551,6 +2557,11 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, } @Override + public ParsingPackageImpl setLeavingSharedUid(boolean value) { + return setBoolean(Booleans.LEAVING_SHARED_UID, value); + } + + @Override public ParsingPackageImpl setLabelRes(int value) { labelRes = value; return this; diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java index 428374fa21a8..50033f652bfd 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java @@ -360,4 +360,11 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt * @see R.styleable.AndroidManifestApplication_enableOnBackInvokedCallback */ boolean isOnBackInvokedCallbackEnabled(); + + /** + * Returns true if R.styleable#AndroidManifest_sharedUserMaxSdkVersion is set to a value + * smaller than the current SDK version. + * @see R.styleable#AndroidManifest_sharedUserMaxSdkVersion + */ + boolean isLeavingSharedUid(); } diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index f30daa930e6c..ed1ab01e1d12 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -1032,11 +1032,6 @@ public class ParsingPackageUtils { private static ParseResult<ParsingPackage> parseSharedUser(ParseInput input, ParsingPackage pkg, TypedArray sa) { - int maxSdkVersion = anInteger(0, R.styleable.AndroidManifest_sharedUserMaxSdkVersion, sa); - if ((maxSdkVersion != 0) && maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT) { - return input.success(pkg); - } - String str = nonConfigString(0, R.styleable.AndroidManifest_sharedUserId, sa); if (TextUtils.isEmpty(str)) { return input.success(pkg); @@ -1052,7 +1047,11 @@ public class ParsingPackageUtils { } } + int maxSdkVersion = anInteger(0, R.styleable.AndroidManifest_sharedUserMaxSdkVersion, sa); + boolean leaving = (maxSdkVersion != 0) && (maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT); + return input.success(pkg + .setLeavingSharedUid(leaving) .setSharedUserId(str.intern()) .setSharedUserLabel(resId(R.styleable.AndroidManifest_sharedUserLabel, sa))); } diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java index c638201bf893..9bbae4bd2db5 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHw2Compat.java @@ -29,7 +29,9 @@ import android.os.IBinder; import android.os.IHwBinder; import android.os.RemoteException; import android.system.OsConstants; +import android.util.Log; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -54,6 +56,8 @@ import java.util.concurrent.atomic.AtomicReference; * </ul> */ final class SoundTriggerHw2Compat implements ISoundTriggerHal { + private static final String TAG = "SoundTriggerHw2Compat"; + private final @NonNull Runnable mRebootRunnable; private final @NonNull IHwBinder mBinder; private @NonNull android.hardware.soundtrigger.V2_0.ISoundTriggerHw mUnderlying_2_0; @@ -226,6 +230,16 @@ final class SoundTriggerHw2Compat implements ISoundTriggerHal { return handle.get(); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); + } finally { + // TODO(b/219825762): We should be able to use the entire object in a try-with-resources + // clause, instead of having to explicitly close internal fields. + if (hidlModel.data != null) { + try { + hidlModel.data.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to close file", e); + } + } } } @@ -252,6 +266,16 @@ final class SoundTriggerHw2Compat implements ISoundTriggerHal { return handle.get(); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); + } finally { + // TODO(b/219825762): We should be able to use the entire object in a try-with-resources + // clause, instead of having to explicitly close internal fields. + if (hidlModel.common.data != null) { + try { + hidlModel.common.data.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to close file", e); + } + } } } diff --git a/services/core/java/com/android/server/trust/TrustAgentWrapper.java b/services/core/java/com/android/server/trust/TrustAgentWrapper.java index 1dea3d7943d8..fa243c023a87 100644 --- a/services/core/java/com/android/server/trust/TrustAgentWrapper.java +++ b/services/core/java/com/android/server/trust/TrustAgentWrapper.java @@ -17,6 +17,7 @@ package com.android.server.trust; import static android.service.trust.TrustAgentService.FLAG_GRANT_TRUST_DISPLAY_MESSAGE; +import static android.service.trust.TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE; import android.annotation.TargetApi; import android.app.AlarmManager; @@ -158,7 +159,7 @@ public class TrustAgentWrapper { mMessage = (CharSequence) msg.obj; int flags = msg.arg1; mDisplayTrustGrantedMessage = (flags & FLAG_GRANT_TRUST_DISPLAY_MESSAGE) != 0; - if ((flags & TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE) != 0) { + if ((flags & FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE) != 0) { mWaitingForTrustableDowngrade = true; } else { mWaitingForTrustableDowngrade = false; @@ -638,6 +639,11 @@ public class TrustAgentWrapper { return mTrustable && mManagingTrust && !mTrustDisabledByDpm; } + /** Set the trustagent as not trustable */ + public void setUntrustable() { + mTrustable = false; + } + public boolean isManagingTrust() { return mManagingTrust && !mTrustDisabledByDpm; } diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index b4c54f9beeb7..bd4b8d15f453 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -16,6 +16,8 @@ package com.android.server.trust; +import static android.service.trust.TrustAgentService.FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE; + import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; @@ -127,13 +129,16 @@ public class TrustManagerService extends SystemService { private static final int MSG_DISPATCH_UNLOCK_LOCKOUT = 13; private static final int MSG_REFRESH_DEVICE_LOCKED_FOR_USER = 14; private static final int MSG_SCHEDULE_TRUST_TIMEOUT = 15; - public static final int MSG_USER_REQUESTED_UNLOCK = 16; + private static final int MSG_USER_REQUESTED_UNLOCK = 16; + private static final int MSG_REFRESH_TRUSTABLE_TIMERS_AFTER_AUTH = 17; private static final String REFRESH_DEVICE_LOCKED_EXCEPT_USER = "except"; private static final int TRUST_USUALLY_MANAGED_FLUSH_DELAY = 2 * 60 * 1000; private static final String TRUST_TIMEOUT_ALARM_TAG = "TrustManagerService.trustTimeoutForUser"; private static final long TRUST_TIMEOUT_IN_MILLIS = 4 * 60 * 60 * 1000; + private static final long TRUSTABLE_IDLE_TIMEOUT_IN_MILLIS = 8 * 60 * 60 * 1000; + private static final long TRUSTABLE_TIMEOUT_IN_MILLIS = 24 * 60 * 60 * 1000; private static final String PRIV_NAMESPACE = "http://schemas.android.com/apk/prv/res/android"; @@ -203,9 +208,18 @@ public class TrustManagerService extends SystemService { @GuardedBy("mUsersUnlockedByBiometric") private final SparseBooleanArray mUsersUnlockedByBiometric = new SparseBooleanArray(); - private final ArrayMap<Integer, TrustTimeoutAlarmListener> mTrustTimeoutAlarmListenerForUser = + private enum TimeoutType { + TRUSTED, + TRUSTABLE + } + private final ArrayMap<Integer, TrustedTimeoutAlarmListener> mTrustTimeoutAlarmListenerForUser = new ArrayMap<>(); + private final SparseArray<TrustableTimeoutAlarmListener> mTrustableTimeoutAlarmListenerForUser = + new SparseArray<>(); + private final SparseArray<TrustableTimeoutAlarmListener> + mIdleTrustableTimeoutAlarmListenerForUser = new SparseArray<>(); private AlarmManager mAlarmManager; + private final Object mAlarmLock = new Object(); private final SettingsObserver mSettingsObserver; private final StrongAuthTracker mStrongAuthTracker; @@ -258,7 +272,7 @@ public class TrustManagerService extends SystemService { private final boolean mIsAutomotive; private final ContentResolver mContentResolver; - private boolean mTrustAgentsExtendUnlock; + private boolean mTrustAgentsNonrenewableTrust; private boolean mLockWhenTrustLost; /** @@ -295,11 +309,11 @@ public class TrustManagerService extends SystemService { @Override public void onChange(boolean selfChange, Uri uri) { if (TRUST_AGENTS_EXTEND_UNLOCK.equals(uri)) { - // Smart lock should only extend unlock. The only exception is for automotive, - // where it can actively unlock the head unit. + // Smart lock should only grant non-renewable trust. The only exception is for + // automotive, where it can actively unlock the head unit. int defaultValue = mIsAutomotive ? 0 : 1; - mTrustAgentsExtendUnlock = + mTrustAgentsNonrenewableTrust = Settings.Secure.getIntForUser( mContentResolver, Settings.Secure.TRUST_AGENTS_EXTEND_UNLOCK, @@ -315,8 +329,8 @@ public class TrustManagerService extends SystemService { } } - boolean getTrustAgentsExtendUnlock() { - return mTrustAgentsExtendUnlock; + boolean getTrustAgentsNonrenewableTrust() { + return mTrustAgentsNonrenewableTrust; } boolean getLockWhenTrustLost() { @@ -339,36 +353,53 @@ public class TrustManagerService extends SystemService { // If active unlocking is not allowed, cancel any pending trust timeouts because the // screen is already locked. - TrustTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); - if (alarm != null && mSettingsObserver.getTrustAgentsExtendUnlock()) { + TrustedTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); + if (alarm != null && mSettingsObserver.getTrustAgentsNonrenewableTrust()) { mAlarmManager.cancel(alarm); alarm.setQueued(false /* isQueued */); } } } - private void scheduleTrustTimeout(int userId, boolean override) { + private void scheduleTrustTimeout(boolean override, boolean isTrustableTimeout) { int shouldOverride = override ? 1 : 0; - if (override) { - shouldOverride = 1; + int trustableTimeout = isTrustableTimeout ? 1 : 0; + mHandler.obtainMessage(MSG_SCHEDULE_TRUST_TIMEOUT, shouldOverride, + trustableTimeout).sendToTarget(); + } + + private void handleScheduleTrustTimeout(boolean shouldOverride, TimeoutType timeoutType) { + int userId = mCurrentUser; + if (timeoutType == TimeoutType.TRUSTABLE) { + // don't override the hard timeout unless biometric or knowledge factor authentication + // occurs which isn't where this is called from. Override the idle timeout what the + // calling function has determined. + handleScheduleTrustableTimeouts(userId, shouldOverride, + false /* overrideHardTimeout */); + } else { + handleScheduleTrustedTimeout(userId, shouldOverride); } - mHandler.obtainMessage(MSG_SCHEDULE_TRUST_TIMEOUT, userId, shouldOverride).sendToTarget(); } - private void handleScheduleTrustTimeout(int userId, int shouldOverride) { + /* Override both the idle and hard trustable timeouts */ + private void refreshTrustableTimers(int userId) { + handleScheduleTrustableTimeouts(userId, true /* overrideIdleTimeout */, + true /* overrideHardTimeout */); + } + + private void handleScheduleTrustedTimeout(int userId, boolean shouldOverride) { long when = SystemClock.elapsedRealtime() + TRUST_TIMEOUT_IN_MILLIS; - userId = mCurrentUser; - TrustTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); + TrustedTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); // Cancel existing trust timeouts for this user if needed. if (alarm != null) { - if (shouldOverride == 0 && alarm.isQueued()) { + if (!shouldOverride && alarm.isQueued()) { if (DEBUG) Slog.d(TAG, "Found existing trust timeout alarm. Skipping."); return; } mAlarmManager.cancel(alarm); } else { - alarm = new TrustTimeoutAlarmListener(userId); + alarm = new TrustedTimeoutAlarmListener(userId); mTrustTimeoutAlarmListenerForUser.put(userId, alarm); } @@ -379,6 +410,59 @@ public class TrustManagerService extends SystemService { mHandler); } + private void handleScheduleTrustableTimeouts(int userId, boolean overrideIdleTimeout, + boolean overrideHardTimeout) { + setUpIdleTimeout(userId, overrideIdleTimeout); + setUpHardTimeout(userId, overrideHardTimeout); + } + + private void setUpIdleTimeout(int userId, boolean overrideIdleTimeout) { + long when = SystemClock.elapsedRealtime() + TRUSTABLE_IDLE_TIMEOUT_IN_MILLIS; + TrustableTimeoutAlarmListener alarm = mIdleTrustableTimeoutAlarmListenerForUser.get(userId); + mContext.enforceCallingOrSelfPermission(Manifest.permission.SCHEDULE_EXACT_ALARM, null); + + // Cancel existing trustable timeouts for this user if needed. + if (alarm != null) { + if (!overrideIdleTimeout && alarm.isQueued()) { + if (DEBUG) Slog.d(TAG, "Found existing trustable timeout alarm. Skipping."); + return; + } + mAlarmManager.cancel(alarm); + } else { + alarm = new TrustableTimeoutAlarmListener(userId); + mIdleTrustableTimeoutAlarmListenerForUser.put(userId, alarm); + } + + if (DEBUG) Slog.d(TAG, "\tSetting up trustable idle timeout alarm"); + alarm.setQueued(true /* isQueued */); + mAlarmManager.setExact( + AlarmManager.ELAPSED_REALTIME_WAKEUP, when, TRUST_TIMEOUT_ALARM_TAG, alarm, + mHandler); + } + + private void setUpHardTimeout(int userId, boolean overrideHardTimeout) { + mContext.enforceCallingOrSelfPermission(Manifest.permission.SCHEDULE_EXACT_ALARM, null); + TrustableTimeoutAlarmListener alarm = mTrustableTimeoutAlarmListenerForUser.get(userId); + + // if the alarm doesn't exist, or hasn't been queued, or needs to be overridden we need to + // set it + if (alarm == null || !alarm.isQueued() || overrideHardTimeout) { + // schedule hard limit on renewable trust use + long when = SystemClock.elapsedRealtime() + TRUSTABLE_TIMEOUT_IN_MILLIS; + if (alarm == null) { + alarm = new TrustableTimeoutAlarmListener(userId); + mTrustableTimeoutAlarmListenerForUser.put(userId, alarm); + } else if (overrideHardTimeout) { + mAlarmManager.cancel(alarm); + } + if (DEBUG) Slog.d(TAG, "\tSetting up trustable hard timeout alarm"); + alarm.setQueued(true /* isQueued */); + mAlarmManager.setExact( + AlarmManager.ELAPSED_REALTIME_WAKEUP, when, TRUST_TIMEOUT_ALARM_TAG, alarm, + mHandler); + } + } + // Agent management private static final class AgentInfo { @@ -419,11 +503,11 @@ public class TrustManagerService extends SystemService { if (ENABLE_ACTIVE_UNLOCK_FLAG) { updateTrustWithRenewableUnlock(userId, flags, isFromUnlock); } else { - updateTrustWithExtendUnlock(userId, flags, isFromUnlock); + updateTrustWithNonrenewableTrust(userId, flags, isFromUnlock); } } - private void updateTrustWithExtendUnlock(int userId, int flags, boolean isFromUnlock) { + private void updateTrustWithNonrenewableTrust(int userId, int flags, boolean isFromUnlock) { boolean managed = aggregateIsTrustManaged(userId); dispatchOnTrustManagedChanged(managed, userId); if (mStrongAuthTracker.isTrustAllowedForUser(userId) @@ -441,8 +525,8 @@ public class TrustManagerService extends SystemService { boolean changed; synchronized (mUserIsTrusted) { - if (mSettingsObserver.getTrustAgentsExtendUnlock()) { - // In extend unlock trust agents can only set the device to trusted if it already + if (mSettingsObserver.getTrustAgentsNonrenewableTrust()) { + // For non-renewable trust agents can only set the device to trusted if it already // trusted or the device is unlocked. Attempting to set the device as trusted // when the device is locked will be ignored. changed = mUserIsTrusted.get(userId) != trusted; @@ -464,7 +548,7 @@ public class TrustManagerService extends SystemService { if (!trusted) { maybeLockScreen(userId); } else { - scheduleTrustTimeout(userId, false /* override */); + scheduleTrustTimeout(false /* override */, false /* isTrustableTimeout*/); } } } @@ -522,7 +606,12 @@ public class TrustManagerService extends SystemService { if (!isNowTrusted) { maybeLockScreen(userId); } else { - scheduleTrustTimeout(userId, false /* override */); + boolean isTrustableTimeout = + (flags & FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE) != 0; + // Every time we grant renewable trust we should override the idle trustable + // timeout. If this is for non-renewable trust, then we shouldn't override. + scheduleTrustTimeout(isTrustableTimeout /* override */, + isTrustableTimeout /* isTrustableTimeout */); } } } @@ -1102,8 +1191,9 @@ public class TrustManagerService extends SystemService { private void dispatchUnlockAttempt(boolean successful, int userId) { if (successful) { mStrongAuthTracker.allowTrustFromUnlock(userId); - // Allow the presence of trust on a successful unlock attempt to extend unlock. + // Allow the presence of trust on a successful unlock attempt to extend unlock updateTrust(userId, 0 /* flags */, true); + mHandler.obtainMessage(MSG_REFRESH_TRUSTABLE_TIMERS_AFTER_AUTH, userId).sendToTarget(); } for (int i = 0; i < mActiveAgents.size(); i++) { @@ -1520,11 +1610,12 @@ public class TrustManagerService extends SystemService { synchronized(mUsersUnlockedByBiometric) { mUsersUnlockedByBiometric.put(userId, true); } - // In extend unlock mode we need to refresh trust state here, which will call + // In non-renewable trust mode we need to refresh trust state here, which will call // refreshDeviceLockedForUser() - int updateTrustOnUnlock = mSettingsObserver.getTrustAgentsExtendUnlock() ? 1 : 0; + int updateTrustOnUnlock = mSettingsObserver.getTrustAgentsNonrenewableTrust() ? 1 : 0; mHandler.obtainMessage(MSG_REFRESH_DEVICE_LOCKED_FOR_USER, userId, updateTrustOnUnlock).sendToTarget(); + mHandler.obtainMessage(MSG_REFRESH_TRUSTABLE_TIMERS_AFTER_AUTH, userId).sendToTarget(); } @Override @@ -1643,7 +1734,13 @@ public class TrustManagerService extends SystemService { refreshDeviceLockedForUser(msg.arg1, unlockedUser); break; case MSG_SCHEDULE_TRUST_TIMEOUT: - handleScheduleTrustTimeout(msg.arg1, msg.arg2); + boolean shouldOverride = msg.arg1 == 1 ? true : false; + TimeoutType timeoutType = + msg.arg2 == 1 ? TimeoutType.TRUSTABLE : TimeoutType.TRUSTED; + handleScheduleTrustTimeout(shouldOverride, timeoutType); + break; + case MSG_REFRESH_TRUSTABLE_TIMERS_AFTER_AUTH: + refreshTrustableTimers(msg.arg1); break; } } @@ -1759,10 +1856,11 @@ public class TrustManagerService extends SystemService { // Cancel pending alarms if we require some auth anyway. if (!isTrustAllowedForUser(userId)) { TrustTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); - if (alarm != null && alarm.isQueued()) { - alarm.setQueued(false /* isQueued */); - mAlarmManager.cancel(alarm); - } + cancelPendingAlarm(alarm); + alarm = mTrustableTimeoutAlarmListenerForUser.get(userId); + cancelPendingAlarm(alarm); + alarm = mIdleTrustableTimeoutAlarmListenerForUser.get(userId); + cancelPendingAlarm(alarm); } refreshAgentList(userId); @@ -1772,6 +1870,13 @@ public class TrustManagerService extends SystemService { updateTrust(userId, 0 /* flags */); } + private void cancelPendingAlarm(@Nullable TrustTimeoutAlarmListener alarm) { + if (alarm != null && alarm.isQueued()) { + alarm.setQueued(false /* isQueued */); + mAlarmManager.cancel(alarm); + } + } + boolean canAgentsRunForUser(int userId) { return mStartFromSuccessfulUnlock.get(userId) || super.isTrustAllowedForUser(userId); @@ -1804,9 +1909,9 @@ public class TrustManagerService extends SystemService { } } - private class TrustTimeoutAlarmListener implements OnAlarmListener { - private final int mUserId; - private boolean mIsQueued = false; + private abstract class TrustTimeoutAlarmListener implements OnAlarmListener { + protected final int mUserId; + protected boolean mIsQueued = false; TrustTimeoutAlarmListener(int userId) { mUserId = userId; @@ -1815,8 +1920,7 @@ public class TrustManagerService extends SystemService { @Override public void onAlarm() { mIsQueued = false; - int strongAuthState = mStrongAuthTracker.getStrongAuthForUser(mUserId); - + handleAlarm(); // Only fire if trust can unlock. if (mStrongAuthTracker.isTrustAllowedForUser(mUserId)) { if (DEBUG) Slog.d(TAG, "Revoking all trust because of trust timeout"); @@ -1826,12 +1930,98 @@ public class TrustManagerService extends SystemService { maybeLockScreen(mUserId); } + protected abstract void handleAlarm(); + + public boolean isQueued() { + return mIsQueued; + } + public void setQueued(boolean isQueued) { mIsQueued = isQueued; } + } - public boolean isQueued() { - return mIsQueued; + private class TrustedTimeoutAlarmListener extends TrustTimeoutAlarmListener { + + TrustedTimeoutAlarmListener(int userId) { + super(userId); + } + + @Override + public void handleAlarm() { + TrustableTimeoutAlarmListener otherAlarm; + boolean otherAlarmPresent; + if (ENABLE_ACTIVE_UNLOCK_FLAG) { + otherAlarm = mTrustableTimeoutAlarmListenerForUser.get(mUserId); + otherAlarmPresent = (otherAlarm != null) && otherAlarm.isQueued(); + if (otherAlarmPresent) { + synchronized (mAlarmLock) { + disableNonrenewableTrustWhileRenewableTrustIsPresent(); + } + return; + } + } + } + + private void disableNonrenewableTrustWhileRenewableTrustIsPresent() { + synchronized (mUserTrustState) { + if (mUserTrustState.get(mUserId) == TrustState.TRUSTED) { + // if we're trusted and we have a trustable alarm, we need to + // downgrade to trustable + mUserTrustState.put(mUserId, TrustState.TRUSTABLE); + updateTrust(mUserId, 0 /* flags */); + } + } + } + } + + private class TrustableTimeoutAlarmListener extends TrustTimeoutAlarmListener { + + TrustableTimeoutAlarmListener(int userId) { + super(userId); + } + + @Override + public void handleAlarm() { + TrustedTimeoutAlarmListener otherAlarm; + boolean otherAlarmPresent; + if (ENABLE_ACTIVE_UNLOCK_FLAG) { + cancelBothTrustableAlarms(); + otherAlarm = mTrustTimeoutAlarmListenerForUser.get(mUserId); + otherAlarmPresent = (otherAlarm != null) && otherAlarm.isQueued(); + if (otherAlarmPresent) { + synchronized (mAlarmLock) { + disableRenewableTrustWhileNonrenewableTrustIsPresent(); + } + return; + } + } + } + + private void cancelBothTrustableAlarms() { + TrustableTimeoutAlarmListener idleTimeout = + mIdleTrustableTimeoutAlarmListenerForUser.get( + mUserId); + TrustableTimeoutAlarmListener trustableTimeout = + mTrustableTimeoutAlarmListenerForUser.get( + mUserId); + if (idleTimeout != null && idleTimeout.isQueued()) { + idleTimeout.setQueued(false); + mAlarmManager.cancel(idleTimeout); + } + if (trustableTimeout != null && trustableTimeout.isQueued()) { + trustableTimeout.setQueued(false); + mAlarmManager.cancel(trustableTimeout); + } + } + + private void disableRenewableTrustWhileNonrenewableTrustIsPresent() { + // if non-renewable trust is running, we need to temporarily prevent + // renewable trust from being used + for (AgentInfo agentInfo : mActiveAgents) { + agentInfo.agent.setUntrustable(); + } + updateTrust(mUserId, 0 /* flags */); } } } diff --git a/services/core/java/com/android/server/vibrator/AbstractVibratorStep.java b/services/core/java/com/android/server/vibrator/AbstractVibratorStep.java new file mode 100644 index 000000000000..3550bda282dd --- /dev/null +++ b/services/core/java/com/android/server/vibrator/AbstractVibratorStep.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.SystemClock; +import android.os.VibrationEffect; +import android.util.Slog; + +import java.util.Arrays; +import java.util.List; + +/** + * Represent a step on a single vibrator that plays one or more segments from a + * {@link VibrationEffect.Composed} effect. + */ +abstract class AbstractVibratorStep extends Step { + public final VibratorController controller; + public final VibrationEffect.Composed effect; + public final int segmentIndex; + public final long previousStepVibratorOffTimeout; + + long mVibratorOnResult; + boolean mVibratorCompleteCallbackReceived; + + /** + * @param conductor The VibrationStepConductor for these steps. + * @param startTime The time to schedule this step in the + * {@link VibrationStepConductor}. + * @param controller The vibrator that is playing the effect. + * @param effect The effect being played in this step. + * @param index The index of the next segment to be played by this step + * @param previousStepVibratorOffTimeout The time the vibrator is expected to complete any + * previous vibration and turn off. This is used to allow this step to + * be triggered when the completion callback is received, and can + * be used to play effects back-to-back. + */ + AbstractVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller, VibrationEffect.Composed effect, int index, + long previousStepVibratorOffTimeout) { + super(conductor, startTime); + this.controller = controller; + this.effect = effect; + this.segmentIndex = index; + this.previousStepVibratorOffTimeout = previousStepVibratorOffTimeout; + } + + public int getVibratorId() { + return controller.getVibratorInfo().getId(); + } + + @Override + public long getVibratorOnDuration() { + return mVibratorOnResult; + } + + @Override + public boolean acceptVibratorCompleteCallback(int vibratorId) { + boolean isSameVibrator = controller.getVibratorInfo().getId() == vibratorId; + mVibratorCompleteCallbackReceived |= isSameVibrator; + // Only activate this step if a timeout was set to wait for the vibration to complete, + // otherwise we are waiting for the correct time to play the next step. + return isSameVibrator && (previousStepVibratorOffTimeout > SystemClock.uptimeMillis()); + } + + @Override + public List<Step> cancel() { + return Arrays.asList(new CompleteEffectVibratorStep(conductor, SystemClock.uptimeMillis(), + /* cancelled= */ true, controller, previousStepVibratorOffTimeout)); + } + + @Override + public void cancelImmediately() { + if (previousStepVibratorOffTimeout > SystemClock.uptimeMillis()) { + // Vibrator might be running from previous steps, so turn it off while canceling. + stopVibrating(); + } + } + + protected void stopVibrating() { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Turning off vibrator " + getVibratorId()); + } + controller.off(); + } + + protected void changeAmplitude(float amplitude) { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Amplitude changed on vibrator " + getVibratorId() + " to " + amplitude); + } + controller.setAmplitude(amplitude); + } + + /** + * Return the {@link VibrationStepConductor#nextVibrateStep} with same timings, only jumping + * the segments. + */ + protected List<Step> skipToNextSteps(int segmentsSkipped) { + return nextSteps(startTime, previousStepVibratorOffTimeout, segmentsSkipped); + } + + /** + * Return the {@link VibrationStepConductor#nextVibrateStep} with same start and off timings + * calculated from {@link #getVibratorOnDuration()}, jumping all played segments. + * + * <p>This method has same behavior as {@link #skipToNextSteps(int)} when the vibrator + * result is non-positive, meaning the vibrator has either ignored or failed to turn on. + */ + protected List<Step> nextSteps(int segmentsPlayed) { + if (mVibratorOnResult <= 0) { + // Vibration was not started, so just skip the played segments and keep timings. + return skipToNextSteps(segmentsPlayed); + } + long nextStartTime = SystemClock.uptimeMillis() + mVibratorOnResult; + long nextVibratorOffTimeout = + nextStartTime + VibrationStepConductor.CALLBACKS_EXTRA_TIMEOUT; + return nextSteps(nextStartTime, nextVibratorOffTimeout, segmentsPlayed); + } + + /** + * Return the {@link VibrationStepConductor#nextVibrateStep} with given start and off timings, + * which might be calculated independently, jumping all played segments. + * + * <p>This should be used when the vibrator on/off state is not responsible for the steps + * execution timings, e.g. while playing the vibrator amplitudes. + */ + protected List<Step> nextSteps(long nextStartTime, long vibratorOffTimeout, + int segmentsPlayed) { + Step nextStep = conductor.nextVibrateStep(nextStartTime, controller, effect, + segmentIndex + segmentsPlayed, vibratorOffTimeout); + return nextStep == null ? VibrationStepConductor.EMPTY_STEP_LIST : Arrays.asList(nextStep); + } +} diff --git a/services/core/java/com/android/server/vibrator/CompleteEffectVibratorStep.java b/services/core/java/com/android/server/vibrator/CompleteEffectVibratorStep.java new file mode 100644 index 000000000000..8585e3473ef3 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/CompleteEffectVibratorStep.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.SystemClock; +import android.os.Trace; +import android.os.VibrationEffect; +import android.util.Slog; + +import java.util.Arrays; +import java.util.List; + +/** + * Represents a step to complete a {@link VibrationEffect}. + * + * <p>This runs right at the time the vibration is considered to end and will update the pending + * vibrators count. This can turn off the vibrator or slowly ramp it down to zero amplitude. + */ +final class CompleteEffectVibratorStep extends AbstractVibratorStep { + private final boolean mCancelled; + + CompleteEffectVibratorStep(VibrationStepConductor conductor, long startTime, boolean cancelled, + VibratorController controller, long previousStepVibratorOffTimeout) { + super(conductor, startTime, controller, /* effect= */ null, /* index= */ -1, + previousStepVibratorOffTimeout); + mCancelled = cancelled; + } + + @Override + public boolean isCleanUp() { + // If the vibration was cancelled then this is just a clean up to ramp off the vibrator. + // Otherwise this step is part of the vibration. + return mCancelled; + } + + @Override + public List<Step> cancel() { + if (mCancelled) { + // Double cancelling will just turn off the vibrator right away. + return Arrays.asList( + new TurnOffVibratorStep(conductor, SystemClock.uptimeMillis(), controller)); + } + return super.cancel(); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "CompleteEffectVibratorStep"); + try { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Running " + (mCancelled ? "cancel" : "complete") + " vibration" + + " step on vibrator " + controller.getVibratorInfo().getId()); + } + if (mVibratorCompleteCallbackReceived) { + // Vibration completion callback was received by this step, just turn if off + // and skip any clean-up. + stopVibrating(); + return VibrationStepConductor.EMPTY_STEP_LIST; + } + + float currentAmplitude = controller.getCurrentAmplitude(); + long remainingOnDuration = + previousStepVibratorOffTimeout - VibrationStepConductor.CALLBACKS_EXTRA_TIMEOUT + - SystemClock.uptimeMillis(); + long rampDownDuration = + Math.min(remainingOnDuration, + conductor.vibrationSettings.getRampDownDuration()); + long stepDownDuration = conductor.vibrationSettings.getRampStepDuration(); + if (currentAmplitude < VibrationStepConductor.RAMP_OFF_AMPLITUDE_MIN + || rampDownDuration <= stepDownDuration) { + // No need to ramp down the amplitude, just wait to turn it off. + if (mCancelled) { + // Vibration is completing because it was cancelled, turn off right away. + stopVibrating(); + return VibrationStepConductor.EMPTY_STEP_LIST; + } else { + return Arrays.asList(new TurnOffVibratorStep( + conductor, previousStepVibratorOffTimeout, controller)); + } + } + + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Ramping down vibrator " + controller.getVibratorInfo().getId() + + " from amplitude " + currentAmplitude + + " for " + rampDownDuration + "ms"); + } + float amplitudeDelta = currentAmplitude / (rampDownDuration / stepDownDuration); + float amplitudeTarget = currentAmplitude - amplitudeDelta; + long newVibratorOffTimeout = + mCancelled ? rampDownDuration : previousStepVibratorOffTimeout; + return Arrays.asList( + new RampOffVibratorStep(conductor, startTime, amplitudeTarget, amplitudeDelta, + controller, newVibratorOffTimeout)); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } +} diff --git a/services/core/java/com/android/server/vibrator/ComposePrimitivesVibratorStep.java b/services/core/java/com/android/server/vibrator/ComposePrimitivesVibratorStep.java new file mode 100644 index 000000000000..d1ea80557419 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/ComposePrimitivesVibratorStep.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.Trace; +import android.os.VibrationEffect; +import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a step to turn the vibrator on using a composition of primitives. + * + * <p>This step will use the maximum supported number of consecutive segments of type + * {@link PrimitiveSegment} starting at the current index. + */ +final class ComposePrimitivesVibratorStep extends AbstractVibratorStep { + + ComposePrimitivesVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller, VibrationEffect.Composed effect, int index, + long previousStepVibratorOffTimeout) { + // This step should wait for the last vibration to finish (with the timeout) and for the + // intended step start time (to respect the effect delays). + super(conductor, Math.max(startTime, previousStepVibratorOffTimeout), controller, effect, + index, previousStepVibratorOffTimeout); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "ComposePrimitivesStep"); + try { + // Load the next PrimitiveSegments to create a single compose call to the vibrator, + // limited to the vibrator composition maximum size. + int limit = controller.getVibratorInfo().getCompositionSizeMax(); + int segmentCount = limit > 0 + ? Math.min(effect.getSegments().size(), segmentIndex + limit) + : effect.getSegments().size(); + List<PrimitiveSegment> primitives = new ArrayList<>(); + for (int i = segmentIndex; i < segmentCount; i++) { + VibrationEffectSegment segment = effect.getSegments().get(i); + if (segment instanceof PrimitiveSegment) { + primitives.add((PrimitiveSegment) segment); + } else { + break; + } + } + + if (primitives.isEmpty()) { + Slog.w(VibrationThread.TAG, "Ignoring wrong segment for a ComposePrimitivesStep: " + + effect.getSegments().get(segmentIndex)); + return skipToNextSteps(/* segmentsSkipped= */ 1); + } + + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, "Compose " + primitives + " primitives on vibrator " + + controller.getVibratorInfo().getId()); + } + mVibratorOnResult = controller.on( + primitives.toArray(new PrimitiveSegment[primitives.size()]), + getVibration().id); + + return nextSteps(/* segmentsPlayed= */ primitives.size()); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } +} diff --git a/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java b/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java new file mode 100644 index 000000000000..73bf933f8bc9 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.Trace; +import android.os.VibrationEffect; +import android.os.vibrator.RampSegment; +import android.os.vibrator.StepSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a step to turn the vibrator on using a composition of PWLE segments. + * + * <p>This step will use the maximum supported number of consecutive segments of type + * {@link StepSegment} or {@link RampSegment} starting at the current index. + */ +final class ComposePwleVibratorStep extends AbstractVibratorStep { + + ComposePwleVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller, VibrationEffect.Composed effect, int index, + long previousStepVibratorOffTimeout) { + // This step should wait for the last vibration to finish (with the timeout) and for the + // intended step start time (to respect the effect delays). + super(conductor, Math.max(startTime, previousStepVibratorOffTimeout), controller, effect, + index, previousStepVibratorOffTimeout); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "ComposePwleStep"); + try { + // Load the next RampSegments to create a single composePwle call to the vibrator, + // limited to the vibrator PWLE maximum size. + int limit = controller.getVibratorInfo().getPwleSizeMax(); + int segmentCount = limit > 0 + ? Math.min(effect.getSegments().size(), segmentIndex + limit) + : effect.getSegments().size(); + List<RampSegment> pwles = new ArrayList<>(); + for (int i = segmentIndex; i < segmentCount; i++) { + VibrationEffectSegment segment = effect.getSegments().get(i); + if (segment instanceof RampSegment) { + pwles.add((RampSegment) segment); + } else { + break; + } + } + + if (pwles.isEmpty()) { + Slog.w(VibrationThread.TAG, "Ignoring wrong segment for a ComposePwleStep: " + + effect.getSegments().get(segmentIndex)); + return skipToNextSteps(/* segmentsSkipped= */ 1); + } + + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, "Compose " + pwles + " PWLEs on vibrator " + + controller.getVibratorInfo().getId()); + } + mVibratorOnResult = controller.on(pwles.toArray(new RampSegment[pwles.size()]), + getVibration().id); + + return nextSteps(/* segmentsPlayed= */ pwles.size()); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } +} diff --git a/services/core/java/com/android/server/vibrator/FinishSequentialEffectStep.java b/services/core/java/com/android/server/vibrator/FinishSequentialEffectStep.java new file mode 100644 index 000000000000..bbbca024214f --- /dev/null +++ b/services/core/java/com/android/server/vibrator/FinishSequentialEffectStep.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.Trace; +import android.util.Slog; + +import java.util.Arrays; +import java.util.List; + +/** + * Finish a sync vibration started by a {@link StartSequentialEffectStep}. + * + * <p>This only plays after all active vibrators steps have finished, and adds a {@link + * StartSequentialEffectStep} to the queue if the sequential effect isn't finished yet. + */ +final class FinishSequentialEffectStep extends Step { + public final StartSequentialEffectStep startedStep; + + FinishSequentialEffectStep(StartSequentialEffectStep startedStep) { + // No predefined startTime, just wait for all steps in the queue. + super(startedStep.conductor, Long.MAX_VALUE); + this.startedStep = startedStep; + } + + @Override + public boolean isCleanUp() { + // This step only notes that all the vibrators has been turned off. + return true; + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "FinishSequentialEffectStep"); + try { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "FinishSequentialEffectStep for effect #" + startedStep.currentIndex); + } + conductor.vibratorManagerHooks.noteVibratorOff(conductor.getVibration().uid); + Step nextStep = startedStep.nextStep(); + return nextStep == null ? VibrationStepConductor.EMPTY_STEP_LIST + : Arrays.asList(nextStep); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } + + @Override + public List<Step> cancel() { + cancelImmediately(); + return VibrationStepConductor.EMPTY_STEP_LIST; + } + + @Override + public void cancelImmediately() { + conductor.vibratorManagerHooks.noteVibratorOff(conductor.getVibration().uid); + } +} diff --git a/services/core/java/com/android/server/vibrator/PerformPrebakedVibratorStep.java b/services/core/java/com/android/server/vibrator/PerformPrebakedVibratorStep.java new file mode 100644 index 000000000000..601ae978f637 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/PerformPrebakedVibratorStep.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.Trace; +import android.os.VibrationEffect; +import android.os.vibrator.PrebakedSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a step to turn the vibrator on with a single prebaked effect. + * + * <p>This step automatically falls back by replacing the prebaked segment with + * {@link VibrationSettings#getFallbackEffect(int)}, if available. + */ +final class PerformPrebakedVibratorStep extends AbstractVibratorStep { + + PerformPrebakedVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller, VibrationEffect.Composed effect, int index, + long previousStepVibratorOffTimeout) { + // This step should wait for the last vibration to finish (with the timeout) and for the + // intended step start time (to respect the effect delays). + super(conductor, Math.max(startTime, previousStepVibratorOffTimeout), controller, effect, + index, previousStepVibratorOffTimeout); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "PerformPrebakedVibratorStep"); + try { + VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); + if (!(segment instanceof PrebakedSegment)) { + Slog.w(VibrationThread.TAG, "Ignoring wrong segment for a " + + "PerformPrebakedVibratorStep: " + segment); + return skipToNextSteps(/* segmentsSkipped= */ 1); + } + + PrebakedSegment prebaked = (PrebakedSegment) segment; + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, "Perform " + VibrationEffect.effectIdToString( + prebaked.getEffectId()) + " on vibrator " + + controller.getVibratorInfo().getId()); + } + + VibrationEffect fallback = getVibration().getFallback(prebaked.getEffectId()); + mVibratorOnResult = controller.on(prebaked, getVibration().id); + + if (mVibratorOnResult == 0 && prebaked.shouldFallback() + && (fallback instanceof VibrationEffect.Composed)) { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, "Playing fallback for effect " + + VibrationEffect.effectIdToString(prebaked.getEffectId())); + } + AbstractVibratorStep fallbackStep = conductor.nextVibrateStep(startTime, controller, + replaceCurrentSegment((VibrationEffect.Composed) fallback), + segmentIndex, previousStepVibratorOffTimeout); + List<Step> fallbackResult = fallbackStep.play(); + // Update the result with the fallback result so this step is seamlessly + // replaced by the fallback to any outer application of this. + mVibratorOnResult = fallbackStep.getVibratorOnDuration(); + return fallbackResult; + } + + return nextSteps(/* segmentsPlayed= */ 1); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } + + /** + * Replace segment at {@link #segmentIndex} in {@link #effect} with given fallback segments. + * + * @return a copy of {@link #effect} with replaced segment. + */ + private VibrationEffect.Composed replaceCurrentSegment(VibrationEffect.Composed fallback) { + List<VibrationEffectSegment> newSegments = new ArrayList<>(effect.getSegments()); + int newRepeatIndex = effect.getRepeatIndex(); + newSegments.remove(segmentIndex); + newSegments.addAll(segmentIndex, fallback.getSegments()); + if (segmentIndex < effect.getRepeatIndex()) { + newRepeatIndex += fallback.getSegments().size() - 1; + } + return new VibrationEffect.Composed(newSegments, newRepeatIndex); + } +} diff --git a/services/core/java/com/android/server/vibrator/RampOffVibratorStep.java b/services/core/java/com/android/server/vibrator/RampOffVibratorStep.java new file mode 100644 index 000000000000..8cf5fb394d9d --- /dev/null +++ b/services/core/java/com/android/server/vibrator/RampOffVibratorStep.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.SystemClock; +import android.os.Trace; +import android.util.Slog; + +import java.util.Arrays; +import java.util.List; + +/** Represents a step to ramp down the vibrator amplitude before turning it off. */ +final class RampOffVibratorStep extends AbstractVibratorStep { + private final float mAmplitudeTarget; + private final float mAmplitudeDelta; + + RampOffVibratorStep(VibrationStepConductor conductor, long startTime, float amplitudeTarget, + float amplitudeDelta, VibratorController controller, + long previousStepVibratorOffTimeout) { + super(conductor, startTime, controller, /* effect= */ null, /* index= */ -1, + previousStepVibratorOffTimeout); + mAmplitudeTarget = amplitudeTarget; + mAmplitudeDelta = amplitudeDelta; + } + + @Override + public boolean isCleanUp() { + return true; + } + + @Override + public List<Step> cancel() { + return Arrays.asList( + new TurnOffVibratorStep(conductor, SystemClock.uptimeMillis(), controller)); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "RampOffVibratorStep"); + try { + if (VibrationThread.DEBUG) { + long latency = SystemClock.uptimeMillis() - startTime; + Slog.d(VibrationThread.TAG, "Ramp down the vibrator amplitude, step with " + + latency + "ms latency."); + } + if (mVibratorCompleteCallbackReceived) { + // Vibration completion callback was received by this step, just turn if off + // and skip the rest of the steps to ramp down the vibrator amplitude. + stopVibrating(); + return VibrationStepConductor.EMPTY_STEP_LIST; + } + + changeAmplitude(mAmplitudeTarget); + + float newAmplitudeTarget = mAmplitudeTarget - mAmplitudeDelta; + if (newAmplitudeTarget < VibrationStepConductor.RAMP_OFF_AMPLITUDE_MIN) { + // Vibrator amplitude cannot go further down, just turn it off. + return Arrays.asList(new TurnOffVibratorStep( + conductor, previousStepVibratorOffTimeout, controller)); + } + return Arrays.asList(new RampOffVibratorStep( + conductor, + startTime + conductor.vibrationSettings.getRampStepDuration(), + newAmplitudeTarget, mAmplitudeDelta, controller, + previousStepVibratorOffTimeout)); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } +} diff --git a/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java new file mode 100644 index 000000000000..d5c11161bdfa --- /dev/null +++ b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.SystemClock; +import android.os.Trace; +import android.os.VibrationEffect; +import android.os.vibrator.StepSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; + +import java.util.Arrays; +import java.util.List; + +/** + * Represents a step to turn the vibrator on and change its amplitude. + * + * <p>This step ignores vibration completion callbacks and control the vibrator on/off state + * and amplitude to simulate waveforms represented by a sequence of {@link StepSegment}. + */ +final class SetAmplitudeVibratorStep extends AbstractVibratorStep { + private long mNextOffTime; + + SetAmplitudeVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller, VibrationEffect.Composed effect, int index, + long previousStepVibratorOffTimeout) { + // This step has a fixed startTime coming from the timings of the waveform it's playing. + super(conductor, startTime, controller, effect, index, previousStepVibratorOffTimeout); + mNextOffTime = previousStepVibratorOffTimeout; + } + + @Override + public boolean acceptVibratorCompleteCallback(int vibratorId) { + if (controller.getVibratorInfo().getId() == vibratorId) { + mVibratorCompleteCallbackReceived = true; + mNextOffTime = SystemClock.uptimeMillis(); + } + // Timings are tightly controlled here, so only trigger this step if the vibrator was + // supposed to be ON but has completed prematurely, to turn it back on as soon as + // possible. + return mNextOffTime < startTime && controller.getCurrentAmplitude() > 0; + } + + @Override + public List<Step> play() { + // TODO: consider separating the "on" steps at the start into a separate Step. + // TODO: consider instantiating the step with the required amplitude, rather than + // needing to dig into the effect. + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "SetAmplitudeVibratorStep"); + try { + long now = SystemClock.uptimeMillis(); + long latency = now - startTime; + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Running amplitude step with " + latency + "ms latency."); + } + + if (mVibratorCompleteCallbackReceived && latency < 0) { + // This step was run early because the vibrator turned off prematurely. + // Turn it back on and return this same step to run at the exact right time. + mNextOffTime = turnVibratorBackOn(/* remainingDuration= */ -latency); + return Arrays.asList(new SetAmplitudeVibratorStep(conductor, startTime, controller, + effect, segmentIndex, mNextOffTime)); + } + + VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); + if (!(segment instanceof StepSegment)) { + Slog.w(VibrationThread.TAG, + "Ignoring wrong segment for a SetAmplitudeVibratorStep: " + segment); + return skipToNextSteps(/* segmentsSkipped= */ 1); + } + + StepSegment stepSegment = (StepSegment) segment; + if (stepSegment.getDuration() == 0) { + // Skip waveform entries with zero timing. + return skipToNextSteps(/* segmentsSkipped= */ 1); + } + + float amplitude = stepSegment.getAmplitude(); + if (amplitude == 0) { + if (previousStepVibratorOffTimeout > now) { + // Amplitude cannot be set to zero, so stop the vibrator. + stopVibrating(); + mNextOffTime = now; + } + } else { + if (startTime >= mNextOffTime) { + // Vibrator is OFF. Turn vibrator back on for the duration of another + // cycle before setting the amplitude. + long onDuration = getVibratorOnDuration(effect, segmentIndex); + if (onDuration > 0) { + mVibratorOnResult = startVibrating(onDuration); + mNextOffTime = now + onDuration + + VibrationStepConductor.CALLBACKS_EXTRA_TIMEOUT; + } + } + changeAmplitude(amplitude); + } + + // Use original startTime to avoid propagating latencies to the waveform. + long nextStartTime = startTime + segment.getDuration(); + return nextSteps(nextStartTime, mNextOffTime, /* segmentsPlayed= */ 1); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } + + private long turnVibratorBackOn(long remainingDuration) { + long onDuration = getVibratorOnDuration(effect, segmentIndex); + if (onDuration <= 0) { + // Vibrator is supposed to go back off when this step starts, so just leave it off. + return previousStepVibratorOffTimeout; + } + onDuration += remainingDuration; + float expectedAmplitude = controller.getCurrentAmplitude(); + mVibratorOnResult = startVibrating(onDuration); + if (mVibratorOnResult > 0) { + // Set the amplitude back to the value it was supposed to be playing at. + changeAmplitude(expectedAmplitude); + } + return SystemClock.uptimeMillis() + onDuration + + VibrationStepConductor.CALLBACKS_EXTRA_TIMEOUT; + } + + private long startVibrating(long duration) { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Turning on vibrator " + controller.getVibratorInfo().getId() + " for " + + duration + "ms"); + } + return controller.on(duration, getVibration().id); + } + + /** + * Get the duration the vibrator will be on for a waveform, starting at {@code startIndex} + * until the next time it's vibrating amplitude is zero or a different type of segment is + * found. + */ + private long getVibratorOnDuration(VibrationEffect.Composed effect, int startIndex) { + List<VibrationEffectSegment> segments = effect.getSegments(); + int segmentCount = segments.size(); + int repeatIndex = effect.getRepeatIndex(); + int i = startIndex; + long timing = 0; + while (i < segmentCount) { + VibrationEffectSegment segment = segments.get(i); + if (!(segment instanceof StepSegment) + || ((StepSegment) segment).getAmplitude() == 0) { + break; + } + timing += segment.getDuration(); + i++; + if (i == segmentCount && repeatIndex >= 0) { + i = repeatIndex; + // prevent infinite loop + repeatIndex = -1; + } + if (i == startIndex) { + // The repeating waveform keeps the vibrator ON all the time. Use a minimum + // of 1s duration to prevent short patterns from turning the vibrator ON too + // frequently. + return Math.max(timing, 1000); + } + } + if (i == segmentCount && effect.getRepeatIndex() < 0) { + // Vibration ending at non-zero amplitude, add extra timings to ramp down after + // vibration is complete. + timing += conductor.vibrationSettings.getRampDownDuration(); + } + return timing; + } +} diff --git a/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java b/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java new file mode 100644 index 000000000000..b8885e81dbe2 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.annotation.Nullable; +import android.hardware.vibrator.IVibratorManager; +import android.os.CombinedVibration; +import android.os.SystemClock; +import android.os.Trace; +import android.os.VibrationEffect; +import android.os.VibratorInfo; +import android.os.vibrator.PrebakedSegment; +import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.StepSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; +import android.util.SparseArray; + +import java.util.ArrayList; +import java.util.List; + +/** + * Starts a sync vibration. + * + * <p>If this step has successfully started playing a vibration on any vibrator, it will always + * add a {@link FinishSequentialEffectStep} to the queue, to be played after all vibrators + * have finished all their individual steps. + * + * <p>If this step does not start any vibrator, it will add a {@link StartSequentialEffectStep} if + * the sequential effect isn't finished yet. + * + * <p>TODO: this step actually does several things: multiple HAL calls to sync the vibrators, + * as well as dispatching the underlying vibrator instruction calls (which need to be done before + * triggering the synced effects). This role/encapsulation could probably be improved to split up + * the grouped HAL calls here, as well as to clarify the role of dispatching VibratorSteps between + * this class and the controller. + */ +final class StartSequentialEffectStep extends Step { + public final CombinedVibration.Sequential sequentialEffect; + public final int currentIndex; + + private long mVibratorsOnMaxDuration; + + StartSequentialEffectStep(VibrationStepConductor conductor, + CombinedVibration.Sequential effect) { + this(conductor, SystemClock.uptimeMillis() + effect.getDelays().get(0), effect, + /* index= */ 0); + } + + StartSequentialEffectStep(VibrationStepConductor conductor, long startTime, + CombinedVibration.Sequential effect, int index) { + super(conductor, startTime); + sequentialEffect = effect; + currentIndex = index; + } + + @Override + public long getVibratorOnDuration() { + return mVibratorsOnMaxDuration; + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "StartSequentialEffectStep"); + List<Step> nextSteps = new ArrayList<>(); + mVibratorsOnMaxDuration = -1; + try { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "StartSequentialEffectStep for effect #" + currentIndex); + } + CombinedVibration effect = sequentialEffect.getEffects().get(currentIndex); + DeviceEffectMap effectMapping = createEffectToVibratorMapping(effect); + if (effectMapping == null) { + // Unable to map effects to vibrators, ignore this step. + return nextSteps; + } + + mVibratorsOnMaxDuration = startVibrating(effectMapping, nextSteps); + if (mVibratorsOnMaxDuration > 0) { + conductor.vibratorManagerHooks.noteVibratorOn(conductor.getVibration().uid, + mVibratorsOnMaxDuration); + } + } finally { + if (mVibratorsOnMaxDuration >= 0) { + // It least one vibrator was started then add a finish step to wait for all + // active vibrators to finish their individual steps before going to the next. + // Otherwise this step was ignored so just go to the next one. + Step nextStep = + mVibratorsOnMaxDuration > 0 ? new FinishSequentialEffectStep(this) + : nextStep(); + if (nextStep != null) { + nextSteps.add(nextStep); + } + } + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + return nextSteps; + } + + @Override + public List<Step> cancel() { + return VibrationStepConductor.EMPTY_STEP_LIST; + } + + @Override + public void cancelImmediately() { + } + + /** + * Create the next {@link StartSequentialEffectStep} to play this sequential effect, starting at + * the + * time this method is called, or null if sequence is complete. + */ + @Nullable + Step nextStep() { + int nextIndex = currentIndex + 1; + if (nextIndex >= sequentialEffect.getEffects().size()) { + return null; + } + long nextEffectDelay = sequentialEffect.getDelays().get(nextIndex); + long nextStartTime = SystemClock.uptimeMillis() + nextEffectDelay; + return new StartSequentialEffectStep(conductor, nextStartTime, sequentialEffect, + nextIndex); + } + + /** Create a mapping of individual {@link VibrationEffect} to available vibrators. */ + @Nullable + private DeviceEffectMap createEffectToVibratorMapping( + CombinedVibration effect) { + if (effect instanceof CombinedVibration.Mono) { + return new DeviceEffectMap((CombinedVibration.Mono) effect); + } + if (effect instanceof CombinedVibration.Stereo) { + return new DeviceEffectMap((CombinedVibration.Stereo) effect); + } + return null; + } + + /** + * Starts playing effects on designated vibrators, in sync. + * + * @param effectMapping The {@link CombinedVibration} mapped to this device vibrators + * @param nextSteps An output list to accumulate the future {@link Step + * Steps} created + * by this method, typically one for each vibrator that has + * successfully started vibrating on this step. + * @return The duration, in millis, of the {@link CombinedVibration}. Repeating + * waveforms return {@link Long#MAX_VALUE}. Zero or negative values indicate the vibrators + * have ignored all effects. + */ + private long startVibrating( + DeviceEffectMap effectMapping, List<Step> nextSteps) { + int vibratorCount = effectMapping.size(); + if (vibratorCount == 0) { + // No effect was mapped to any available vibrator. + return 0; + } + + AbstractVibratorStep[] steps = new AbstractVibratorStep[vibratorCount]; + long vibrationStartTime = SystemClock.uptimeMillis(); + for (int i = 0; i < vibratorCount; i++) { + steps[i] = conductor.nextVibrateStep(vibrationStartTime, + conductor.getVibrators().get(effectMapping.vibratorIdAt(i)), + effectMapping.effectAt(i), + /* segmentIndex= */ 0, /* vibratorOffTimeout= */ 0); + } + + if (steps.length == 1) { + // No need to prepare and trigger sync effects on a single vibrator. + return startVibrating(steps[0], nextSteps); + } + + // This synchronization of vibrators should be executed one at a time, even if we are + // vibrating different sets of vibrators in parallel. The manager can only prepareSynced + // one set of vibrators at a time. + // This property is guaranteed by there only being one thread (VibrationThread) executing + // one Step at a time, so there's no need to hold the state lock. Callbacks will be + // delivered asynchronously but enqueued until the step processing is finished. + boolean hasPrepared = false; + boolean hasTriggered = false; + long maxDuration = 0; + try { + hasPrepared = conductor.vibratorManagerHooks.prepareSyncedVibration( + effectMapping.getRequiredSyncCapabilities(), + effectMapping.getVibratorIds()); + + for (AbstractVibratorStep step : steps) { + long duration = startVibrating(step, nextSteps); + if (duration < 0) { + // One vibrator has failed, fail this entire sync attempt. + return maxDuration = -1; + } + maxDuration = Math.max(maxDuration, duration); + } + + // Check if sync was prepared and if any step was accepted by a vibrator, + // otherwise there is nothing to trigger here. + if (hasPrepared && maxDuration > 0) { + hasTriggered = conductor.vibratorManagerHooks.triggerSyncedVibration( + getVibration().id); + } + return maxDuration; + } finally { + if (hasPrepared && !hasTriggered) { + // Trigger has failed or all steps were ignored by the vibrators. + conductor.vibratorManagerHooks.cancelSyncedVibration(); + nextSteps.clear(); + } else if (maxDuration < 0) { + // Some vibrator failed without being prepared so other vibrators might be + // active. Cancel and remove every pending step from output list. + for (int i = nextSteps.size() - 1; i >= 0; i--) { + nextSteps.remove(i).cancelImmediately(); + } + } + } + } + + private long startVibrating(AbstractVibratorStep step, List<Step> nextSteps) { + nextSteps.addAll(step.play()); + long stepDuration = step.getVibratorOnDuration(); + if (stepDuration < 0) { + // Step failed, so return negative duration to propagate failure. + return stepDuration; + } + // Return the longest estimation for the entire effect. + return Math.max(stepDuration, step.effect.getDuration()); + } + + /** + * Map a {@link CombinedVibration} to the vibrators available on the device. + * + * <p>This contains the logic to find the capabilities required from {@link IVibratorManager} to + * play all of the effects in sync. + */ + final class DeviceEffectMap { + private final SparseArray<VibrationEffect.Composed> mVibratorEffects; + private final int[] mVibratorIds; + private final long mRequiredSyncCapabilities; + + DeviceEffectMap(CombinedVibration.Mono mono) { + SparseArray<VibratorController> vibrators = conductor.getVibrators(); + mVibratorEffects = new SparseArray<>(vibrators.size()); + mVibratorIds = new int[vibrators.size()]; + for (int i = 0; i < vibrators.size(); i++) { + int vibratorId = vibrators.keyAt(i); + VibratorInfo vibratorInfo = vibrators.valueAt(i).getVibratorInfo(); + VibrationEffect effect = conductor.deviceEffectAdapter.apply( + mono.getEffect(), vibratorInfo); + if (effect instanceof VibrationEffect.Composed) { + mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect); + mVibratorIds[i] = vibratorId; + } + } + mRequiredSyncCapabilities = calculateRequiredSyncCapabilities(mVibratorEffects); + } + + DeviceEffectMap(CombinedVibration.Stereo stereo) { + SparseArray<VibratorController> vibrators = conductor.getVibrators(); + SparseArray<VibrationEffect> stereoEffects = stereo.getEffects(); + mVibratorEffects = new SparseArray<>(); + for (int i = 0; i < stereoEffects.size(); i++) { + int vibratorId = stereoEffects.keyAt(i); + if (vibrators.contains(vibratorId)) { + VibratorInfo vibratorInfo = vibrators.valueAt(i).getVibratorInfo(); + VibrationEffect effect = conductor.deviceEffectAdapter.apply( + stereoEffects.valueAt(i), vibratorInfo); + if (effect instanceof VibrationEffect.Composed) { + mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect); + } + } + } + mVibratorIds = new int[mVibratorEffects.size()]; + for (int i = 0; i < mVibratorEffects.size(); i++) { + mVibratorIds[i] = mVibratorEffects.keyAt(i); + } + mRequiredSyncCapabilities = calculateRequiredSyncCapabilities(mVibratorEffects); + } + + /** + * Return the number of vibrators mapped to play the {@link CombinedVibration} on this + * device. + */ + public int size() { + return mVibratorIds.length; + } + + /** + * Return all capabilities required to play the {@link CombinedVibration} in + * between calls to {@link IVibratorManager#prepareSynced} and + * {@link IVibratorManager#triggerSynced}. + */ + public long getRequiredSyncCapabilities() { + return mRequiredSyncCapabilities; + } + + /** Return all vibrator ids mapped to play the {@link CombinedVibration}. */ + public int[] getVibratorIds() { + return mVibratorIds; + } + + /** Return the id of the vibrator at given index. */ + public int vibratorIdAt(int index) { + return mVibratorEffects.keyAt(index); + } + + /** Return the {@link VibrationEffect} at given index. */ + public VibrationEffect.Composed effectAt(int index) { + return mVibratorEffects.valueAt(index); + } + + /** + * Return all capabilities required from the {@link IVibratorManager} to prepare and + * trigger all given effects in sync. + * + * @return {@link IVibratorManager#CAP_SYNC} together with all required + * IVibratorManager.CAP_PREPARE_* and IVibratorManager.CAP_MIXED_TRIGGER_* capabilities. + */ + private long calculateRequiredSyncCapabilities( + SparseArray<VibrationEffect.Composed> effects) { + long prepareCap = 0; + for (int i = 0; i < effects.size(); i++) { + VibrationEffectSegment firstSegment = effects.valueAt(i).getSegments().get(0); + if (firstSegment instanceof StepSegment) { + prepareCap |= IVibratorManager.CAP_PREPARE_ON; + } else if (firstSegment instanceof PrebakedSegment) { + prepareCap |= IVibratorManager.CAP_PREPARE_PERFORM; + } else if (firstSegment instanceof PrimitiveSegment) { + prepareCap |= IVibratorManager.CAP_PREPARE_COMPOSE; + } + } + int triggerCap = 0; + if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_ON)) { + triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_ON; + } + if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_PERFORM)) { + triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_PERFORM; + } + if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_COMPOSE)) { + triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE; + } + return IVibratorManager.CAP_SYNC | prepareCap | triggerCap; + } + + /** + * Return true if {@code prepareCapabilities} contains this {@code capability} mixed with + * different ones, requiring a mixed trigger capability from the vibrator manager for + * syncing all effects. + */ + private boolean requireMixedTriggerCapability(long prepareCapabilities, long capability) { + return (prepareCapabilities & capability) != 0 + && (prepareCapabilities & ~capability) != 0; + } + } +} diff --git a/services/core/java/com/android/server/vibrator/Step.java b/services/core/java/com/android/server/vibrator/Step.java new file mode 100644 index 000000000000..042e8a0e6ad5 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/Step.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.annotation.NonNull; +import android.os.CombinedVibration; +import android.os.SystemClock; +import android.os.VibrationEffect; + +import java.util.List; + +/** + * Represent a single step for playing a vibration. + * + * <p>Every step has a start time, which can be used to apply delays between steps while + * executing them in sequence. + */ +abstract class Step implements Comparable<Step> { + public final VibrationStepConductor conductor; + public final long startTime; + + Step(VibrationStepConductor conductor, long startTime) { + this.conductor = conductor; + this.startTime = startTime; + } + + protected Vibration getVibration() { + return conductor.getVibration(); + } + + /** + * Returns true if this step is a clean up step and not part of a {@link VibrationEffect} or + * {@link CombinedVibration}. + */ + public boolean isCleanUp() { + return false; + } + + /** Play this step, returning a (possibly empty) list of next steps. */ + @NonNull + public abstract List<Step> play(); + + /** + * Cancel this pending step and return a (possibly empty) list of clean-up steps that should + * be played to gracefully cancel this step. + */ + @NonNull + public abstract List<Step> cancel(); + + /** Cancel this pending step immediately, skipping any clean-up. */ + public abstract void cancelImmediately(); + + /** + * Return the duration the vibrator was turned on when this step was played. + * + * @return A positive duration that the vibrator was turned on for by this step; + * Zero if the segment is not supported, the step was not played yet or vibrator was never + * turned on by this step; A negative value if the vibrator call has failed. + */ + public long getVibratorOnDuration() { + return 0; + } + + /** + * Return true to run this step right after a vibrator has notified vibration completed, + * used to resume steps waiting on vibrator callbacks with a timeout. + */ + public boolean acceptVibratorCompleteCallback(int vibratorId) { + return false; + } + + /** + * Returns the time in millis to wait before playing this step. This is performed + * while holding the queue lock, so should not rely on potentially slow operations. + */ + public long calculateWaitTime() { + if (startTime == Long.MAX_VALUE) { + // This step don't have a predefined start time, it's just marked to be executed + // after all other steps have finished. + return 0; + } + return Math.max(0, startTime - SystemClock.uptimeMillis()); + } + + @Override + public int compareTo(Step o) { + return Long.compare(startTime, o.startTime); + } +} diff --git a/services/core/java/com/android/server/vibrator/TurnOffVibratorStep.java b/services/core/java/com/android/server/vibrator/TurnOffVibratorStep.java new file mode 100644 index 000000000000..297ef5614e84 --- /dev/null +++ b/services/core/java/com/android/server/vibrator/TurnOffVibratorStep.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.os.SystemClock; +import android.os.Trace; + +import java.util.Arrays; +import java.util.List; + +/** + * Represents a step to turn the vibrator off. + * + * <p>This runs after a timeout on the expected time the vibrator should have finished playing, + * and can be brought forward by vibrator complete callbacks. The step shouldn't be skipped, even + * if the vibrator-complete callback was received, as some implementations still rely on the + * "off" call to actually stop. + */ +final class TurnOffVibratorStep extends AbstractVibratorStep { + + TurnOffVibratorStep(VibrationStepConductor conductor, long startTime, + VibratorController controller) { + super(conductor, startTime, controller, /* effect= */ null, /* index= */ -1, startTime); + } + + @Override + public boolean isCleanUp() { + return true; + } + + @Override + public List<Step> cancel() { + return Arrays.asList( + new TurnOffVibratorStep(conductor, SystemClock.uptimeMillis(), controller)); + } + + @Override + public void cancelImmediately() { + stopVibrating(); + } + + @Override + public List<Step> play() { + Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "TurnOffVibratorStep"); + try { + stopVibrating(); + return VibrationStepConductor.EMPTY_STEP_LIST; + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); + } + } +} diff --git a/services/core/java/com/android/server/vibrator/VibrationStepConductor.java b/services/core/java/com/android/server/vibrator/VibrationStepConductor.java new file mode 100644 index 000000000000..51691fbcdf5a --- /dev/null +++ b/services/core/java/com/android/server/vibrator/VibrationStepConductor.java @@ -0,0 +1,355 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.vibrator; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.CombinedVibration; +import android.os.VibrationEffect; +import android.os.WorkSource; +import android.os.vibrator.PrebakedSegment; +import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.RampSegment; +import android.os.vibrator.VibrationEffectSegment; +import android.util.Slog; +import android.util.SparseArray; + +import com.android.internal.annotations.GuardedBy; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * Creates and manages a queue of steps for performing a VibrationEffect, as well as coordinating + * dispatch of callbacks. + */ +final class VibrationStepConductor { + /** + * Extra timeout added to the end of each vibration step to ensure it finishes even when + * vibrator callbacks are lost. + */ + static final long CALLBACKS_EXTRA_TIMEOUT = 1_000; + /** Threshold to prevent the ramp off steps from trying to set extremely low amplitudes. */ + static final float RAMP_OFF_AMPLITUDE_MIN = 1e-3f; + static final List<Step> EMPTY_STEP_LIST = new ArrayList<>(); + + final Object mLock = new Object(); + + // Used within steps. + public final VibrationSettings vibrationSettings; + public final DeviceVibrationEffectAdapter deviceEffectAdapter; + public final VibrationThread.VibratorManagerHooks vibratorManagerHooks; + + private final WorkSource mWorkSource; + private final Vibration mVibration; + private final SparseArray<VibratorController> mVibrators = new SparseArray<>(); + + @GuardedBy("mLock") + private final PriorityQueue<Step> mNextSteps = new PriorityQueue<>(); + @GuardedBy("mLock") + private final Queue<Step> mPendingOnVibratorCompleteSteps = new LinkedList<>(); + @GuardedBy("mLock") + private final Queue<Integer> mCompletionNotifiedVibrators = new LinkedList<>(); + + @GuardedBy("mLock") + private int mPendingVibrateSteps; + @GuardedBy("mLock") + private int mConsumedStartVibrateSteps; + @GuardedBy("mLock") + private int mSuccessfulVibratorOnSteps; + @GuardedBy("mLock") + private boolean mWaitToProcessVibratorCompleteCallbacks; + + VibrationStepConductor(Vibration vib, VibrationSettings vibrationSettings, + DeviceVibrationEffectAdapter effectAdapter, + SparseArray<VibratorController> availableVibrators, + VibrationThread.VibratorManagerHooks vibratorManagerHooks) { + this.mVibration = vib; + this.vibrationSettings = vibrationSettings; + this.deviceEffectAdapter = effectAdapter; + this.vibratorManagerHooks = vibratorManagerHooks; + this.mWorkSource = new WorkSource(mVibration.uid); + + CombinedVibration effect = vib.getEffect(); + for (int i = 0; i < availableVibrators.size(); i++) { + if (effect.hasVibrator(availableVibrators.keyAt(i))) { + mVibrators.put(availableVibrators.keyAt(i), availableVibrators.valueAt(i)); + } + } + } + + @Nullable + AbstractVibratorStep nextVibrateStep(long startTime, VibratorController controller, + VibrationEffect.Composed effect, int segmentIndex, + long previousStepVibratorOffTimeout) { + if (segmentIndex >= effect.getSegments().size()) { + segmentIndex = effect.getRepeatIndex(); + } + if (segmentIndex < 0) { + // No more segments to play, last step is to complete the vibration on this vibrator. + return new CompleteEffectVibratorStep(this, startTime, /* cancelled= */ false, + controller, previousStepVibratorOffTimeout); + } + + VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); + if (segment instanceof PrebakedSegment) { + return new PerformPrebakedVibratorStep(this, startTime, controller, effect, + segmentIndex, previousStepVibratorOffTimeout); + } + if (segment instanceof PrimitiveSegment) { + return new ComposePrimitivesVibratorStep(this, startTime, controller, effect, + segmentIndex, previousStepVibratorOffTimeout); + } + if (segment instanceof RampSegment) { + return new ComposePwleVibratorStep(this, startTime, controller, effect, segmentIndex, + previousStepVibratorOffTimeout); + } + return new SetAmplitudeVibratorStep(this, startTime, controller, effect, segmentIndex, + previousStepVibratorOffTimeout); + } + + public void initializeForEffect(@NonNull CombinedVibration.Sequential vibration) { + synchronized (mLock) { + mPendingVibrateSteps++; + mNextSteps.offer(new StartSequentialEffectStep(this, vibration)); + } + } + + public Vibration getVibration() { + return mVibration; + } + + public WorkSource getWorkSource() { + return mWorkSource; + } + + SparseArray<VibratorController> getVibrators() { + return mVibrators; + } + + public boolean isFinished() { + synchronized (mLock) { + return mPendingOnVibratorCompleteSteps.isEmpty() && mNextSteps.isEmpty(); + } + } + + /** + * Calculate the {@link Vibration.Status} based on the current queue state and the expected + * number of {@link StartSequentialEffectStep} to be played. + */ + public Vibration.Status calculateVibrationStatus(int expectedStartVibrateSteps) { + synchronized (mLock) { + if (mPendingVibrateSteps > 0 + || mConsumedStartVibrateSteps < expectedStartVibrateSteps) { + return Vibration.Status.RUNNING; + } + if (mSuccessfulVibratorOnSteps > 0) { + return Vibration.Status.FINISHED; + } + // If no step was able to turn the vibrator ON successfully. + return Vibration.Status.IGNORED_UNSUPPORTED; + } + } + + /** Returns the time in millis to wait before calling {@link #runNextStep()}. */ + @GuardedBy("mLock") + public long getWaitMillisBeforeNextStepLocked() { + if (!mPendingOnVibratorCompleteSteps.isEmpty()) { + // Steps resumed by vibrator complete callback should be played right away. + return 0; + } + Step nextStep = mNextSteps.peek(); + return nextStep == null ? 0 : nextStep.calculateWaitTime(); + } + + /** + * Play and remove the step at the top of this queue, and also adds the next steps generated + * to be played next. + */ + public void runNextStep() { + // Vibrator callbacks should wait until the polled step is played and the next steps are + // added back to the queue, so they can handle the callback. + markWaitToProcessVibratorCallbacks(); + try { + Step nextStep = pollNext(); + if (nextStep != null) { + // This might turn on the vibrator and have a HAL latency. Execute this outside + // any lock to avoid blocking other interactions with the thread. + List<Step> nextSteps = nextStep.play(); + synchronized (mLock) { + if (nextStep.getVibratorOnDuration() > 0) { + mSuccessfulVibratorOnSteps++; + } + if (nextStep instanceof StartSequentialEffectStep) { + mConsumedStartVibrateSteps++; + } + if (!nextStep.isCleanUp()) { + mPendingVibrateSteps--; + } + for (int i = 0; i < nextSteps.size(); i++) { + mPendingVibrateSteps += nextSteps.get(i).isCleanUp() ? 0 : 1; + } + mNextSteps.addAll(nextSteps); + } + } + } finally { + synchronized (mLock) { + processVibratorCompleteCallbacksLocked(); + } + } + } + + /** + * Notify the vibrator completion. + * + * <p>This is a lightweight method that do not trigger any operation from {@link + * VibratorController}, so it can be called directly from a native callback. + */ + @GuardedBy("mLock") + private void notifyVibratorCompleteLocked(int vibratorId) { + mCompletionNotifiedVibrators.offer(vibratorId); + if (!mWaitToProcessVibratorCompleteCallbacks) { + // No step is being played or cancelled now, process the callback right away. + processVibratorCompleteCallbacksLocked(); + } + } + + public void notifyVibratorComplete(int vibratorId) { + synchronized (mLock) { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Vibration complete reported by vibrator " + vibratorId); + } + notifyVibratorCompleteLocked(vibratorId); + mLock.notify(); + } + } + + public void notifySyncedVibrationComplete() { + synchronized (mLock) { + if (VibrationThread.DEBUG) { + Slog.d(VibrationThread.TAG, + "Synced vibration complete reported by vibrator manager"); + } + for (int i = 0; i < mVibrators.size(); i++) { + notifyVibratorCompleteLocked(mVibrators.keyAt(i)); + } + mLock.notify(); + } + } + + /** + * Cancel the current queue, replacing all remaining steps with respective clean-up steps. + * + * <p>This will remove all steps and replace them with respective + * {@link Step#cancel()}. + */ + public void cancel() { + // Vibrator callbacks should wait until all steps from the queue are properly cancelled + // and clean up steps are added back to the queue, so they can handle the callback. + markWaitToProcessVibratorCallbacks(); + try { + List<Step> cleanUpSteps = new ArrayList<>(); + Step step; + while ((step = pollNext()) != null) { + cleanUpSteps.addAll(step.cancel()); + } + synchronized (mLock) { + // All steps generated by Step.cancel() should be clean-up steps. + mPendingVibrateSteps = 0; + mNextSteps.addAll(cleanUpSteps); + } + } finally { + synchronized (mLock) { + processVibratorCompleteCallbacksLocked(); + } + } + } + + /** + * Cancel the current queue immediately, clearing all remaining steps and skipping clean-up. + * + * <p>This will remove and trigger {@link Step#cancelImmediately()} in all steps, in order. + */ + public void cancelImmediately() { + // Vibrator callbacks should wait until all steps from the queue are properly cancelled. + markWaitToProcessVibratorCallbacks(); + try { + Step step; + while ((step = pollNext()) != null) { + // This might turn off the vibrator and have a HAL latency. Execute this outside + // any lock to avoid blocking other interactions with the thread. + step.cancelImmediately(); + } + synchronized (mLock) { + mPendingVibrateSteps = 0; + } + } finally { + synchronized (mLock) { + processVibratorCompleteCallbacksLocked(); + } + } + } + + @Nullable + private Step pollNext() { + synchronized (mLock) { + // Prioritize the steps resumed by a vibrator complete callback. + if (!mPendingOnVibratorCompleteSteps.isEmpty()) { + return mPendingOnVibratorCompleteSteps.poll(); + } + return mNextSteps.poll(); + } + } + + private void markWaitToProcessVibratorCallbacks() { + synchronized (mLock) { + mWaitToProcessVibratorCompleteCallbacks = true; + } + } + + /** + * Notify the step in this queue that should be resumed by the vibrator completion + * callback and keep it separate to be consumed by {@link #runNextStep()}. + * + * <p>This is a lightweight method that do not trigger any operation from {@link + * VibratorController}, so it can be called directly from a native callback. + * + * <p>This assumes only one of the next steps is waiting on this given vibrator, so the + * first step found will be resumed by this method, in no particular order. + */ + @GuardedBy("mLock") + private void processVibratorCompleteCallbacksLocked() { + mWaitToProcessVibratorCompleteCallbacks = false; + while (!mCompletionNotifiedVibrators.isEmpty()) { + int vibratorId = mCompletionNotifiedVibrators.poll(); + Iterator<Step> it = mNextSteps.iterator(); + while (it.hasNext()) { + Step step = it.next(); + if (step.acceptVibratorCompleteCallback(vibratorId)) { + it.remove(); + mPendingOnVibratorCompleteSteps.offer(step); + break; + } + } + } + } +} diff --git a/services/core/java/com/android/server/vibrator/VibrationThread.java b/services/core/java/com/android/server/vibrator/VibrationThread.java index 1f1f40b8121d..f2cd8c3ec3f8 100644 --- a/services/core/java/com/android/server/vibrator/VibrationThread.java +++ b/services/core/java/com/android/server/vibrator/VibrationThread.java @@ -16,59 +16,23 @@ package com.android.server.vibrator; -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.hardware.vibrator.IVibratorManager; import android.os.CombinedVibration; import android.os.IBinder; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; -import android.os.SystemClock; import android.os.Trace; -import android.os.VibrationEffect; -import android.os.VibratorInfo; -import android.os.WorkSource; -import android.os.vibrator.PrebakedSegment; -import android.os.vibrator.PrimitiveSegment; -import android.os.vibrator.RampSegment; -import android.os.vibrator.StepSegment; -import android.os.vibrator.VibrationEffectSegment; import android.util.Slog; import android.util.SparseArray; -import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.IBatteryStats; -import com.android.internal.util.FrameworkStatsLog; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; import java.util.NoSuchElementException; -import java.util.PriorityQueue; -import java.util.Queue; /** Plays a {@link Vibration} in dedicated thread. */ final class VibrationThread extends Thread implements IBinder.DeathRecipient { - private static final String TAG = "VibrationThread"; - private static final boolean DEBUG = false; - - /** - * Extra timeout added to the end of each vibration step to ensure it finishes even when - * vibrator callbacks are lost. - */ - private static final long CALLBACKS_EXTRA_TIMEOUT = 1_000; - - /** Threshold to prevent the ramp off steps from trying to set extremely low amplitudes. */ - private static final float RAMP_OFF_AMPLITUDE_MIN = 1e-3f; - - /** Fixed large duration used to note repeating vibrations to {@link IBatteryStats}. */ - private static final long BATTERY_STATS_REPEATING_VIBRATION_DURATION = 5_000; - - private static final List<Step> EMPTY_STEP_LIST = new ArrayList<>(); + static final String TAG = "VibrationThread"; + static final boolean DEBUG = false; /** Calls into VibratorManager functionality needed for playing a {@link Vibration}. */ interface VibratorManagerHooks { @@ -94,6 +58,15 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { void cancelSyncedVibration(); /** + * Record that a vibrator was turned on, and may remain on for the specified duration, + * on behalf of the given uid. + */ + void noteVibratorOn(int uid, long duration); + + /** Record that a vibrator was turned off, on behalf of the given uid. */ + void noteVibratorOff(int uid); + + /** * Tell the manager that the currently active vibration has completed its vibration, from * the perspective of the Effect. However, the VibrationThread may still be continuing with * cleanup tasks, and should not be given new work until {@link #onVibrationThreadReleased} @@ -108,16 +81,10 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { void onVibrationThreadReleased(); } - private final Object mLock = new Object(); - private final WorkSource mWorkSource; private final PowerManager.WakeLock mWakeLock; - private final IBatteryStats mBatteryStatsService; - private final VibrationSettings mVibrationSettings; - private final DeviceVibrationEffectAdapter mDeviceEffectAdapter; - private final Vibration mVibration; - private final VibratorManagerHooks mVibratorManagerHooks; - private final SparseArray<VibratorController> mVibrators = new SparseArray<>(); - private final StepQueue mStepQueue = new StepQueue(); + private final VibrationThread.VibratorManagerHooks mVibratorManagerHooks; + + private final VibrationStepConductor mStepConductor; private volatile boolean mStop; private volatile boolean mForceStop; @@ -127,30 +94,20 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { VibrationThread(Vibration vib, VibrationSettings vibrationSettings, DeviceVibrationEffectAdapter effectAdapter, SparseArray<VibratorController> availableVibrators, PowerManager.WakeLock wakeLock, - IBatteryStats batteryStatsService, VibratorManagerHooks vibratorManagerHooks) { - mVibration = vib; - mVibrationSettings = vibrationSettings; - mDeviceEffectAdapter = effectAdapter; + VibratorManagerHooks vibratorManagerHooks) { mVibratorManagerHooks = vibratorManagerHooks; - mWorkSource = new WorkSource(mVibration.uid); mWakeLock = wakeLock; - mBatteryStatsService = batteryStatsService; - - CombinedVibration effect = vib.getEffect(); - for (int i = 0; i < availableVibrators.size(); i++) { - if (effect.hasVibrator(availableVibrators.keyAt(i))) { - mVibrators.put(availableVibrators.keyAt(i), availableVibrators.valueAt(i)); - } - } + mStepConductor = new VibrationStepConductor(vib, vibrationSettings, effectAdapter, + availableVibrators, vibratorManagerHooks); } Vibration getVibration() { - return mVibration; + return mStepConductor.getVibration(); } @VisibleForTesting SparseArray<VibratorController> getVibrators() { - return mVibrators; + return mStepConductor.getVibrators(); } @Override @@ -179,7 +136,7 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { /** Runs the VibrationThread ensuring that the wake lock is acquired and released. */ private void runWithWakeLock() { - mWakeLock.setWorkSource(mWorkSource); + mWakeLock.setWorkSource(mStepConductor.getWorkSource()); mWakeLock.acquire(); try { runWithWakeLockAndDeathLink(); @@ -193,8 +150,9 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { * Called from within runWithWakeLock. */ private void runWithWakeLockAndDeathLink() { + IBinder vibrationBinderToken = mStepConductor.getVibration().token; try { - mVibration.token.linkToDeath(this, 0); + vibrationBinderToken.linkToDeath(this, 0); } catch (RemoteException e) { Slog.e(TAG, "Error linking vibration to token death", e); clientVibrationCompleteIfNotAlready(Vibration.Status.IGNORED_ERROR_TOKEN); @@ -206,7 +164,7 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { playVibration(); } finally { try { - mVibration.token.unlinkToDeath(this, 0); + vibrationBinderToken.unlinkToDeath(this, 0); } catch (NoSuchElementException e) { Slog.wtf(TAG, "Failed to unlink token", e); } @@ -220,11 +178,11 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { return; } mStop = true; - synchronized (mLock) { + synchronized (mStepConductor.mLock) { if (DEBUG) { Slog.d(TAG, "Vibration cancelled"); } - mLock.notify(); + mStepConductor.mLock.notify(); } } @@ -235,36 +193,22 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { return; } mStop = mForceStop = true; - synchronized (mLock) { + synchronized (mStepConductor.mLock) { if (DEBUG) { Slog.d(TAG, "Vibration cancelled immediately"); } - mLock.notify(); + mStepConductor.mLock.notify(); } } /** Notify current vibration that a synced step has completed. */ public void syncedVibrationComplete() { - synchronized (mLock) { - if (DEBUG) { - Slog.d(TAG, "Synced vibration complete reported by vibrator manager"); - } - for (int i = 0; i < mVibrators.size(); i++) { - mStepQueue.notifyVibratorComplete(mVibrators.keyAt(i)); - } - mLock.notify(); - } + mStepConductor.notifySyncedVibrationComplete(); } /** Notify current vibration that a step has completed on given vibrator. */ public void vibratorComplete(int vibratorId) { - synchronized (mLock) { - if (DEBUG) { - Slog.d(TAG, "Vibration complete reported by vibrator " + vibratorId); - } - mStepQueue.notifyVibratorComplete(vibratorId); - mLock.notify(); - } + mStepConductor.notifyVibratorComplete(vibratorId); } // Indicate that the vibration is complete. This can be called multiple times only for @@ -273,52 +217,55 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { private void clientVibrationCompleteIfNotAlready(Vibration.Status completedStatus) { if (!mCalledVibrationCompleteCallback) { mCalledVibrationCompleteCallback = true; - mVibratorManagerHooks.onVibrationCompleted(mVibration.id, completedStatus); + mVibratorManagerHooks.onVibrationCompleted( + mStepConductor.getVibration().id, completedStatus); } } private void playVibration() { Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "playVibration"); try { - CombinedVibration.Sequential sequentialEffect = toSequential(mVibration.getEffect()); + CombinedVibration.Sequential sequentialEffect = + toSequential(mStepConductor.getVibration().getEffect()); final int sequentialEffectSize = sequentialEffect.getEffects().size(); - mStepQueue.initializeForEffect(sequentialEffect); + mStepConductor.initializeForEffect(sequentialEffect); - while (!mStepQueue.isFinished()) { + while (!mStepConductor.isFinished()) { long waitMillisBeforeNextStep; - synchronized (mLock) { - waitMillisBeforeNextStep = mStepQueue.getWaitMillisBeforeNextStep(); + synchronized (mStepConductor.mLock) { + waitMillisBeforeNextStep = mStepConductor.getWaitMillisBeforeNextStepLocked(); if (waitMillisBeforeNextStep > 0) { try { - mLock.wait(waitMillisBeforeNextStep); + mStepConductor.mLock.wait(waitMillisBeforeNextStep); } catch (InterruptedException e) { } } } // Only run the next vibration step if we didn't have to wait in this loop. - // If we waited then the queue may have changed, so loop again to re-evaluate - // the scheduling of the queue top element. + // If we waited then the queue may have changed or the wait could have been + // interrupted by a cancel call, so loop again to re-evaluate the scheduling of + // the queue top element. if (waitMillisBeforeNextStep <= 0) { if (DEBUG) { Slog.d(TAG, "Play vibration consuming next step..."); } // Run the step without holding the main lock, to avoid HAL interactions from // blocking the thread. - mStepQueue.runNextStep(); + mStepConductor.runNextStep(); } Vibration.Status status = mStop ? Vibration.Status.CANCELLED - : mStepQueue.calculateVibrationStatus(sequentialEffectSize); + : mStepConductor.calculateVibrationStatus(sequentialEffectSize); if (status != Vibration.Status.RUNNING && !mCalledVibrationCompleteCallback) { // First time vibration stopped running, start clean-up tasks and notify // callback immediately. clientVibrationCompleteIfNotAlready(status); if (status == Vibration.Status.CANCELLED) { - mStepQueue.cancel(); + mStepConductor.cancel(); } } if (mForceStop) { // Cancel every step and stop playing them right away, even clean-up steps. - mStepQueue.cancelImmediately(); + mStepConductor.cancelImmediately(); clientVibrationCompleteIfNotAlready(Vibration.Status.CANCELLED); break; } @@ -328,61 +275,6 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { } } - private void noteVibratorOn(long duration) { - try { - if (duration <= 0) { - return; - } - if (duration == Long.MAX_VALUE) { - // Repeating duration has started. Report a fixed duration here, noteVibratorOff - // should be called when this is cancelled. - duration = BATTERY_STATS_REPEATING_VIBRATION_DURATION; - } - mBatteryStatsService.noteVibratorOn(mVibration.uid, duration); - FrameworkStatsLog.write_non_chained(FrameworkStatsLog.VIBRATOR_STATE_CHANGED, - mVibration.uid, null, FrameworkStatsLog.VIBRATOR_STATE_CHANGED__STATE__ON, - duration); - } catch (RemoteException e) { - } - } - - private void noteVibratorOff() { - try { - mBatteryStatsService.noteVibratorOff(mVibration.uid); - FrameworkStatsLog.write_non_chained(FrameworkStatsLog.VIBRATOR_STATE_CHANGED, - mVibration.uid, null, FrameworkStatsLog.VIBRATOR_STATE_CHANGED__STATE__OFF, - /* duration= */ 0); - } catch (RemoteException e) { - } - } - - @Nullable - private SingleVibratorStep nextVibrateStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int segmentIndex, long vibratorOffTimeout) { - if (segmentIndex >= effect.getSegments().size()) { - segmentIndex = effect.getRepeatIndex(); - } - if (segmentIndex < 0) { - // No more segments to play, last step is to complete the vibration on this vibrator. - return new EffectCompleteStep(startTime, /* cancelled= */ false, controller, - vibratorOffTimeout); - } - - VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); - if (segment instanceof PrebakedSegment) { - return new PerformStep(startTime, controller, effect, segmentIndex, vibratorOffTimeout); - } - if (segment instanceof PrimitiveSegment) { - return new ComposePrimitivesStep(startTime, controller, effect, segmentIndex, - vibratorOffTimeout); - } - if (segment instanceof RampSegment) { - return new ComposePwleStep(startTime, controller, effect, segmentIndex, - vibratorOffTimeout); - } - return new AmplitudeStep(startTime, controller, effect, segmentIndex, vibratorOffTimeout); - } - private static CombinedVibration.Sequential toSequential(CombinedVibration effect) { if (effect instanceof CombinedVibration.Sequential) { return (CombinedVibration.Sequential) effect; @@ -392,1268 +284,4 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { .combine(); } - /** Queue for {@link Step Steps}, sorted by their start time. */ - private final class StepQueue { - @GuardedBy("mLock") - private final PriorityQueue<Step> mNextSteps = new PriorityQueue<>(); - @GuardedBy("mLock") - private final Queue<Step> mPendingOnVibratorCompleteSteps = new LinkedList<>(); - @GuardedBy("mLock") - private final Queue<Integer> mCompletionNotifiedVibrators = new LinkedList<>(); - - @GuardedBy("mLock") - private int mPendingVibrateSteps; - @GuardedBy("mLock") - private int mConsumedStartVibrateSteps; - @GuardedBy("mLock") - private int mSuccessfulVibratorOnSteps; - @GuardedBy("mLock") - private boolean mWaitToProcessVibratorCompleteCallbacks; - - public void initializeForEffect(@NonNull CombinedVibration.Sequential vibration) { - synchronized (mLock) { - mPendingVibrateSteps++; - mNextSteps.offer(new StartVibrateStep(vibration)); - } - } - - public boolean isFinished() { - synchronized (mLock) { - return mPendingOnVibratorCompleteSteps.isEmpty() && mNextSteps.isEmpty(); - } - } - - /** - * Calculate the {@link Vibration.Status} based on the current queue state and the expected - * number of {@link StartVibrateStep} to be played. - */ - public Vibration.Status calculateVibrationStatus(int expectedStartVibrateSteps) { - synchronized (mLock) { - if (mPendingVibrateSteps > 0 - || mConsumedStartVibrateSteps < expectedStartVibrateSteps) { - return Vibration.Status.RUNNING; - } - if (mSuccessfulVibratorOnSteps > 0) { - return Vibration.Status.FINISHED; - } - // If no step was able to turn the vibrator ON successfully. - return Vibration.Status.IGNORED_UNSUPPORTED; - } - } - - /** Returns the time in millis to wait before calling {@link #runNextStep()}. */ - @GuardedBy("VibrationThread.this.mLock") - public long getWaitMillisBeforeNextStep() { - if (!mPendingOnVibratorCompleteSteps.isEmpty()) { - // Steps resumed by vibrator complete callback should be played right away. - return 0; - } - Step nextStep = mNextSteps.peek(); - return nextStep == null ? 0 : nextStep.calculateWaitTime(); - } - - /** - * Play and remove the step at the top of this queue, and also adds the next steps generated - * to be played next. - */ - public void runNextStep() { - // Vibrator callbacks should wait until the polled step is played and the next steps are - // added back to the queue, so they can handle the callback. - markWaitToProcessVibratorCallbacks(); - try { - Step nextStep = pollNext(); - if (nextStep != null) { - // This might turn on the vibrator and have a HAL latency. Execute this outside - // any lock to avoid blocking other interactions with the thread. - List<Step> nextSteps = nextStep.play(); - synchronized (mLock) { - if (nextStep.getVibratorOnDuration() > 0) { - mSuccessfulVibratorOnSteps++; - } - if (nextStep instanceof StartVibrateStep) { - mConsumedStartVibrateSteps++; - } - if (!nextStep.isCleanUp()) { - mPendingVibrateSteps--; - } - for (int i = 0; i < nextSteps.size(); i++) { - mPendingVibrateSteps += nextSteps.get(i).isCleanUp() ? 0 : 1; - } - mNextSteps.addAll(nextSteps); - } - } - } finally { - synchronized (mLock) { - processVibratorCompleteCallbacks(); - } - } - } - - /** - * Notify the vibrator completion. - * - * <p>This is a lightweight method that do not trigger any operation from {@link - * VibratorController}, so it can be called directly from a native callback. - */ - @GuardedBy("mLock") - public void notifyVibratorComplete(int vibratorId) { - mCompletionNotifiedVibrators.offer(vibratorId); - if (!mWaitToProcessVibratorCompleteCallbacks) { - // No step is being played or cancelled now, process the callback right away. - processVibratorCompleteCallbacks(); - } - } - - /** - * Cancel the current queue, replacing all remaining steps with respective clean-up steps. - * - * <p>This will remove all steps and replace them with respective - * {@link Step#cancel()}. - */ - public void cancel() { - // Vibrator callbacks should wait until all steps from the queue are properly cancelled - // and clean up steps are added back to the queue, so they can handle the callback. - markWaitToProcessVibratorCallbacks(); - try { - List<Step> cleanUpSteps = new ArrayList<>(); - Step step; - while ((step = pollNext()) != null) { - cleanUpSteps.addAll(step.cancel()); - } - synchronized (mLock) { - // All steps generated by Step.cancel() should be clean-up steps. - mPendingVibrateSteps = 0; - mNextSteps.addAll(cleanUpSteps); - } - } finally { - synchronized (mLock) { - processVibratorCompleteCallbacks(); - } - } - } - - /** - * Cancel the current queue immediately, clearing all remaining steps and skipping clean-up. - * - * <p>This will remove and trigger {@link Step#cancelImmediately()} in all steps, in order. - */ - public void cancelImmediately() { - // Vibrator callbacks should wait until all steps from the queue are properly cancelled. - markWaitToProcessVibratorCallbacks(); - try { - Step step; - while ((step = pollNext()) != null) { - // This might turn off the vibrator and have a HAL latency. Execute this outside - // any lock to avoid blocking other interactions with the thread. - step.cancelImmediately(); - } - synchronized (mLock) { - mPendingVibrateSteps = 0; - } - } finally { - synchronized (mLock) { - processVibratorCompleteCallbacks(); - } - } - } - - @Nullable - private Step pollNext() { - synchronized (mLock) { - // Prioritize the steps resumed by a vibrator complete callback. - if (!mPendingOnVibratorCompleteSteps.isEmpty()) { - return mPendingOnVibratorCompleteSteps.poll(); - } - return mNextSteps.poll(); - } - } - - private void markWaitToProcessVibratorCallbacks() { - synchronized (mLock) { - mWaitToProcessVibratorCompleteCallbacks = true; - } - } - - /** - * Notify the step in this queue that should be resumed by the vibrator completion - * callback and keep it separate to be consumed by {@link #runNextStep()}. - * - * <p>This is a lightweight method that do not trigger any operation from {@link - * VibratorController}, so it can be called directly from a native callback. - * - * <p>This assumes only one of the next steps is waiting on this given vibrator, so the - * first step found will be resumed by this method, in no particular order. - */ - @GuardedBy("mLock") - private void processVibratorCompleteCallbacks() { - mWaitToProcessVibratorCompleteCallbacks = false; - while (!mCompletionNotifiedVibrators.isEmpty()) { - int vibratorId = mCompletionNotifiedVibrators.poll(); - Iterator<Step> it = mNextSteps.iterator(); - while (it.hasNext()) { - Step step = it.next(); - if (step.acceptVibratorCompleteCallback(vibratorId)) { - it.remove(); - mPendingOnVibratorCompleteSteps.offer(step); - break; - } - } - } - } - } - - /** - * Represent a single step for playing a vibration. - * - * <p>Every step has a start time, which can be used to apply delays between steps while - * executing them in sequence. - */ - private abstract class Step implements Comparable<Step> { - public final long startTime; - - Step(long startTime) { - this.startTime = startTime; - } - - /** - * Returns true if this step is a clean up step and not part of a {@link VibrationEffect} or - * {@link CombinedVibration}. - */ - public boolean isCleanUp() { - return false; - } - - /** Play this step, returning a (possibly empty) list of next steps. */ - @NonNull - public abstract List<Step> play(); - - /** - * Cancel this pending step and return a (possibly empty) list of clean-up steps that should - * be played to gracefully cancel this step. - */ - @NonNull - public abstract List<Step> cancel(); - - /** Cancel this pending step immediately, skipping any clean-up. */ - public abstract void cancelImmediately(); - - /** - * Return the duration the vibrator was turned on when this step was played. - * - * @return A positive duration that the vibrator was turned on for by this step; - * Zero if the segment is not supported, the step was not played yet or vibrator was never - * turned on by this step; A negative value if the vibrator call has failed. - */ - public long getVibratorOnDuration() { - return 0; - } - - /** - * Return true to run this step right after a vibrator has notified vibration completed, - * used to resume steps waiting on vibrator callbacks with a timeout. - */ - public boolean acceptVibratorCompleteCallback(int vibratorId) { - return false; - } - - /** - * Returns the time in millis to wait before playing this step. This is performed - * while holding the queue lock, so should not rely on potentially slow operations. - */ - public long calculateWaitTime() { - if (startTime == Long.MAX_VALUE) { - // This step don't have a predefined start time, it's just marked to be executed - // after all other steps have finished. - return 0; - } - return Math.max(0, startTime - SystemClock.uptimeMillis()); - } - - @Override - public int compareTo(Step o) { - return Long.compare(startTime, o.startTime); - } - } - - /** - * Starts a sync vibration. - * - * <p>If this step has successfully started playing a vibration on any vibrator, it will always - * add a {@link FinishVibrateStep} to the queue, to be played after all vibrators have finished - * all their individual steps. - * - * <p>If this step does not start any vibrator, it will add a {@link StartVibrateStep} if the - * sequential effect isn't finished yet. - */ - private final class StartVibrateStep extends Step { - public final CombinedVibration.Sequential sequentialEffect; - public final int currentIndex; - - private long mVibratorsOnMaxDuration; - - StartVibrateStep(CombinedVibration.Sequential effect) { - this(SystemClock.uptimeMillis() + effect.getDelays().get(0), effect, /* index= */ 0); - } - - StartVibrateStep(long startTime, CombinedVibration.Sequential effect, int index) { - super(startTime); - sequentialEffect = effect; - currentIndex = index; - } - - @Override - public long getVibratorOnDuration() { - return mVibratorsOnMaxDuration; - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "StartVibrateStep"); - List<Step> nextSteps = new ArrayList<>(); - mVibratorsOnMaxDuration = -1; - try { - if (DEBUG) { - Slog.d(TAG, "StartVibrateStep for effect #" + currentIndex); - } - CombinedVibration effect = sequentialEffect.getEffects().get(currentIndex); - DeviceEffectMap effectMapping = createEffectToVibratorMapping(effect); - if (effectMapping == null) { - // Unable to map effects to vibrators, ignore this step. - return nextSteps; - } - - mVibratorsOnMaxDuration = startVibrating(effectMapping, nextSteps); - noteVibratorOn(mVibratorsOnMaxDuration); - } finally { - if (mVibratorsOnMaxDuration >= 0) { - // It least one vibrator was started then add a finish step to wait for all - // active vibrators to finish their individual steps before going to the next. - // Otherwise this step was ignored so just go to the next one. - Step nextStep = - mVibratorsOnMaxDuration > 0 ? new FinishVibrateStep(this) : nextStep(); - if (nextStep != null) { - nextSteps.add(nextStep); - } - } - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - return nextSteps; - } - - @Override - public List<Step> cancel() { - return EMPTY_STEP_LIST; - } - - @Override - public void cancelImmediately() { - } - - /** - * Create the next {@link StartVibrateStep} to play this sequential effect, starting at the - * time this method is called, or null if sequence is complete. - */ - @Nullable - private Step nextStep() { - int nextIndex = currentIndex + 1; - if (nextIndex >= sequentialEffect.getEffects().size()) { - return null; - } - long nextEffectDelay = sequentialEffect.getDelays().get(nextIndex); - long nextStartTime = SystemClock.uptimeMillis() + nextEffectDelay; - return new StartVibrateStep(nextStartTime, sequentialEffect, nextIndex); - } - - /** Create a mapping of individual {@link VibrationEffect} to available vibrators. */ - @Nullable - private DeviceEffectMap createEffectToVibratorMapping( - CombinedVibration effect) { - if (effect instanceof CombinedVibration.Mono) { - return new DeviceEffectMap((CombinedVibration.Mono) effect); - } - if (effect instanceof CombinedVibration.Stereo) { - return new DeviceEffectMap((CombinedVibration.Stereo) effect); - } - return null; - } - - /** - * Starts playing effects on designated vibrators, in sync. - * - * @param effectMapping The {@link CombinedVibration} mapped to this device vibrators - * @param nextSteps An output list to accumulate the future {@link Step Steps} created - * by this method, typically one for each vibrator that has - * successfully started vibrating on this step. - * @return The duration, in millis, of the {@link CombinedVibration}. Repeating - * waveforms return {@link Long#MAX_VALUE}. Zero or negative values indicate the vibrators - * have ignored all effects. - */ - private long startVibrating(DeviceEffectMap effectMapping, List<Step> nextSteps) { - int vibratorCount = effectMapping.size(); - if (vibratorCount == 0) { - // No effect was mapped to any available vibrator. - return 0; - } - - SingleVibratorStep[] steps = new SingleVibratorStep[vibratorCount]; - long vibrationStartTime = SystemClock.uptimeMillis(); - for (int i = 0; i < vibratorCount; i++) { - steps[i] = nextVibrateStep(vibrationStartTime, - mVibrators.get(effectMapping.vibratorIdAt(i)), - effectMapping.effectAt(i), - /* segmentIndex= */ 0, /* vibratorOffTimeout= */ 0); - } - - if (steps.length == 1) { - // No need to prepare and trigger sync effects on a single vibrator. - return startVibrating(steps[0], nextSteps); - } - - // This synchronization of vibrators should be executed one at a time, even if we are - // vibrating different sets of vibrators in parallel. The manager can only prepareSynced - // one set of vibrators at a time. - synchronized (mLock) { - boolean hasPrepared = false; - boolean hasTriggered = false; - long maxDuration = 0; - try { - hasPrepared = mVibratorManagerHooks.prepareSyncedVibration( - effectMapping.getRequiredSyncCapabilities(), - effectMapping.getVibratorIds()); - - for (SingleVibratorStep step : steps) { - long duration = startVibrating(step, nextSteps); - if (duration < 0) { - // One vibrator has failed, fail this entire sync attempt. - return maxDuration = -1; - } - maxDuration = Math.max(maxDuration, duration); - } - - // Check if sync was prepared and if any step was accepted by a vibrator, - // otherwise there is nothing to trigger here. - if (hasPrepared && maxDuration > 0) { - hasTriggered = mVibratorManagerHooks.triggerSyncedVibration(mVibration.id); - } - return maxDuration; - } finally { - if (hasPrepared && !hasTriggered) { - // Trigger has failed or all steps were ignored by the vibrators. - mVibratorManagerHooks.cancelSyncedVibration(); - nextSteps.clear(); - } else if (maxDuration < 0) { - // Some vibrator failed without being prepared so other vibrators might be - // active. Cancel and remove every pending step from output list. - for (int i = nextSteps.size() - 1; i >= 0; i--) { - nextSteps.remove(i).cancelImmediately(); - } - } - } - } - } - - private long startVibrating(SingleVibratorStep step, List<Step> nextSteps) { - nextSteps.addAll(step.play()); - long stepDuration = step.getVibratorOnDuration(); - if (stepDuration < 0) { - // Step failed, so return negative duration to propagate failure. - return stepDuration; - } - // Return the longest estimation for the entire effect. - return Math.max(stepDuration, step.effect.getDuration()); - } - } - - /** - * Finish a sync vibration started by a {@link StartVibrateStep}. - * - * <p>This only plays after all active vibrators steps have finished, and adds a {@link - * StartVibrateStep} to the queue if the sequential effect isn't finished yet. - */ - private final class FinishVibrateStep extends Step { - public final StartVibrateStep startedStep; - - FinishVibrateStep(StartVibrateStep startedStep) { - super(Long.MAX_VALUE); // No predefined startTime, just wait for all steps in the queue. - this.startedStep = startedStep; - } - - @Override - public boolean isCleanUp() { - // This step only notes that all the vibrators has been turned off. - return true; - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "FinishVibrateStep"); - try { - if (DEBUG) { - Slog.d(TAG, "FinishVibrateStep for effect #" + startedStep.currentIndex); - } - noteVibratorOff(); - Step nextStep = startedStep.nextStep(); - return nextStep == null ? EMPTY_STEP_LIST : Arrays.asList(nextStep); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - - @Override - public List<Step> cancel() { - cancelImmediately(); - return EMPTY_STEP_LIST; - } - - @Override - public void cancelImmediately() { - noteVibratorOff(); - } - } - - /** - * Represent a step on a single vibrator that plays one or more segments from a - * {@link VibrationEffect.Composed} effect. - */ - private abstract class SingleVibratorStep extends Step { - public final VibratorController controller; - public final VibrationEffect.Composed effect; - public final int segmentIndex; - public final long vibratorOffTimeout; - - long mVibratorOnResult; - boolean mVibratorCompleteCallbackReceived; - - /** - * @param startTime The time to schedule this step in the {@link StepQueue}. - * @param controller The vibrator that is playing the effect. - * @param effect The effect being played in this step. - * @param index The index of the next segment to be played by this step - * @param vibratorOffTimeout The time the vibrator is expected to complete any previous - * vibration and turn off. This is used to allow this step to be - * triggered when the completion callback is received, and can - * be used play effects back-to-back. - */ - SingleVibratorStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int index, long vibratorOffTimeout) { - super(startTime); - this.controller = controller; - this.effect = effect; - this.segmentIndex = index; - this.vibratorOffTimeout = vibratorOffTimeout; - } - - @Override - public long getVibratorOnDuration() { - return mVibratorOnResult; - } - - @Override - public boolean acceptVibratorCompleteCallback(int vibratorId) { - boolean isSameVibrator = controller.getVibratorInfo().getId() == vibratorId; - mVibratorCompleteCallbackReceived |= isSameVibrator; - // Only activate this step if a timeout was set to wait for the vibration to complete, - // otherwise we are waiting for the correct time to play the next step. - return isSameVibrator && (vibratorOffTimeout > SystemClock.uptimeMillis()); - } - - @Override - public List<Step> cancel() { - return Arrays.asList(new EffectCompleteStep(SystemClock.uptimeMillis(), - /* cancelled= */ true, controller, vibratorOffTimeout)); - } - - @Override - public void cancelImmediately() { - if (vibratorOffTimeout > SystemClock.uptimeMillis()) { - // Vibrator might be running from previous steps, so turn it off while canceling. - stopVibrating(); - } - } - - void stopVibrating() { - if (DEBUG) { - Slog.d(TAG, "Turning off vibrator " + controller.getVibratorInfo().getId()); - } - controller.off(); - } - - void changeAmplitude(float amplitude) { - if (DEBUG) { - Slog.d(TAG, "Amplitude changed on vibrator " + controller.getVibratorInfo().getId() - + " to " + amplitude); - } - controller.setAmplitude(amplitude); - } - - /** Return the {@link #nextVibrateStep} with same timings, only jumping the segments. */ - public List<Step> skipToNextSteps(int segmentsSkipped) { - return nextSteps(startTime, vibratorOffTimeout, segmentsSkipped); - } - - /** - * Return the {@link #nextVibrateStep} with same start and off timings calculated from - * {@link #getVibratorOnDuration()}, jumping all played segments. - * - * <p>This method has same behavior as {@link #skipToNextSteps(int)} when the vibrator - * result is non-positive, meaning the vibrator has either ignored or failed to turn on. - */ - public List<Step> nextSteps(int segmentsPlayed) { - if (mVibratorOnResult <= 0) { - // Vibration was not started, so just skip the played segments and keep timings. - return skipToNextSteps(segmentsPlayed); - } - long nextStartTime = SystemClock.uptimeMillis() + mVibratorOnResult; - long nextVibratorOffTimeout = nextStartTime + CALLBACKS_EXTRA_TIMEOUT; - return nextSteps(nextStartTime, nextVibratorOffTimeout, segmentsPlayed); - } - - /** - * Return the {@link #nextVibrateStep} with given start and off timings, which might be - * calculated independently, jumping all played segments. - * - * <p>This should be used when the vibrator on/off state is not responsible for the steps - * execution timings, e.g. while playing the vibrator amplitudes. - */ - public List<Step> nextSteps(long nextStartTime, long vibratorOffTimeout, - int segmentsPlayed) { - Step nextStep = nextVibrateStep(nextStartTime, controller, effect, - segmentIndex + segmentsPlayed, vibratorOffTimeout); - return nextStep == null ? EMPTY_STEP_LIST : Arrays.asList(nextStep); - } - } - - /** - * Represent a step turn the vibrator on with a single prebaked effect. - * - * <p>This step automatically falls back by replacing the prebaked segment with - * {@link VibrationSettings#getFallbackEffect(int)}, if available. - */ - private final class PerformStep extends SingleVibratorStep { - - PerformStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int index, long vibratorOffTimeout) { - // This step should wait for the last vibration to finish (with the timeout) and for the - // intended step start time (to respect the effect delays). - super(Math.max(startTime, vibratorOffTimeout), controller, effect, index, - vibratorOffTimeout); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "PerformStep"); - try { - VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); - if (!(segment instanceof PrebakedSegment)) { - Slog.w(TAG, "Ignoring wrong segment for a PerformStep: " + segment); - return skipToNextSteps(/* segmentsSkipped= */ 1); - } - - PrebakedSegment prebaked = (PrebakedSegment) segment; - if (DEBUG) { - Slog.d(TAG, "Perform " + VibrationEffect.effectIdToString( - prebaked.getEffectId()) + " on vibrator " - + controller.getVibratorInfo().getId()); - } - - VibrationEffect fallback = mVibration.getFallback(prebaked.getEffectId()); - mVibratorOnResult = controller.on(prebaked, mVibration.id); - - if (mVibratorOnResult == 0 && prebaked.shouldFallback() - && (fallback instanceof VibrationEffect.Composed)) { - if (DEBUG) { - Slog.d(TAG, "Playing fallback for effect " - + VibrationEffect.effectIdToString(prebaked.getEffectId())); - } - SingleVibratorStep fallbackStep = nextVibrateStep(startTime, controller, - replaceCurrentSegment((VibrationEffect.Composed) fallback), - segmentIndex, vibratorOffTimeout); - List<Step> fallbackResult = fallbackStep.play(); - // Update the result with the fallback result so this step is seamlessly - // replaced by the fallback to any outer application of this. - mVibratorOnResult = fallbackStep.getVibratorOnDuration(); - return fallbackResult; - } - - return nextSteps(/* segmentsPlayed= */ 1); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - - /** - * Replace segment at {@link #segmentIndex} in {@link #effect} with given fallback segments. - * - * @return a copy of {@link #effect} with replaced segment. - */ - private VibrationEffect.Composed replaceCurrentSegment(VibrationEffect.Composed fallback) { - List<VibrationEffectSegment> newSegments = new ArrayList<>(effect.getSegments()); - int newRepeatIndex = effect.getRepeatIndex(); - newSegments.remove(segmentIndex); - newSegments.addAll(segmentIndex, fallback.getSegments()); - if (segmentIndex < effect.getRepeatIndex()) { - newRepeatIndex += fallback.getSegments().size() - 1; - } - return new VibrationEffect.Composed(newSegments, newRepeatIndex); - } - } - - /** - * Represent a step turn the vibrator on using a composition of primitives. - * - * <p>This step will use the maximum supported number of consecutive segments of type - * {@link PrimitiveSegment} starting at the current index. - */ - private final class ComposePrimitivesStep extends SingleVibratorStep { - - ComposePrimitivesStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int index, long vibratorOffTimeout) { - // This step should wait for the last vibration to finish (with the timeout) and for the - // intended step start time (to respect the effect delays). - super(Math.max(startTime, vibratorOffTimeout), controller, effect, index, - vibratorOffTimeout); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "ComposePrimitivesStep"); - try { - // Load the next PrimitiveSegments to create a single compose call to the vibrator, - // limited to the vibrator composition maximum size. - int limit = controller.getVibratorInfo().getCompositionSizeMax(); - int segmentCount = limit > 0 - ? Math.min(effect.getSegments().size(), segmentIndex + limit) - : effect.getSegments().size(); - List<PrimitiveSegment> primitives = new ArrayList<>(); - for (int i = segmentIndex; i < segmentCount; i++) { - VibrationEffectSegment segment = effect.getSegments().get(i); - if (segment instanceof PrimitiveSegment) { - primitives.add((PrimitiveSegment) segment); - } else { - break; - } - } - - if (primitives.isEmpty()) { - Slog.w(TAG, "Ignoring wrong segment for a ComposePrimitivesStep: " - + effect.getSegments().get(segmentIndex)); - return skipToNextSteps(/* segmentsSkipped= */ 1); - } - - if (DEBUG) { - Slog.d(TAG, "Compose " + primitives + " primitives on vibrator " - + controller.getVibratorInfo().getId()); - } - mVibratorOnResult = controller.on( - primitives.toArray(new PrimitiveSegment[primitives.size()]), - mVibration.id); - - return nextSteps(/* segmentsPlayed= */ primitives.size()); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - } - - /** - * Represent a step turn the vibrator on using a composition of PWLE segments. - * - * <p>This step will use the maximum supported number of consecutive segments of type - * {@link StepSegment} or {@link RampSegment} starting at the current index. - */ - private final class ComposePwleStep extends SingleVibratorStep { - - ComposePwleStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int index, long vibratorOffTimeout) { - // This step should wait for the last vibration to finish (with the timeout) and for the - // intended step start time (to respect the effect delays). - super(Math.max(startTime, vibratorOffTimeout), controller, effect, index, - vibratorOffTimeout); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "ComposePwleStep"); - try { - // Load the next RampSegments to create a single composePwle call to the vibrator, - // limited to the vibrator PWLE maximum size. - int limit = controller.getVibratorInfo().getPwleSizeMax(); - int segmentCount = limit > 0 - ? Math.min(effect.getSegments().size(), segmentIndex + limit) - : effect.getSegments().size(); - List<RampSegment> pwles = new ArrayList<>(); - for (int i = segmentIndex; i < segmentCount; i++) { - VibrationEffectSegment segment = effect.getSegments().get(i); - if (segment instanceof RampSegment) { - pwles.add((RampSegment) segment); - } else { - break; - } - } - - if (pwles.isEmpty()) { - Slog.w(TAG, "Ignoring wrong segment for a ComposePwleStep: " - + effect.getSegments().get(segmentIndex)); - return skipToNextSteps(/* segmentsSkipped= */ 1); - } - - if (DEBUG) { - Slog.d(TAG, "Compose " + pwles + " PWLEs on vibrator " - + controller.getVibratorInfo().getId()); - } - mVibratorOnResult = controller.on(pwles.toArray(new RampSegment[pwles.size()]), - mVibration.id); - - return nextSteps(/* segmentsPlayed= */ pwles.size()); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - } - - /** - * Represents a step to complete a {@link VibrationEffect}. - * - * <p>This runs right at the time the vibration is considered to end and will update the pending - * vibrators count. This can turn off the vibrator or slowly ramp it down to zero amplitude. - */ - private final class EffectCompleteStep extends SingleVibratorStep { - private final boolean mCancelled; - - EffectCompleteStep(long startTime, boolean cancelled, VibratorController controller, - long vibratorOffTimeout) { - super(startTime, controller, /* effect= */ null, /* index= */ -1, vibratorOffTimeout); - mCancelled = cancelled; - } - - @Override - public boolean isCleanUp() { - // If the vibration was cancelled then this is just a clean up to ramp off the vibrator. - // Otherwise this step is part of the vibration. - return mCancelled; - } - - @Override - public List<Step> cancel() { - if (mCancelled) { - // Double cancelling will just turn off the vibrator right away. - return Arrays.asList(new OffStep(SystemClock.uptimeMillis(), controller)); - } - return super.cancel(); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "EffectCompleteStep"); - try { - if (DEBUG) { - Slog.d(TAG, "Running " + (mCancelled ? "cancel" : "complete") + " vibration" - + " step on vibrator " + controller.getVibratorInfo().getId()); - } - if (mVibratorCompleteCallbackReceived) { - // Vibration completion callback was received by this step, just turn if off - // and skip any clean-up. - stopVibrating(); - return EMPTY_STEP_LIST; - } - - float currentAmplitude = controller.getCurrentAmplitude(); - long remainingOnDuration = - vibratorOffTimeout - CALLBACKS_EXTRA_TIMEOUT - SystemClock.uptimeMillis(); - long rampDownDuration = - Math.min(remainingOnDuration, mVibrationSettings.getRampDownDuration()); - long stepDownDuration = mVibrationSettings.getRampStepDuration(); - if (currentAmplitude < RAMP_OFF_AMPLITUDE_MIN - || rampDownDuration <= stepDownDuration) { - // No need to ramp down the amplitude, just wait to turn it off. - if (mCancelled) { - // Vibration is completing because it was cancelled, turn off right away. - stopVibrating(); - return EMPTY_STEP_LIST; - } else { - return Arrays.asList(new OffStep(vibratorOffTimeout, controller)); - } - } - - if (DEBUG) { - Slog.d(TAG, "Ramping down vibrator " + controller.getVibratorInfo().getId() - + " from amplitude " + currentAmplitude - + " for " + rampDownDuration + "ms"); - } - float amplitudeDelta = currentAmplitude / (rampDownDuration / stepDownDuration); - float amplitudeTarget = currentAmplitude - amplitudeDelta; - long newVibratorOffTimeout = mCancelled ? rampDownDuration : vibratorOffTimeout; - return Arrays.asList(new RampOffStep(startTime, amplitudeTarget, amplitudeDelta, - controller, newVibratorOffTimeout)); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - } - - /** Represents a step to ramp down the vibrator amplitude before turning it off. */ - private final class RampOffStep extends SingleVibratorStep { - private final float mAmplitudeTarget; - private final float mAmplitudeDelta; - - RampOffStep(long startTime, float amplitudeTarget, float amplitudeDelta, - VibratorController controller, long vibratorOffTimeout) { - super(startTime, controller, /* effect= */ null, /* index= */ -1, vibratorOffTimeout); - mAmplitudeTarget = amplitudeTarget; - mAmplitudeDelta = amplitudeDelta; - } - - @Override - public boolean isCleanUp() { - return true; - } - - @Override - public List<Step> cancel() { - return Arrays.asList(new OffStep(SystemClock.uptimeMillis(), controller)); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "RampOffStep"); - try { - if (DEBUG) { - long latency = SystemClock.uptimeMillis() - startTime; - Slog.d(TAG, "Ramp down the vibrator amplitude, step with " - + latency + "ms latency."); - } - if (mVibratorCompleteCallbackReceived) { - // Vibration completion callback was received by this step, just turn if off - // and skip the rest of the steps to ramp down the vibrator amplitude. - stopVibrating(); - return EMPTY_STEP_LIST; - } - - changeAmplitude(mAmplitudeTarget); - - float newAmplitudeTarget = mAmplitudeTarget - mAmplitudeDelta; - if (newAmplitudeTarget < RAMP_OFF_AMPLITUDE_MIN) { - // Vibrator amplitude cannot go further down, just turn it off. - return Arrays.asList(new OffStep(vibratorOffTimeout, controller)); - } - return Arrays.asList(new RampOffStep( - startTime + mVibrationSettings.getRampStepDuration(), newAmplitudeTarget, - mAmplitudeDelta, controller, vibratorOffTimeout)); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - } - - /** - * Represents a step to turn the vibrator off. - * - * <p>This runs after a timeout on the expected time the vibrator should have finished playing, - * and can be brought forward by vibrator complete callbacks. - */ - private final class OffStep extends SingleVibratorStep { - - OffStep(long startTime, VibratorController controller) { - super(startTime, controller, /* effect= */ null, /* index= */ -1, startTime); - } - - @Override - public boolean isCleanUp() { - return true; - } - - @Override - public List<Step> cancel() { - return Arrays.asList(new OffStep(SystemClock.uptimeMillis(), controller)); - } - - @Override - public void cancelImmediately() { - stopVibrating(); - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "OffStep"); - try { - stopVibrating(); - return EMPTY_STEP_LIST; - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - } - - /** - * Represents a step to turn the vibrator on and change its amplitude. - * - * <p>This step ignores vibration completion callbacks and control the vibrator on/off state - * and amplitude to simulate waveforms represented by a sequence of {@link StepSegment}. - */ - private final class AmplitudeStep extends SingleVibratorStep { - private long mNextOffTime; - - AmplitudeStep(long startTime, VibratorController controller, - VibrationEffect.Composed effect, int index, long vibratorOffTimeout) { - // This step has a fixed startTime coming from the timings of the waveform it's playing. - super(startTime, controller, effect, index, vibratorOffTimeout); - mNextOffTime = vibratorOffTimeout; - } - - @Override - public boolean acceptVibratorCompleteCallback(int vibratorId) { - if (controller.getVibratorInfo().getId() == vibratorId) { - mVibratorCompleteCallbackReceived = true; - mNextOffTime = SystemClock.uptimeMillis(); - } - // Timings are tightly controlled here, so only trigger this step if the vibrator was - // supposed to be ON but has completed prematurely, to turn it back on as soon as - // possible. - return mNextOffTime < startTime && controller.getCurrentAmplitude() > 0; - } - - @Override - public List<Step> play() { - Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "AmplitudeStep"); - try { - long now = SystemClock.uptimeMillis(); - long latency = now - startTime; - if (DEBUG) { - Slog.d(TAG, "Running amplitude step with " + latency + "ms latency."); - } - - if (mVibratorCompleteCallbackReceived && latency < 0) { - // This step was run early because the vibrator turned off prematurely. - // Turn it back on and return this same step to run at the exact right time. - mNextOffTime = turnVibratorBackOn(/* remainingDuration= */ -latency); - return Arrays.asList(new AmplitudeStep(startTime, controller, effect, - segmentIndex, mNextOffTime)); - } - - VibrationEffectSegment segment = effect.getSegments().get(segmentIndex); - if (!(segment instanceof StepSegment)) { - Slog.w(TAG, "Ignoring wrong segment for a AmplitudeStep: " + segment); - return skipToNextSteps(/* segmentsSkipped= */ 1); - } - - StepSegment stepSegment = (StepSegment) segment; - if (stepSegment.getDuration() == 0) { - // Skip waveform entries with zero timing. - return skipToNextSteps(/* segmentsSkipped= */ 1); - } - - float amplitude = stepSegment.getAmplitude(); - if (amplitude == 0) { - if (vibratorOffTimeout > now) { - // Amplitude cannot be set to zero, so stop the vibrator. - stopVibrating(); - mNextOffTime = now; - } - } else { - if (startTime >= mNextOffTime) { - // Vibrator is OFF. Turn vibrator back on for the duration of another - // cycle before setting the amplitude. - long onDuration = getVibratorOnDuration(effect, segmentIndex); - if (onDuration > 0) { - mVibratorOnResult = startVibrating(onDuration); - mNextOffTime = now + onDuration + CALLBACKS_EXTRA_TIMEOUT; - } - } - changeAmplitude(amplitude); - } - - // Use original startTime to avoid propagating latencies to the waveform. - long nextStartTime = startTime + segment.getDuration(); - return nextSteps(nextStartTime, mNextOffTime, /* segmentsPlayed= */ 1); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); - } - } - - private long turnVibratorBackOn(long remainingDuration) { - long onDuration = getVibratorOnDuration(effect, segmentIndex); - if (onDuration <= 0) { - // Vibrator is supposed to go back off when this step starts, so just leave it off. - return vibratorOffTimeout; - } - onDuration += remainingDuration; - float expectedAmplitude = controller.getCurrentAmplitude(); - mVibratorOnResult = startVibrating(onDuration); - if (mVibratorOnResult > 0) { - // Set the amplitude back to the value it was supposed to be playing at. - changeAmplitude(expectedAmplitude); - } - return SystemClock.uptimeMillis() + onDuration + CALLBACKS_EXTRA_TIMEOUT; - } - - private long startVibrating(long duration) { - if (DEBUG) { - Slog.d(TAG, "Turning on vibrator " + controller.getVibratorInfo().getId() + " for " - + duration + "ms"); - } - return controller.on(duration, mVibration.id); - } - - /** - * Get the duration the vibrator will be on for a waveform, starting at {@code startIndex} - * until the next time it's vibrating amplitude is zero or a different type of segment is - * found. - */ - private long getVibratorOnDuration(VibrationEffect.Composed effect, int startIndex) { - List<VibrationEffectSegment> segments = effect.getSegments(); - int segmentCount = segments.size(); - int repeatIndex = effect.getRepeatIndex(); - int i = startIndex; - long timing = 0; - while (i < segmentCount) { - VibrationEffectSegment segment = segments.get(i); - if (!(segment instanceof StepSegment) - || ((StepSegment) segment).getAmplitude() == 0) { - break; - } - timing += segment.getDuration(); - i++; - if (i == segmentCount && repeatIndex >= 0) { - i = repeatIndex; - // prevent infinite loop - repeatIndex = -1; - } - if (i == startIndex) { - // The repeating waveform keeps the vibrator ON all the time. Use a minimum - // of 1s duration to prevent short patterns from turning the vibrator ON too - // frequently. - return Math.max(timing, 1000); - } - } - if (i == segmentCount && effect.getRepeatIndex() < 0) { - // Vibration ending at non-zero amplitude, add extra timings to ramp down after - // vibration is complete. - timing += mVibrationSettings.getRampDownDuration(); - } - return timing; - } - } - - /** - * Map a {@link CombinedVibration} to the vibrators available on the device. - * - * <p>This contains the logic to find the capabilities required from {@link IVibratorManager} to - * play all of the effects in sync. - */ - private final class DeviceEffectMap { - private final SparseArray<VibrationEffect.Composed> mVibratorEffects; - private final int[] mVibratorIds; - private final long mRequiredSyncCapabilities; - - DeviceEffectMap(CombinedVibration.Mono mono) { - mVibratorEffects = new SparseArray<>(mVibrators.size()); - mVibratorIds = new int[mVibrators.size()]; - for (int i = 0; i < mVibrators.size(); i++) { - int vibratorId = mVibrators.keyAt(i); - VibratorInfo vibratorInfo = mVibrators.valueAt(i).getVibratorInfo(); - VibrationEffect effect = mDeviceEffectAdapter.apply(mono.getEffect(), vibratorInfo); - if (effect instanceof VibrationEffect.Composed) { - mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect); - mVibratorIds[i] = vibratorId; - } - } - mRequiredSyncCapabilities = calculateRequiredSyncCapabilities(mVibratorEffects); - } - - DeviceEffectMap(CombinedVibration.Stereo stereo) { - SparseArray<VibrationEffect> stereoEffects = stereo.getEffects(); - mVibratorEffects = new SparseArray<>(); - for (int i = 0; i < stereoEffects.size(); i++) { - int vibratorId = stereoEffects.keyAt(i); - if (mVibrators.contains(vibratorId)) { - VibratorInfo vibratorInfo = mVibrators.valueAt(i).getVibratorInfo(); - VibrationEffect effect = mDeviceEffectAdapter.apply( - stereoEffects.valueAt(i), vibratorInfo); - if (effect instanceof VibrationEffect.Composed) { - mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect); - } - } - } - mVibratorIds = new int[mVibratorEffects.size()]; - for (int i = 0; i < mVibratorEffects.size(); i++) { - mVibratorIds[i] = mVibratorEffects.keyAt(i); - } - mRequiredSyncCapabilities = calculateRequiredSyncCapabilities(mVibratorEffects); - } - - /** - * Return the number of vibrators mapped to play the {@link CombinedVibration} on this - * device. - */ - public int size() { - return mVibratorIds.length; - } - - /** - * Return all capabilities required to play the {@link CombinedVibration} in - * between calls to {@link IVibratorManager#prepareSynced} and - * {@link IVibratorManager#triggerSynced}. - */ - public long getRequiredSyncCapabilities() { - return mRequiredSyncCapabilities; - } - - /** Return all vibrator ids mapped to play the {@link CombinedVibration}. */ - public int[] getVibratorIds() { - return mVibratorIds; - } - - /** Return the id of the vibrator at given index. */ - public int vibratorIdAt(int index) { - return mVibratorEffects.keyAt(index); - } - - /** Return the {@link VibrationEffect} at given index. */ - public VibrationEffect.Composed effectAt(int index) { - return mVibratorEffects.valueAt(index); - } - - /** - * Return all capabilities required from the {@link IVibratorManager} to prepare and - * trigger all given effects in sync. - * - * @return {@link IVibratorManager#CAP_SYNC} together with all required - * IVibratorManager.CAP_PREPARE_* and IVibratorManager.CAP_MIXED_TRIGGER_* capabilities. - */ - private long calculateRequiredSyncCapabilities( - SparseArray<VibrationEffect.Composed> effects) { - long prepareCap = 0; - for (int i = 0; i < effects.size(); i++) { - VibrationEffectSegment firstSegment = effects.valueAt(i).getSegments().get(0); - if (firstSegment instanceof StepSegment) { - prepareCap |= IVibratorManager.CAP_PREPARE_ON; - } else if (firstSegment instanceof PrebakedSegment) { - prepareCap |= IVibratorManager.CAP_PREPARE_PERFORM; - } else if (firstSegment instanceof PrimitiveSegment) { - prepareCap |= IVibratorManager.CAP_PREPARE_COMPOSE; - } - } - int triggerCap = 0; - if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_ON)) { - triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_ON; - } - if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_PERFORM)) { - triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_PERFORM; - } - if (requireMixedTriggerCapability(prepareCap, IVibratorManager.CAP_PREPARE_COMPOSE)) { - triggerCap |= IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE; - } - return IVibratorManager.CAP_SYNC | prepareCap | triggerCap; - } - - /** - * Return true if {@code prepareCapabilities} contains this {@code capability} mixed with - * different ones, requiring a mixed trigger capability from the vibrator manager for - * syncing all effects. - */ - private boolean requireMixedTriggerCapability(long prepareCapabilities, long capability) { - return (prepareCapabilities & capability) != 0 - && (prepareCapabilities & ~capability) != 0; - } - } } diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java index 63f3af3f3095..01f9d0b94879 100644 --- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java +++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java @@ -42,6 +42,7 @@ import android.os.IVibratorStateListener; import android.os.Looper; import android.os.PowerManager; import android.os.Process; +import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.ShellCallback; @@ -60,6 +61,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IBatteryStats; import com.android.internal.util.DumpUtils; +import com.android.internal.util.FrameworkStatsLog; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -88,6 +90,9 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { VibrationAttributes.FLAG_BYPASS_INTERRUPTION_POLICY | VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF; + /** Fixed large duration used to note repeating vibrations to {@link IBatteryStats}. */ + private static final long BATTERY_STATS_REPEATING_VIBRATION_DURATION = 5_000; + /** Lifecycle responsible for initializing this class at the right system server phases. */ public static class Lifecycle extends SystemService { private VibratorManagerService mService; @@ -201,8 +206,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { mSystemUiPackage = LocalServices.getService(PackageManagerInternal.class) .getSystemUiServiceComponent().getPackageName(); - mBatteryStatsService = IBatteryStats.Stub.asInterface(ServiceManager.getService( - BatteryStats.SERVICE_NAME)); + mBatteryStatsService = injector.getBatteryStatsService(); mAppOps = mContext.getSystemService(AppOpsManager.class); @@ -634,7 +638,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { } VibrationThread vibThread = new VibrationThread(vib, mVibrationSettings, - mDeviceVibrationEffectAdapter, mVibrators, mWakeLock, mBatteryStatsService, + mDeviceVibrationEffectAdapter, mVibrators, mWakeLock, mVibrationThreadCallbacks); if (mCurrentVibration == null) { @@ -1105,6 +1109,11 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { return new Handler(looper); } + IBatteryStats getBatteryStatsService() { + return IBatteryStats.Stub.asInterface(ServiceManager.getService( + BatteryStats.SERVICE_NAME)); + } + VibratorController createVibratorController(int vibratorId, VibratorController.OnVibrationCompleteListener listener) { return new VibratorController(vibratorId, listener); @@ -1141,6 +1150,36 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { } @Override + public void noteVibratorOn(int uid, long duration) { + try { + if (duration <= 0) { + return; + } + if (duration == Long.MAX_VALUE) { + // Repeating duration has started. Report a fixed duration here, noteVibratorOff + // should be called when this is cancelled. + duration = BATTERY_STATS_REPEATING_VIBRATION_DURATION; + } + mBatteryStatsService.noteVibratorOn(uid, duration); + FrameworkStatsLog.write_non_chained(FrameworkStatsLog.VIBRATOR_STATE_CHANGED, + uid, null, FrameworkStatsLog.VIBRATOR_STATE_CHANGED__STATE__ON, + duration); + } catch (RemoteException e) { + } + } + + @Override + public void noteVibratorOff(int uid) { + try { + mBatteryStatsService.noteVibratorOff(uid); + FrameworkStatsLog.write_non_chained(FrameworkStatsLog.VIBRATOR_STATE_CHANGED, + uid, null, FrameworkStatsLog.VIBRATOR_STATE_CHANGED__STATE__OFF, + /* duration= */ 0); + } catch (RemoteException e) { + } + } + + @Override public void onVibrationCompleted(long vibrationId, Vibration.Status status) { if (DEBUG) { Slog.d(TAG, "Vibration " + vibrationId + " finished with status " + status); diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 87c8a79f874a..2da29876da7a 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -62,8 +62,8 @@ import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.BitmapRegionDecoder; import android.graphics.Color; +import android.graphics.ImageDecoder; import android.graphics.Rect; import android.graphics.RectF; import android.hardware.display.DisplayManager; @@ -199,6 +199,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub static final String WALLPAPER_LOCK_ORIG = "wallpaper_lock_orig"; static final String WALLPAPER_LOCK_CROP = "wallpaper_lock"; static final String WALLPAPER_INFO = "wallpaper_info.xml"; + private static final String RECORD_FILE = "decode_record"; + private static final String RECORD_LOCK_FILE = "decode_lock_record"; // All the various per-user state files we need to be aware of private static final String[] sPerUserFiles = new String[] { @@ -689,8 +691,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } if (DEBUG) { - // This is just a quick estimation, may be smaller than it is. - long estimateSize = options.outWidth * options.outHeight * 4; + long estimateSize = (long) options.outWidth * options.outHeight * 4; Slog.v(TAG, "Null crop of new wallpaper, estimate size=" + estimateSize + ", success=" + success); } @@ -699,9 +700,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub FileOutputStream f = null; BufferedOutputStream bos = null; try { - BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance( - wallpaper.wallpaperFile.getAbsolutePath(), false); - // This actually downsamples only by powers of two, but that's okay; we do // a proper scaling blit later. This is to minimize transient RAM use. // We calculate the largest power-of-two under the actual ratio rather than @@ -755,8 +753,24 @@ public class WallpaperManagerService extends IWallpaperManager.Stub Slog.v(TAG, " maxTextureSize=" + GLHelper.getMaxTextureSize()); } - Bitmap cropped = decoder.decodeRegion(cropHint, options); - decoder.recycle(); + //Create a record file and will delete if ImageDecoder work well. + final String recordName = + (wallpaper.wallpaperFile.getName().equals(WALLPAPER) + ? RECORD_FILE : RECORD_LOCK_FILE); + final File record = new File(getWallpaperDir(wallpaper.userId), recordName); + record.createNewFile(); + Slog.v(TAG, "record path =" + record.getPath() + + ", record name =" + record.getName()); + + final ImageDecoder.Source srcData = + ImageDecoder.createSource(wallpaper.wallpaperFile); + final int sampleSize = scale; + Bitmap cropped = ImageDecoder.decodeBitmap(srcData, (decoder, info, src) -> { + decoder.setTargetSampleSize(sampleSize); + decoder.setCrop(estimateCrop); + }); + + record.delete(); if (cropped == null) { Slog.e(TAG, "Could not decode new wallpaper"); @@ -1819,6 +1833,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub new UserSwitchObserver() { @Override public void onUserSwitching(int newUserId, IRemoteCallback reply) { + errorCheck(newUserId); switchUser(newUserId, reply); } }, TAG); @@ -1856,6 +1871,14 @@ public class WallpaperManagerService extends IWallpaperManager.Stub @Override public void onBootPhase(int phase) { + // If someone set too large jpg file as wallpaper, system_server may be killed by lmk in + // generateCrop(), so we create a file in generateCrop() before ImageDecoder starts working + // and delete this file after ImageDecoder finishing. If the specific file exists, that + // means ImageDecoder can't handle the original wallpaper file, in order to avoid + // system_server restart again and again and rescue party will trigger factory reset, + // so we reset default wallpaper in case system_server is trapped into a restart loop. + errorCheck(UserHandle.USER_SYSTEM); + if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { systemReady(); } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) { @@ -1863,6 +1886,38 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } } + private static final HashMap<Integer, String> sWallpaperType = new HashMap<Integer, String>() { + { + put(FLAG_SYSTEM, RECORD_FILE); + put(FLAG_LOCK, RECORD_LOCK_FILE); + } + }; + + private void errorCheck(int userID) { + sWallpaperType.forEach((type, filename) -> { + final File record = new File(getWallpaperDir(userID), filename); + if (record.exists()) { + Slog.w(TAG, "User:" + userID + ", wallpaper tyep = " + type + + ", wallpaper fail detect!! reset to default wallpaper"); + clearWallpaperData(userID, type); + record.delete(); + } + }); + } + + private void clearWallpaperData(int userID, int wallpaperType) { + final WallpaperData wallpaper = new WallpaperData(userID, getWallpaperDir(userID), + (wallpaperType == FLAG_LOCK) ? WALLPAPER_LOCK_ORIG : WALLPAPER, + (wallpaperType == FLAG_LOCK) ? WALLPAPER_LOCK_CROP : WALLPAPER_CROP); + if (wallpaper.sourceExists()) { + wallpaper.wallpaperFile.delete(); + } + if (wallpaper.cropExists()) { + wallpaper.cropFile.delete(); + } + + } + @Override public void onUnlockUser(final int userId) { synchronized (mLock) { diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index a8dd856c2191..a32d45c82e31 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -68,6 +68,7 @@ import static com.android.server.am.MemoryStatUtil.readMemoryStatFromFilesystem; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_METRICS; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; +import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_RECENTS_ANIM; import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_TIMEOUT; import static com.android.server.wm.EventLogTags.WM_ACTIVITY_LAUNCH_TIME; @@ -102,6 +103,7 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.FrameworkStatsLog; +import com.android.internal.util.LatencyTracker; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.LocalServices; @@ -742,6 +744,12 @@ class ActivityMetricsLogger { info.mReason = activityToReason.valueAt(index); info.mLoggedTransitionStarting = true; if (info.mIsDrawn) { + if (info.mReason == APP_TRANSITION_RECENTS_ANIM) { + final LatencyTracker latencyTracker = r.mWmService.mLatencyTracker; + final int duration = info.mSourceEventDelayMs + info.mCurrentTransitionDelayMs; + mLoggerHandler.post(() -> latencyTracker.logAction( + LatencyTracker.ACTION_START_RECENTS_ANIMATION, duration)); + } done(false /* abort */, info, "notifyTransitionStarting drawn", timestampNs); } } diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 0b965c37a2ba..220381dcf947 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -52,6 +52,7 @@ import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER; import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT; import static android.window.TransitionInfo.FLAG_TRANSLUCENT; +import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_RECENTS_ANIM; import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SPLASH_SCREEN; import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_WINDOWS_DRAWN; @@ -612,8 +613,6 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe handleNonAppWindowsInTransition(dc, mType, mFlags); - reportStartReasonsToLogger(); - // The callback is only populated for custom activity-level client animations sendRemoteCallback(mClientAnimationStartCallback); @@ -702,6 +701,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } mSyncId = -1; mOverrideOptions = null; + + reportStartReasonsToLogger(); } /** @@ -894,11 +895,15 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe for (int i = mParticipants.size() - 1; i >= 0; --i) { ActivityRecord r = mParticipants.valueAt(i).asActivityRecord(); if (r == null || !r.mVisibleRequested) continue; + int transitionReason = APP_TRANSITION_WINDOWS_DRAWN; // At this point, r is "ready", but if it's not "ALL ready" then it is probably only // ready due to starting-window. - reasons.put(r, (r.mStartingData instanceof SplashScreenStartingData - && !r.mLastAllReadyAtSync) - ? APP_TRANSITION_SPLASH_SCREEN : APP_TRANSITION_WINDOWS_DRAWN); + if (r.mStartingData instanceof SplashScreenStartingData && !r.mLastAllReadyAtSync) { + transitionReason = APP_TRANSITION_SPLASH_SCREEN; + } else if (r.isActivityTypeHomeOrRecents() && isTransientLaunch(r)) { + transitionReason = APP_TRANSITION_RECENTS_ANIM; + } + reasons.put(r, transitionReason); } mController.mAtm.mTaskSupervisor.getActivityMetricsLogger().notifyTransitionStarting( reasons); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5b1021eefc0a..709f885db776 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -200,6 +200,7 @@ import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.PowerSaveState; import android.os.RemoteCallback; +import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; @@ -288,6 +289,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.IResultReceiver; import com.android.internal.policy.IKeyguardDismissCallback; +import com.android.internal.policy.IKeyguardLockedStateListener; import com.android.internal.policy.IShortcutService; import com.android.internal.policy.KeyInterceptionInfo; import com.android.internal.protolog.ProtoLogImpl; @@ -460,6 +462,10 @@ public class WindowManagerService extends IWindowManager.Stub final private KeyguardDisableHandler mKeyguardDisableHandler; + private final RemoteCallbackList<IKeyguardLockedStateListener> mKeyguardLockedStateListeners = + new RemoteCallbackList<>(); + private boolean mDispatchedKeyguardLockedState = false; + // VR Vr2d Display Id. int mVr2dDisplayId = INVALID_DISPLAY; boolean mVrModeEnabled = false; @@ -3029,6 +3035,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onKeyguardShowingAndNotOccludedChanged() { mH.sendEmptyMessage(H.RECOMPUTE_FOCUS); + dispatchKeyguardLockedStateState(); } @Override @@ -3218,6 +3225,50 @@ public class WindowManagerService extends IWindowManager.Stub } } + @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) + @Override + public void addKeyguardLockedStateListener(IKeyguardLockedStateListener listener) { + enforceSubscribeToKeyguardLockedStatePermission(); + boolean registered = mKeyguardLockedStateListeners.register(listener); + if (!registered) { + Slog.w(TAG, "Failed to register listener: " + listener); + } + } + + @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) + @Override + public void removeKeyguardLockedStateListener(IKeyguardLockedStateListener listener) { + enforceSubscribeToKeyguardLockedStatePermission(); + mKeyguardLockedStateListeners.unregister(listener); + } + + private void enforceSubscribeToKeyguardLockedStatePermission() { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE, + Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE + + " permission required to read keyguard visibility"); + } + + private void dispatchKeyguardLockedStateState() { + mH.post(() -> { + final boolean isKeyguardLocked = mPolicy.isKeyguardShowing(); + if (mDispatchedKeyguardLockedState == isKeyguardLocked) { + return; + } + final int n = mKeyguardLockedStateListeners.beginBroadcast(); + for (int i = 0; i < n; i++) { + try { + mKeyguardLockedStateListeners.getBroadcastItem(i).onKeyguardLockedStateChanged( + isKeyguardLocked); + } catch (RemoteException e) { + // Handled by the RemoteCallbackList. + } + } + mKeyguardLockedStateListeners.finishBroadcast(); + mDispatchedKeyguardLockedState = isKeyguardLocked; + }); + } + @Override public void setSwitchingUser(boolean switching) { if (!checkCallingPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, diff --git a/services/core/java/com/android/server/wm/WindowOrientationListener.java b/services/core/java/com/android/server/wm/WindowOrientationListener.java index a967ea8fbf8c..de87ab9dcce0 100644 --- a/services/core/java/com/android/server/wm/WindowOrientationListener.java +++ b/services/core/java/com/android/server/wm/WindowOrientationListener.java @@ -1167,6 +1167,10 @@ public abstract class WindowOrientationListener { if (mRotationResolverService == null) { mRotationResolverService = LocalServices.getService( RotationResolverInternal.class); + if (mRotationResolverService == null) { + finalizeRotation(reportedRotation); + return; + } } String packageName = null; diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 33e97aa5eaf2..5aa3dfea3ea4 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -1999,9 +1999,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mOwners.load(); setDeviceOwnershipSystemPropertyLocked(); findOwnerComponentIfNecessaryLocked(); - - // TODO PO may not have a class name either due to b/17652534. Address that too. - updateDeviceOwnerLocked(); } } @@ -3142,23 +3139,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - private void updateDeviceOwnerLocked() { - long ident = mInjector.binderClearCallingIdentity(); - try { - // TODO This is to prevent DO from getting "clear data"ed, but it should also check the - // user id and also protect all other DAs too. - final ComponentName deviceOwnerComponent = mOwners.getDeviceOwnerComponent(); - if (deviceOwnerComponent != null) { - mInjector.getIActivityManager() - .updateDeviceOwner(deviceOwnerComponent.getPackageName()); - } - } catch (RemoteException e) { - // Not gonna happen. - } finally { - mInjector.binderRestoreCallingIdentity(ident); - } - } - static void validateQualityConstant(int quality) { switch (quality) { case PASSWORD_QUALITY_UNSPECIFIED: @@ -8590,7 +8570,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mOwners.setDeviceOwner(admin, ownerName, userId); mOwners.writeDeviceOwner(); - updateDeviceOwnerLocked(); setDeviceOwnershipSystemPropertyLocked(); //TODO(b/180371154): when provisionFullyManagedDevice is used in tests, remove this @@ -8951,7 +8930,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mOwners.clearDeviceOwner(); mOwners.writeDeviceOwner(); - updateDeviceOwnerLocked(); clearDeviceOwnerUserRestriction(UserHandle.of(userId)); mInjector.securityLogSetLoggingEnabledProperty(false); diff --git a/services/midi/java/com/android/server/midi/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java index 2d082e157692..bcdbc5dd9657 100644 --- a/services/midi/java/com/android/server/midi/MidiService.java +++ b/services/midi/java/com/android/server/midi/MidiService.java @@ -768,7 +768,6 @@ public class MidiService extends IMidiManager.Stub { synchronized (mDevicesByInfo) { for (Device device : mDevicesByInfo.values()) { if (device.isUidAllowed(uid)) { - deviceInfos.add(device.getDeviceInfo()); // UMP devices have protocols that are not PROTOCOL_UNKNOWN if (transport == MidiManager.TRANSPORT_UNIVERSAL_MIDI_PACKETS) { if (device.getDeviceInfo().getDefaultProtocol() diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt index cd2d0fce6691..83ccabf03935 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt @@ -238,6 +238,7 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag AndroidPackage::isVendor, AndroidPackage::isVisibleToInstantApps, AndroidPackage::isVmSafeMode, + AndroidPackage::isLeavingSharedUid, AndroidPackage::isResetEnabledSettingsOnAppDataCleared, AndroidPackage::getMaxAspectRatio, AndroidPackage::getMinAspectRatio, diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java index d2358a08624d..023608c68ee3 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -1167,7 +1167,14 @@ public class GameManagerServiceTests { startUser(gameManagerService, USER_ID_1); gameManagerService.setGameMode( mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1); - GameState gameState = new GameState(isLoading, GameState.MODE_NONE); + int testMode = GameState.MODE_NONE; + int testLabel = 99; + int testQuality = 123; + GameState gameState = new GameState(isLoading, testMode, testLabel, testQuality); + assertEquals(isLoading, gameState.isLoading()); + assertEquals(testMode, gameState.getMode()); + assertEquals(testLabel, gameState.getLabel()); + assertEquals(testQuality, gameState.getQuality()); gameManagerService.setGameState(mPackageName, gameState, USER_ID_1); mTestLooper.dispatchAll(); verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, isLoading); diff --git a/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java index 890a5495ef16..4e4854c6688d 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java @@ -333,6 +333,10 @@ public class LocationProviderManagerTest { @Test public void testGetLastLocation_Bypass() { + mInjector.getSettingsHelper().setIgnoreSettingsAllowlist( + new PackageTagsList.Builder().add( + IDENTITY.getPackageName()).build()); + assertThat(mManager.getLastLocation(new LastLocationRequest.Builder().build(), IDENTITY, PERMISSION_FINE)).isNull(); assertThat(mManager.getLastLocation( @@ -381,6 +385,14 @@ public class LocationProviderManagerTest { new LastLocationRequest.Builder().setLocationSettingsIgnored(true).build(), IDENTITY, PERMISSION_FINE)).isEqualTo( loc); + + mInjector.getSettingsHelper().setIgnoreSettingsAllowlist( + new PackageTagsList.Builder().build()); + mProvider.setProviderAllowed(false); + + assertThat(mManager.getLastLocation( + new LastLocationRequest.Builder().setLocationSettingsIgnored(true).build(), + IDENTITY, PERMISSION_FINE)).isNull(); } @Test diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java index f7b1dd5219d6..1464405cca08 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java @@ -39,8 +39,7 @@ import android.content.Context; import android.content.pm.ApexStagedEvent; import android.content.pm.IStagedApexObserver; import android.content.pm.PackageInstaller; -import android.content.pm.PackageInstaller.SessionInfo; -import android.content.pm.PackageInstaller.SessionInfo.SessionErrorCode; +import android.content.pm.PackageManager; import android.content.pm.StagedApexInfo; import android.os.SystemProperties; import android.os.storage.IStorageManager; @@ -158,10 +157,10 @@ public class StagingManagerTest { mStagingManager.restoreSessions(Arrays.asList(session1, session2), true); - assertThat(session1.getErrorCode()).isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + assertThat(session1.getErrorCode()).isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(session1.getErrorMessage()).isEqualTo("Build fingerprint has changed"); - assertThat(session2.getErrorCode()).isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + assertThat(session2.getErrorCode()).isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(session2.getErrorMessage()).isEqualTo("Build fingerprint has changed"); } @@ -247,12 +246,12 @@ public class StagingManagerTest { verify(mStorageManager, never()).abortChanges(eq("abort-staged-install"), eq(false)); assertThat(apexSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession.getErrorMessage()).isEqualTo("apexd did not know anything about a " + "staged session supposed to be activated"); assertThat(apkSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @@ -303,22 +302,22 @@ public class StagingManagerTest { verify(mStorageManager, never()).abortChanges(eq("abort-staged-install"), eq(false)); assertThat(apexSession1.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession1.getErrorMessage()).isEqualTo("APEX activation failed. " + "Error: Failed for test"); assertThat(apexSession2.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession2.getErrorMessage()).isEqualTo("Staged session 101 at boot didn't " + "activate nor fail. Marking it as failed anyway."); assertThat(apexSession3.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession3.getErrorMessage()).isEqualTo("apexd did not know anything about a " + "staged session supposed to be activated"); assertThat(apkSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @@ -351,12 +350,12 @@ public class StagingManagerTest { verify(mStorageManager, never()).abortChanges(eq("abort-staged-install"), eq(false)); assertThat(apexSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession.getErrorMessage()).isEqualTo("Staged session 1543 at boot didn't " + "activate nor fail. Marking it as failed anyway."); assertThat(apkSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @@ -445,11 +444,11 @@ public class StagingManagerTest { verify(mStorageManager, never()).abortChanges(eq("abort-staged-install"), eq(false)); assertThat(apexSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apexSession.getErrorMessage()).isEqualTo("Impossible state"); assertThat(apkSession.getErrorCode()) - .isEqualTo(SessionInfo.SESSION_ACTIVATION_FAILED); + .isEqualTo(PackageManager.INSTALL_ACTIVATION_FAILED); assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @@ -755,7 +754,7 @@ public class StagingManagerTest { /* isReady */ false, /* isFailed */ false, /* isApplied */false, - /* stagedSessionErrorCode */ PackageInstaller.SessionInfo.SESSION_NO_ERROR, + /* stagedSessionErrorCode */ PackageManager.INSTALL_UNKNOWN, /* stagedSessionErrorMessage */ "no error"); StagingManager.StagedSession stagedSession = spy(session.mStagedSession); @@ -775,7 +774,7 @@ public class StagingManagerTest { private boolean mIsReady = false; private boolean mIsApplied = false; private boolean mIsFailed = false; - private @SessionErrorCode int mErrorCode = -1; + private int mErrorCode = -1; private String mErrorMessage; private boolean mIsDestroyed = false; private int mParentSessionId = -1; @@ -828,7 +827,7 @@ public class StagingManagerTest { return this; } - private @SessionErrorCode int getErrorCode() { + private int getErrorCode() { return mErrorCode; } @@ -940,7 +939,7 @@ public class StagingManagerTest { } @Override - public void setSessionFailed(@SessionErrorCode int errorCode, String errorMessage) { + public void setSessionFailed(int errorCode, String errorMessage) { Preconditions.checkState(!mIsApplied, "Already marked as applied"); mIsFailed = true; mErrorCode = errorCode; diff --git a/services/tests/mockingservicestests/src/com/android/server/tare/ScribeTest.java b/services/tests/mockingservicestests/src/com/android/server/tare/ScribeTest.java index ab29e5903f02..c2cf2ff439ca 100644 --- a/services/tests/mockingservicestests/src/com/android/server/tare/ScribeTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/tare/ScribeTest.java @@ -109,6 +109,7 @@ public class ScribeTest { long lastReclamationTime = System.currentTimeMillis(); long remainingConsumableNarcs = 2000L; long consumptionLimit = 500_000L; + when(mIrs.getConsumptionLimitLocked()).thenReturn(consumptionLimit); Ledger ledger = mScribeUnderTest.getLedgerLocked(TEST_USER_ID, TEST_PACKAGE); ledger.recordTransaction(new Ledger.Transaction(0, 1000L, 1, null, 2000, 0)); @@ -119,8 +120,13 @@ public class ScribeTest { mScribeUnderTest.setConsumptionLimitLocked(consumptionLimit); mScribeUnderTest.adjustRemainingConsumableNarcsLocked( remainingConsumableNarcs - consumptionLimit); - mScribeUnderTest.writeImmediatelyForTesting(); + assertEquals(lastReclamationTime, mScribeUnderTest.getLastReclamationTimeLocked()); + assertEquals(remainingConsumableNarcs, + mScribeUnderTest.getRemainingConsumableNarcsLocked()); + assertEquals(consumptionLimit, mScribeUnderTest.getSatiatedConsumptionLimitLocked()); + + mScribeUnderTest.writeImmediatelyForTesting(); mScribeUnderTest.loadFromDiskLocked(); assertEquals(lastReclamationTime, mScribeUnderTest.getLastReclamationTimeLocked()); diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 2398e367ebfe..b601d14f1f58 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -1137,9 +1137,6 @@ public class DevicePolicyManagerTest extends DpmTestBase { mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; // Verify internal calls. - verify(getServices().iactivityManager, times(1)).updateDeviceOwner( - eq(admin1.getPackageName())); - verify(getServices().userManager, times(1)).setUserRestriction( eq(UserManager.DISALLOW_ADD_MANAGED_PROFILE), eq(true), eq(UserHandle.SYSTEM)); @@ -1205,9 +1202,6 @@ public class DevicePolicyManagerTest extends DpmTestBase { assertThat(dpm.getDeviceOwnerComponentOnAnyUser()).isEqualTo(admin1); // Verify internal calls. - verify(getServices().iactivityManager).updateDeviceOwner( - eq(admin1.getPackageName())); - verify(mContext.spiedContext).sendBroadcastAsUser( MockUtils.checkIntentAction(DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED), MockUtils.checkUserHandle(UserHandle.USER_SYSTEM)); @@ -1392,11 +1386,6 @@ public class DevicePolicyManagerTest extends DpmTestBase { setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID); dpm.setActiveAdmin(admin1, /* replace =*/ false); assertThat(dpm.setDeviceOwner(admin1, "owner-name", UserHandle.USER_SYSTEM)).isTrue(); - - // Verify internal calls. - verify(getServices().iactivityManager, times(1)).updateDeviceOwner( - eq(admin1.getPackageName())); - assertThat(dpm.getDeviceOwnerComponentOnAnyUser()).isEqualTo(admin1); dpm.addUserRestriction(admin1, UserManager.DISALLOW_ADD_USER); @@ -1501,11 +1490,6 @@ public class DevicePolicyManagerTest extends DpmTestBase { setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID); dpm.setActiveAdmin(admin1, /* replace =*/ false); assertThat(dpm.setDeviceOwner(admin1, "owner-name", UserHandle.USER_SYSTEM)).isTrue(); - - // Verify internal calls. - verify(getServices().iactivityManager, times(1)).updateDeviceOwner( - eq(admin1.getPackageName())); - assertThat(dpm.getDeviceOwnerComponentOnAnyUser()).isEqualTo(admin1); // Now call clear from the secondary user, which should throw. diff --git a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java index fefc42549688..86b6da0faad5 100644 --- a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java +++ b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java @@ -28,7 +28,9 @@ import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EV import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.verify; @@ -70,6 +72,8 @@ import java.util.Set; @RunWith(AndroidJUnit4.class) public class LogicalDisplayMapperTest { private static int sUniqueTestDisplayId = 0; + private static final int DEVICE_STATE_CLOSED = 0; + private static final int DEVICE_STATE_OPEN = 2; private DisplayDeviceRepository mDisplayDeviceRepo; private LogicalDisplayMapper mLogicalDisplayMapper; @@ -113,6 +117,7 @@ public class LogicalDisplayMapperTest { mPowerManager = new PowerManager(mContextMock, mIPowerManagerMock, mIThermalServiceMock, null); + when(mContextMock.getSystemServiceName(PowerManager.class)) .thenReturn(Context.POWER_SERVICE); when(mContextMock.getSystemService(PowerManager.class)).thenReturn(mPowerManager); @@ -120,6 +125,12 @@ public class LogicalDisplayMapperTest { when(mResourcesMock.getBoolean( com.android.internal.R.bool.config_supportsConcurrentInternalDisplays)) .thenReturn(true); + when(mResourcesMock.getIntArray( + com.android.internal.R.array.config_deviceStatesOnWhichToWakeUp)) + .thenReturn(new int[]{1, 2}); + when(mResourcesMock.getIntArray( + com.android.internal.R.array.config_deviceStatesOnWhichToSleep)) + .thenReturn(new int[]{0}); mLooper = new TestLooper(); mHandler = new Handler(mLooper.getLooper()); @@ -312,6 +323,49 @@ public class LogicalDisplayMapperTest { mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); } + @Test + public void testDeviceShouldBeWoken() { + assertTrue(mLogicalDisplayMapper.shouldDeviceBeWoken(DEVICE_STATE_OPEN, + DEVICE_STATE_CLOSED, + /* isInteractive= */false, + /* isBootCompleted= */true)); + } + + @Test + public void testDeviceShouldNotBeWoken() { + assertFalse(mLogicalDisplayMapper.shouldDeviceBeWoken(DEVICE_STATE_CLOSED, + DEVICE_STATE_OPEN, + /* isInteractive= */false, + /* isBootCompleted= */true)); + } + + @Test + public void testDeviceShouldBePutToSleep() { + assertTrue(mLogicalDisplayMapper.shouldDeviceBePutToSleep(DEVICE_STATE_CLOSED, + DEVICE_STATE_OPEN, + /* isOverrideActive= */false, + /* isInteractive= */true, + /* isBootCompleted= */true)); + } + + @Test + public void testDeviceShouldNotBePutToSleep() { + assertFalse(mLogicalDisplayMapper.shouldDeviceBePutToSleep(DEVICE_STATE_OPEN, + DEVICE_STATE_CLOSED, + /* isOverrideActive= */false, + /* isInteractive= */true, + /* isBootCompleted= */true)); + } + + @Test + public void testDeviceShouldNotBePutToSleepDifferentBaseState() { + assertFalse(mLogicalDisplayMapper.shouldDeviceBePutToSleep(DEVICE_STATE_CLOSED, + DEVICE_STATE_OPEN, + /* isOverrideActive= */true, + /* isInteractive= */true, + /* isBootCompleted= */true)); + } + ///////////////// // Helper Methods ///////////////// diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java index 3d21b74825f0..25ca1e2ada64 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageInstallerSessionTest.java @@ -24,6 +24,7 @@ import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import static org.xmlpull.v1.XmlPullParser.START_TAG; import android.content.pm.PackageInstaller; +import android.content.pm.PackageManager; import android.platform.test.annotations.Presubmit; import android.util.AtomicFile; import android.util.Slog; @@ -188,7 +189,7 @@ public class PackageInstallerSessionTest { /* isFailed */ false, /* isApplied */false, /* stagedSessionErrorCode */ - PackageInstaller.SessionInfo.SESSION_VERIFICATION_FAILED, + PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE, /* stagedSessionErrorMessage */ "some error"); } diff --git a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundHw2CompatTest.java b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundHw2CompatTest.java index 16cfd13b18c2..6bdd88c6a712 100644 --- a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundHw2CompatTest.java +++ b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundHw2CompatTest.java @@ -31,7 +31,6 @@ import static org.mockito.Mockito.atMost; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; 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; @@ -49,7 +48,6 @@ import android.os.IBinder; import android.os.IHwBinder; import android.os.IHwInterface; import android.os.RemoteException; -import android.system.OsConstants; import org.junit.After; import org.junit.Before; @@ -60,6 +58,7 @@ import org.mockito.ArgumentCaptor; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; @RunWith(Parameterized.class) public class SoundHw2CompatTest { @@ -240,14 +239,15 @@ public class SoundHw2CompatTest { (android.hardware.soundtrigger.V2_1.ISoundTriggerHw) mHalDriver; final int handle = 29; - ArgumentCaptor<android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel> modelCaptor = - ArgumentCaptor.forClass( - android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel.class); + AtomicReference<android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel> model = + new AtomicReference<>(); ArgumentCaptor<android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback> callbackCaptor = ArgumentCaptor.forClass( android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback.class); doAnswer(invocation -> { + // We need to dup the model, as it gets invalidated after the call returns. + model.set(TestUtil.dupModel_2_1(invocation.getArgument(0))); android.hardware.soundtrigger.V2_1.ISoundTriggerHw.loadSoundModel_2_1Callback resultCallback = invocation.getArgument(3); @@ -259,10 +259,9 @@ public class SoundHw2CompatTest { assertEquals(handle, mCanonical.loadSoundModel(TestUtil.createGenericSoundModel(), canonicalCallback)); - verify(driver_2_1).loadSoundModel_2_1(modelCaptor.capture(), callbackCaptor.capture(), - anyInt(), any()); + verify(driver_2_1).loadSoundModel_2_1(any(), callbackCaptor.capture(), anyInt(), any()); - TestUtil.validateGenericSoundModel_2_1(modelCaptor.getValue()); + TestUtil.validateGenericSoundModel_2_1(model.get()); validateCallback_2_1(callbackCaptor.getValue(), canonicalCallback); return handle; } @@ -355,14 +354,16 @@ public class SoundHw2CompatTest { (android.hardware.soundtrigger.V2_1.ISoundTriggerHw) mHalDriver; final int handle = 29; - ArgumentCaptor<android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel> - modelCaptor = ArgumentCaptor.forClass( - android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel.class); + AtomicReference<android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel> model = + new AtomicReference<>(); ArgumentCaptor<android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback> callbackCaptor = ArgumentCaptor.forClass( android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback.class); doAnswer(invocation -> { + // We need to dup the model, as it gets invalidated after the call returns. + model.set(TestUtil.dupPhraseModel_2_1(invocation.getArgument(0))); + android.hardware.soundtrigger.V2_1.ISoundTriggerHw.loadPhraseSoundModel_2_1Callback resultCallback = invocation.getArgument(3); @@ -374,10 +375,10 @@ public class SoundHw2CompatTest { assertEquals(handle, mCanonical.loadPhraseSoundModel(TestUtil.createPhraseSoundModel(), canonicalCallback)); - verify(driver_2_1).loadPhraseSoundModel_2_1(modelCaptor.capture(), callbackCaptor.capture(), - anyInt(), any()); + verify(driver_2_1).loadPhraseSoundModel_2_1(any(), callbackCaptor.capture(), anyInt(), + any()); - TestUtil.validatePhraseSoundModel_2_1(modelCaptor.getValue()); + TestUtil.validatePhraseSoundModel_2_1(model.get()); validateCallback_2_1(callbackCaptor.getValue(), canonicalCallback); return handle; } diff --git a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/TestUtil.java b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/TestUtil.java index e687a2adeb39..30b4a59b32b1 100644 --- a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/TestUtil.java +++ b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/TestUtil.java @@ -47,6 +47,7 @@ import android.os.HidlMemoryUtil; import android.os.ParcelFileDescriptor; import android.os.SharedMemory; +import java.io.IOException; import java.nio.ByteBuffer; import java.util.List; @@ -82,6 +83,19 @@ class TestUtil { HidlMemoryUtil.hidlMemoryToByteArray(model.data)); } + static android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel dupModel_2_1( + android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel model) { + android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel dup = + new android.hardware.soundtrigger.V2_1.ISoundTriggerHw.SoundModel(); + dup.header = model.header; + try { + dup.data = model.data.dup(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return dup; + } + private static void validateSoundModel_2_0( android.hardware.soundtrigger.V2_0.ISoundTriggerHw.SoundModel model, int type) { assertEquals(type, model.type); @@ -121,6 +135,15 @@ class TestUtil { validatePhrases_2_0(model.phrases); } + static android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel dupPhraseModel_2_1( + android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel model) { + android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel dup = + new android.hardware.soundtrigger.V2_1.ISoundTriggerHw.PhraseSoundModel(); + dup.common = dupModel_2_1(model.common); + dup.phrases = model.phrases; + return dup; + } + static void validatePhraseSoundModel_2_0( android.hardware.soundtrigger.V2_0.ISoundTriggerHw.PhraseSoundModel model) { validateSoundModel_2_0(model.common, @@ -190,31 +213,27 @@ class TestUtil { properties.maxKeyPhrases = 567; properties.maxUsers = 678; properties.recognitionModes = - RecognitionMode.VOICE_TRIGGER - | RecognitionMode.USER_IDENTIFICATION - | RecognitionMode.USER_AUTHENTICATION - | RecognitionMode.GENERIC_TRIGGER; + RecognitionMode.VOICE_TRIGGER | RecognitionMode.USER_IDENTIFICATION + | RecognitionMode.USER_AUTHENTICATION | RecognitionMode.GENERIC_TRIGGER; properties.captureTransition = true; properties.maxBufferMs = 321; properties.concurrentCapture = supportConcurrentCapture; properties.triggerInEvent = true; properties.powerConsumptionMw = 432; properties.supportedModelArch = "supportedModelArch"; - properties.audioCapabilities = AudioCapabilities.ECHO_CANCELLATION - | AudioCapabilities.NOISE_SUPPRESSION; + properties.audioCapabilities = + AudioCapabilities.ECHO_CANCELLATION | AudioCapabilities.NOISE_SUPPRESSION; return properties; } - static void validateDefaultProperties(Properties properties, - boolean supportConcurrentCapture) { + static void validateDefaultProperties(Properties properties, boolean supportConcurrentCapture) { validateDefaultProperties(properties, supportConcurrentCapture, AudioCapabilities.ECHO_CANCELLATION | AudioCapabilities.NOISE_SUPPRESSION, "supportedModelArch"); } - static void validateDefaultProperties(Properties properties, - boolean supportConcurrentCapture, @AudioCapabilities int audioCapabilities, - @NonNull String supportedModelArch) { + static void validateDefaultProperties(Properties properties, boolean supportConcurrentCapture, + @AudioCapabilities int audioCapabilities, @NonNull String supportedModelArch) { assertEquals("implementor", properties.implementor); assertEquals("description", properties.description); assertEquals(123, properties.version); @@ -222,10 +241,9 @@ class TestUtil { assertEquals(456, properties.maxSoundModels); assertEquals(567, properties.maxKeyPhrases); assertEquals(678, properties.maxUsers); - assertEquals(RecognitionMode.GENERIC_TRIGGER - | RecognitionMode.USER_AUTHENTICATION - | RecognitionMode.USER_IDENTIFICATION - | RecognitionMode.VOICE_TRIGGER, properties.recognitionModes); + assertEquals(RecognitionMode.GENERIC_TRIGGER | RecognitionMode.USER_AUTHENTICATION + | RecognitionMode.USER_IDENTIFICATION | RecognitionMode.VOICE_TRIGGER, + properties.recognitionModes); assertTrue(properties.captureTransition); assertEquals(321, properties.maxBufferMs); assertEquals(supportConcurrentCapture, properties.concurrentCapture); @@ -246,8 +264,8 @@ class TestUtil { config.phraseRecognitionExtras[0].levels[0].userId = 234; config.phraseRecognitionExtras[0].levels[0].levelPercent = 34; config.data = new byte[]{5, 4, 3, 2, 1}; - config.audioCapabilities = AudioCapabilities.ECHO_CANCELLATION - | AudioCapabilities.NOISE_SUPPRESSION; + config.audioCapabilities = + AudioCapabilities.ECHO_CANCELLATION | AudioCapabilities.NOISE_SUPPRESSION; return config; } @@ -295,13 +313,12 @@ class TestUtil { int captureHandle) { validateRecognitionConfig_2_1(config.base, captureDevice, captureHandle); - assertEquals(AudioCapabilities.ECHO_CANCELLATION - | AudioCapabilities.NOISE_SUPPRESSION, config.audioCapabilities); + assertEquals(AudioCapabilities.ECHO_CANCELLATION | AudioCapabilities.NOISE_SUPPRESSION, + config.audioCapabilities); } static android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.RecognitionEvent createRecognitionEvent_2_0( - int hwHandle, - int status) { + int hwHandle, int status) { android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.RecognitionEvent halEvent = new android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.RecognitionEvent(); halEvent.status = status; @@ -351,8 +368,7 @@ class TestUtil { return event; } - static ISoundTriggerHwCallback.RecognitionEvent createRecognitionEvent_2_1( - int hwHandle, + static ISoundTriggerHwCallback.RecognitionEvent createRecognitionEvent_2_1(int hwHandle, int status) { ISoundTriggerHwCallback.RecognitionEvent halEvent = new ISoundTriggerHwCallback.RecognitionEvent(); @@ -386,8 +402,7 @@ class TestUtil { PhraseRecognitionExtra extra = new PhraseRecognitionExtra(); extra.id = 123; extra.confidenceLevel = 52; - extra.recognitionModes = RecognitionMode.VOICE_TRIGGER - | RecognitionMode.GENERIC_TRIGGER; + extra.recognitionModes = RecognitionMode.VOICE_TRIGGER | RecognitionMode.GENERIC_TRIGGER; ConfidenceLevel level = new ConfidenceLevel(); level.userId = 31; level.levelPercent = 43; @@ -396,8 +411,8 @@ class TestUtil { return event; } - static android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.PhraseRecognitionEvent - createPhraseRecognitionEvent_2_0(int hwHandle, int status) { + static android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.PhraseRecognitionEvent createPhraseRecognitionEvent_2_0( + int hwHandle, int status) { android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.PhraseRecognitionEvent halEvent = new android.hardware.soundtrigger.V2_0.ISoundTriggerHwCallback.PhraseRecognitionEvent(); halEvent.common = createRecognitionEvent_2_0(hwHandle, status); diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java index e1a4989e5a05..01e306e744fb 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java @@ -61,8 +61,6 @@ import android.util.SparseArray; import androidx.test.InstrumentationRegistry; -import com.android.internal.app.IBatteryStats; - import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -106,8 +104,6 @@ public class VibrationThreadTest { @Mock private IBinder mVibrationToken; @Mock - private IBatteryStats mIBatteryStatsMock; - @Mock private VibrationConfig mVibrationConfigMock; private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>(); @@ -178,8 +174,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(10L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -197,8 +193,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(10L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -219,8 +215,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(15L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(15L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -252,8 +248,8 @@ public class VibrationThreadTest { thread.cancel(); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), anyLong()); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong()); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -404,8 +400,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -427,8 +423,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibration); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(10L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -446,8 +442,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock, never()).noteVibratorOn(eq(UID), anyLong()); - verify(mIBatteryStatsMock, never()).noteVibratorOff(eq(UID)); + verify(mManagerHooks, never()).noteVibratorOn(eq(UID), anyLong()); + verify(mManagerHooks, never()).noteVibratorOff(eq(UID)); verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED); assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments().isEmpty()); @@ -466,8 +462,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(40L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(40L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -486,8 +482,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock, never()).noteVibratorOn(eq(UID), anyLong()); - verify(mIBatteryStatsMock, never()).noteVibratorOff(eq(UID)); + verify(mManagerHooks, never()).noteVibratorOn(eq(UID), anyLong()); + verify(mManagerHooks, never()).noteVibratorOff(eq(UID)); verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED); assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments().isEmpty()); @@ -536,8 +532,8 @@ public class VibrationThreadTest { waitForCompletion(thread); // Use first duration the vibrator is turned on since we cannot estimate the clicks. - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(10L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks, times(4)).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -573,8 +569,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(100L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(100L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); @@ -666,8 +662,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); verify(mControllerCallbacks, never()).onComplete(eq(2), eq(vibrationId)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); @@ -690,8 +686,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId)); @@ -728,8 +724,8 @@ public class VibrationThreadTest { VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId)); @@ -777,13 +773,13 @@ public class VibrationThreadTest { controllerVerifier.verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId)); controllerVerifier.verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId)); - InOrder batterVerifier = inOrder(mIBatteryStatsMock); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(10L)); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(20L)); - batterVerifier.verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + InOrder batteryVerifier = inOrder(mManagerHooks); + batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID)); + batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L)); + batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID)); + batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L)); + batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID)); verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED); assertFalse(thread.getVibrators().get(1).isVibrating()); @@ -952,8 +948,8 @@ public class VibrationThreadTest { waitForCompletion(thread); - verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(80L)); - verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mManagerHooks).noteVibratorOn(eq(UID), eq(80L)); + verify(mManagerHooks).noteVibratorOff(eq(UID)); verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId)); verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId)); @@ -1300,7 +1296,7 @@ public class VibrationThreadTest { private VibrationThread startThreadAndDispatcher(Vibration vib) { VibrationThread thread = new VibrationThread(vib, mVibrationSettings, mEffectAdapter, - createVibratorControllers(), mWakeLock, mIBatteryStatsMock, mManagerHooks); + createVibratorControllers(), mWakeLock, mManagerHooks); doAnswer(answer -> { thread.vibratorComplete(answer.getArgument(0)); return null; diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java index ccdb1050d32c..19111e5d16e9 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java @@ -71,6 +71,7 @@ import android.os.VibratorInfo; import android.os.test.TestLooper; import android.os.vibrator.PrebakedSegment; import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.VibrationConfig; import android.os.vibrator.VibrationEffectSegment; import android.platform.test.annotations.Presubmit; import android.provider.Settings; @@ -78,6 +79,7 @@ import android.view.InputDevice; import androidx.test.InstrumentationRegistry; +import com.android.internal.app.IBatteryStats; import com.android.internal.util.test.FakeSettingsProvider; import com.android.internal.util.test.FakeSettingsProviderRule; import com.android.server.LocalServices; @@ -144,6 +146,8 @@ public class VibratorManagerServiceTest { private AppOpsManager mAppOpsManagerMock; @Mock private IInputManager mIInputManagerMock; + @Mock + private IBatteryStats mBatteryStatsMock; private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>(); @@ -152,12 +156,14 @@ public class VibratorManagerServiceTest { private FakeVibrator mVibrator; private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener; private VibratorManagerService.ExternalVibratorService mExternalVibratorService; + private VibrationConfig mVibrationConfig; @Before public void setUp() throws Exception { mTestLooper = new TestLooper(); mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext())); InputManager inputManager = InputManager.resetInstance(mIInputManagerMock); + mVibrationConfig = new VibrationConfig(mContextSpy.getResources()); ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy); when(mContextSpy.getContentResolver()).thenReturn(contentResolver); @@ -222,6 +228,11 @@ public class VibratorManagerServiceTest { } @Override + IBatteryStats getBatteryStatsService() { + return mBatteryStatsMock; + } + + @Override VibratorController createVibratorController(int vibratorId, VibratorController.OnVibrationCompleteListener listener) { return mVibratorProviders.get(vibratorId) @@ -382,6 +393,11 @@ public class VibratorManagerServiceTest { inOrderVerifier.verify(listenerMock).onVibrating(eq(true)); inOrderVerifier.verify(listenerMock).onVibrating(eq(false)); inOrderVerifier.verifyNoMoreInteractions(); + + InOrder batteryVerifier = inOrder(mBatteryStatsMock); + batteryVerifier.verify(mBatteryStatsMock) + .noteVibratorOn(UID, 40 + mVibrationConfig.getRampDownDurationMs()); + batteryVerifier.verify(mBatteryStatsMock).noteVibratorOff(UID); } @Test @@ -731,6 +747,12 @@ public class VibratorManagerServiceTest { // Wait before checking it never played a second effect. assertFalse(waitUntil(s -> mVibratorProviders.get(1).getEffectSegments().size() > 1, service, /* timeout= */ 50)); + + // The time estimate is recorded when the vibration starts, repeating vibrations + // are capped at BATTERY_STATS_REPEATING_VIBRATION_DURATION (=5000). + verify(mBatteryStatsMock).noteVibratorOn(UID, 5000); + // The second vibration shouldn't have recorded that the vibrators were turned on. + verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong()); } @Test diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java index 2794d4837101..c64ff9e128e6 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java @@ -114,7 +114,7 @@ public class WindowOrientationListenerTest { } @Test - public void testSensorChanged_normalCase2() { + public void testOnSensorChanged_normalCase2() { mWindowOrientationListener.mOrientationJudge.onSensorChanged(mFakeSensorEvent); mFakeRotationResolverInternal.callbackWithFailureResult( @@ -123,6 +123,15 @@ public class WindowOrientationListenerTest { assertThat(mFinalizedRotation).isEqualTo(DEFAULT_SENSOR_ROTATION); } + @Test + public void testOnSensorChanged_rotationResolverServiceIsNull_useSensorResult() { + mWindowOrientationListener.mRotationResolverService = null; + + mWindowOrientationListener.mOrientationJudge.onSensorChanged(mFakeSensorEvent); + + assertThat(mFinalizedRotation).isEqualTo(DEFAULT_SENSOR_ROTATION); + } + static final class TestableRotationResolver extends RotationResolverInternal { @Surface.Rotation RotationResolverCallbackInternal mCallback; diff --git a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java index 3beb7f2049df..88c7017e9942 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java @@ -283,6 +283,21 @@ public class DimmerTests extends WindowTestsBase { verify(mTransaction).remove(dimLayer); } + @Test + public void testDimmerWithBlurUpdatesTransaction() { + TestWindowContainer child = new TestWindowContainer(mWm); + mHost.addChild(child, 0); + + final int blurRadius = 50; + mDimmer.dimBelow(mTransaction, child, 0, blurRadius); + SurfaceControl dimLayer = getDimLayer(); + + assertNotNull("Dimmer should have created a surface", dimLayer); + + verify(mTransaction).setBackgroundBlurRadius(dimLayer, blurRadius); + verify(mTransaction).setRelativeLayer(dimLayer, child.mControl, -1); + } + private SurfaceControl getDimLayer() { return mDimmer.mDimState.mDimLayer; } diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index f43e5aacad33..1d06707a97a7 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -1179,7 +1179,7 @@ public class TelecomManager { if (service != null) { try { return service.getSimCallManager( - SubscriptionManager.getDefaultSubscriptionId()); + SubscriptionManager.getDefaultSubscriptionId(), mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#getSimCallManager"); } @@ -1201,7 +1201,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - return service.getSimCallManager(subscriptionId); + return service.getSimCallManager(subscriptionId, mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#getSimCallManager"); } @@ -1225,7 +1225,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - return service.getSimCallManagerForUser(userId); + return service.getSimCallManagerForUser(userId, mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#getSimCallManagerForUser"); } @@ -1481,7 +1481,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - service.registerPhoneAccount(account); + service.registerPhoneAccount(account, mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#registerPhoneAccount", e); } @@ -1497,7 +1497,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - service.unregisterPhoneAccount(accountHandle); + service.unregisterPhoneAccount(accountHandle, mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#unregisterPhoneAccount", e); } @@ -1578,7 +1578,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - return service.getDefaultDialerPackage(); + return service.getDefaultDialerPackage(mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "RemoteException attempting to get the default dialer package name.", e); } @@ -1652,7 +1652,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - return service.getSystemDialerPackage(); + return service.getSystemDialerPackage(mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "RemoteException attempting to get the system dialer package name.", e); } @@ -2057,7 +2057,8 @@ public class TelecomManager { "acceptHandover for API > O-MR1"); return; } - service.addNewIncomingCall(phoneAccount, extras == null ? new Bundle() : extras); + service.addNewIncomingCall(phoneAccount, extras == null ? new Bundle() : extras, + mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "RemoteException adding a new incoming call: " + phoneAccount, e); } @@ -2099,7 +2100,8 @@ public class TelecomManager { if (service != null) { try { service.addNewIncomingConference( - phoneAccount, extras == null ? new Bundle() : extras); + phoneAccount, extras == null ? new Bundle() : extras, + mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "RemoteException adding a new incoming conference: " + phoneAccount, e); } @@ -2395,7 +2397,7 @@ public class TelecomManager { Intent result = null; if (service != null) { try { - result = service.createManageBlockedNumbersIntent(); + result = service.createManageBlockedNumbersIntent(mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#createManageBlockedNumbersIntent", e); } @@ -2552,7 +2554,7 @@ public class TelecomManager { ITelecomService service = getTelecomService(); if (service != null) { try { - service.acceptHandover(srcAddr, videoState, destAcct); + service.acceptHandover(srcAddr, videoState, destAcct, mContext.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "RemoteException acceptHandover: " + e); } diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index b9936ce2e1b2..151f7422d0fb 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -99,22 +99,22 @@ interface ITelecomService { /** * @see TelecomServiceImpl#getSimCallManager */ - PhoneAccountHandle getSimCallManager(int subId); + PhoneAccountHandle getSimCallManager(int subId, String callingPackage); /** * @see TelecomServiceImpl#getSimCallManagerForUser */ - PhoneAccountHandle getSimCallManagerForUser(int userId); + PhoneAccountHandle getSimCallManagerForUser(int userId, String callingPackage); /** * @see TelecomServiceImpl#registerPhoneAccount */ - void registerPhoneAccount(in PhoneAccount metadata); + void registerPhoneAccount(in PhoneAccount metadata, String callingPackage); /** * @see TelecomServiceImpl#unregisterPhoneAccount */ - void unregisterPhoneAccount(in PhoneAccountHandle account); + void unregisterPhoneAccount(in PhoneAccountHandle account, String callingPackage); /** * @see TelecomServiceImpl#clearAccounts @@ -147,7 +147,7 @@ interface ITelecomService { /** * @see TelecomServiceImpl#getDefaultDialerPackage */ - String getDefaultDialerPackage(); + String getDefaultDialerPackage(String callingPackage); /** * @see TelecomServiceImpl#getDefaultDialerPackage @@ -157,7 +157,7 @@ interface ITelecomService { /** * @see TelecomServiceImpl#getSystemDialerPackage */ - String getSystemDialerPackage(); + String getSystemDialerPackage(String callingPackage); /** * @see TelecomServiceImpl#dumpCallAnalytics @@ -255,12 +255,15 @@ interface ITelecomService { /** * @see TelecomServiceImpl#addNewIncomingCall */ - void addNewIncomingCall(in PhoneAccountHandle phoneAccount, in Bundle extras); + void addNewIncomingCall(in PhoneAccountHandle phoneAccount, in Bundle extras, + String callingPackage); /** * @see TelecomServiceImpl#addNewIncomingConference */ - void addNewIncomingConference(in PhoneAccountHandle phoneAccount, in Bundle extras); + void addNewIncomingConference(in PhoneAccountHandle phoneAccount, in Bundle extras, + String callingPackage); + /** * @see TelecomServiceImpl#addNewUnknownCall @@ -296,7 +299,7 @@ interface ITelecomService { /** * @see TelecomServiceImpl#createManageBlockedNumbersIntent **/ - Intent createManageBlockedNumbersIntent(); + Intent createManageBlockedNumbersIntent(String callingPackage); /** * @see TelecomServiceImpl#createLaunchEmergencyDialerIntent @@ -323,7 +326,8 @@ interface ITelecomService { /** * @see TelecomServiceImpl#acceptHandover */ - void acceptHandover(in Uri srcAddr, int videoState, in PhoneAccountHandle destAcct); + void acceptHandover(in Uri srcAddr, int videoState, in PhoneAccountHandle destAcct, + String callingPackage); /** * @see TelecomServiceImpl#setTestEmergencyPhoneAccountPackageNameFilter diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index f57c32c959d9..ad049520a1a3 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -7664,7 +7664,7 @@ public class TelephonyManager { * app has carrier privileges (see {@link #hasCarrierPrivileges}). * * TODO: remove this one. use {@link #rebootModem()} for reset type 1 and - * {@link #resetRadioConfig()} for reset type 3 + * {@link #resetRadioConfig()} for reset type 3 (b/116476729) * * @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset * @return true on success; false on any failure. diff --git a/telephony/java/android/telephony/ims/ImsRcsManager.java b/telephony/java/android/telephony/ims/ImsRcsManager.java index 34158685b6d1..783c0d1e15f9 100644 --- a/telephony/java/android/telephony/ims/ImsRcsManager.java +++ b/telephony/java/android/telephony/ims/ImsRcsManager.java @@ -497,6 +497,8 @@ public class ImsRcsManager { try { return imsRcsController.isCapable(mSubId, capability, radioTech); + } catch (ServiceSpecificException e) { + throw new ImsException(e.getMessage(), e.errorCode); } catch (RemoteException e) { Log.w(TAG, "Error calling IImsRcsController#isCapable", e); throw new ImsException("Remote IMS Service is not available", @@ -534,6 +536,8 @@ public class ImsRcsManager { try { return imsRcsController.isAvailable(mSubId, capability, radioTech); + } catch (ServiceSpecificException e) { + throw new ImsException(e.getMessage(), e.errorCode); } catch (RemoteException e) { Log.w(TAG, "Error calling IImsRcsController#isAvailable", e); throw new ImsException("Remote IMS Service is not available", diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt index 8d60466eff95..4cddd8506df7 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppTransition.kt @@ -60,7 +60,7 @@ abstract class CloseAppTransition(protected val testSpec: FlickerTestParameter) } teardown { test { - testApp.exit() + testApp.exit(wmHelper) } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt index 7ee6451b2797..5bd365c7eefd 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt @@ -64,7 +64,6 @@ open class ImeAppHelper @JvmOverloads constructor( device.waitForIdle() } else { wmHelper.waitImeShown() - wmHelper.waitForAppTransitionIdle() } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt index b66c45c7c9f0..a135e0af067b 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt @@ -53,8 +53,8 @@ class TwoActivitiesAppHelper @JvmOverloads constructor( button.click() device.wait(Until.gone(launchActivityButton), FIND_TIMEOUT) - wmHelper.waitForFullScreenApp(secondActivityComponent) wmHelper.waitFor( + WindowManagerStateHelper.isAppFullScreen(secondActivityComponent), WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY), WindowManagerConditionsFactory.hasLayersAnimating().negate() ) diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt index ba5698cafa15..a9564fdd2332 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ReOpenImeWindowTest.kt @@ -88,7 +88,7 @@ class ReOpenImeWindowTest(private val testSpec: FlickerTestParameter) { } transitions { device.reopenAppFromOverview(wmHelper) - require(wmHelper.waitImeShown()) { "IME didn't show in time" } + wmHelper.waitImeShown() } teardown { test { diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt index 19e2c92304d4..7e3ed8252f4c 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/SwitchImeWindowsFromGestureNavTest.kt @@ -18,6 +18,7 @@ package com.android.server.wm.flicker.ime import android.app.Instrumentation import android.platform.test.annotations.Presubmit +import android.view.Display import android.view.Surface import android.view.WindowManagerPolicyConstants import androidx.test.filters.RequiresDevice @@ -35,6 +36,8 @@ import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.navBarWindowIsVisible import com.android.server.wm.flicker.statusBarWindowIsVisible import com.android.server.wm.traces.common.FlickerComponentName +import com.android.server.wm.traces.common.WindowManagerConditionsFactory +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test @@ -64,12 +67,22 @@ class SwitchImeWindowsFromGestureNavTest(private val testSpec: FlickerTestParame eachRun { this.setRotation(testSpec.startRotation) testApp.launchViaIntent(wmHelper) - wmHelper.waitForFullScreenApp(testApp.component) - wmHelper.waitForAppTransitionIdle() + val testAppVisible = wmHelper.waitFor( + WindowManagerStateHelper.isAppFullScreen(testApp.component), + WindowManagerConditionsFactory.isAppTransitionIdle( + Display.DEFAULT_DISPLAY)) + require(testAppVisible) { + "Expected ${testApp.component.toWindowName()} to be visible" + } imeTestApp.launchViaIntent(wmHelper) - wmHelper.waitForFullScreenApp(testApp.component) - wmHelper.waitForAppTransitionIdle() + val imeAppVisible = wmHelper.waitFor( + WindowManagerStateHelper.isAppFullScreen(imeTestApp.component), + WindowManagerConditionsFactory.isAppTransitionIdle( + Display.DEFAULT_DISPLAY)) + require(imeAppVisible) { + "Expected ${imeTestApp.component.toWindowName()} to be visible" + } imeTestApp.openIME(device, wmHelper) } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivitiesTransitionTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivitiesTransitionTest.kt index b5e13be7dca0..cc808a0ce871 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivitiesTransitionTest.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivitiesTransitionTest.kt @@ -18,6 +18,7 @@ package com.android.server.wm.flicker.launch import android.app.Instrumentation import android.platform.test.annotations.Presubmit +import android.view.Display import androidx.test.filters.RequiresDevice import androidx.test.platform.app.InstrumentationRegistry import com.android.server.wm.flicker.entireScreenCovered @@ -30,7 +31,9 @@ import com.android.server.wm.flicker.annotation.Group4 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.TwoActivitiesAppHelper import com.android.server.wm.flicker.testapp.ActivityOptions +import com.android.server.wm.traces.common.WindowManagerConditionsFactory import com.android.server.wm.traces.parser.toFlickerComponent +import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -77,14 +80,16 @@ class ActivitiesTransitionTest(val testSpec: FlickerTestParameter) { } teardown { test { - testApp.exit() + testApp.exit(wmHelper) } } transitions { testApp.openSecondActivity(device, wmHelper) device.pressBack() - wmHelper.waitForAppTransitionIdle() - wmHelper.waitForFullScreenApp(testApp.component) + val firstActivityVisible = wmHelper.waitFor( + WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY), + WindowManagerStateHelper.isAppFullScreen(testApp.component)) + require(firstActivityVisible) { "Expected ${testApp.component} to be visible" } } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt index 53560cc14c44..4313b8dbc883 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppTransition.kt @@ -56,7 +56,7 @@ abstract class OpenAppTransition(protected val testSpec: FlickerTestParameter) { } teardown { test { - testApp.exit() + testApp.exit(wmHelper) } } } diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp index bd0a4bc44e18..52c5d4827741 100644 --- a/tools/aapt2/Android.bp +++ b/tools/aapt2/Android.bp @@ -36,6 +36,7 @@ toolSources = [ cc_defaults { name: "aapt2_defaults", + cpp_std: "gnu++2b", cflags: [ "-Wall", "-Werror", diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp index 790f2b34c58b..1efe6c25d217 100644 --- a/tools/aapt2/cmd/Link.cpp +++ b/tools/aapt2/cmd/Link.cpp @@ -1057,6 +1057,83 @@ class Linker { return true; } + bool VerifyLocaleFormat(xml::XmlResource* manifest, IDiagnostics* diag) { + // Skip it if the Manifest doesn't declare the localeConfig attribute within the <application> + // element. + const xml::Element* application = manifest->root->FindChild("", "application"); + if (!application) { + return true; + } + const xml::Attribute* localeConfig = + application->FindAttribute(xml::kSchemaAndroid, "localeConfig"); + if (!localeConfig) { + return true; + } + + if (localeConfig->compiled_value) { + const auto localeconfig_reference = ValueCast<Reference>(localeConfig->compiled_value.get()); + const auto localeconfig_entry = + ResolveTableEntry(context_, &final_table_, localeconfig_reference); + if (!localeconfig_entry) { + return true; + } + + for (const auto& value : localeconfig_entry->values) { + // Load an XML file which is linked from the localeConfig attribute. + const std::string& path = value->value->GetSource().path; + std::unique_ptr<xml::XmlResource> localeConfig_xml = LoadXml(path, diag); + if (!localeConfig_xml) { + diag->Error(DiagMessage(path) << "can't load the XML"); + return false; + } + + xml::Element* localeConfig_el = xml::FindRootElement(localeConfig_xml->root.get()); + if (!localeConfig_el) { + diag->Error(DiagMessage(path) << "no root tag defined"); + return false; + } + if (localeConfig_el->name != "locale-config") { + diag->Error(DiagMessage(path) << "invalid element name: " << localeConfig_el->name + << ", expected: locale-config"); + return false; + } + + for (const xml::Element* child_el : localeConfig_el->GetChildElements()) { + if (child_el->name == "locale") { + if (const xml::Attribute* locale_name_attr = + child_el->FindAttribute(xml::kSchemaAndroid, "name")) { + const std::string& locale_name = locale_name_attr->value; + const std::string valid_name = ConvertToBCP47Tag(locale_name); + + // Start to verify the locale format + ConfigDescription config; + if (!ConfigDescription::Parse(valid_name, &config)) { + diag->Error(DiagMessage(path) << "invalid configuration: " << locale_name); + return false; + } + } else { + diag->Error(DiagMessage(path) << "the attribute android:name is not found"); + return false; + } + } else { + diag->Error(DiagMessage(path) + << "invalid element name: " << child_el->name << ", expected: locale"); + return false; + } + } + } + } + return true; + } + + std::string ConvertToBCP47Tag(const std::string& locale) { + std::string bcp47tag = "b+"; + bcp47tag += locale; + std::replace(bcp47tag.begin(), bcp47tag.end(), '-', '+'); + + return bcp47tag; + } + std::unique_ptr<IArchiveWriter> MakeArchiveWriter(const StringPiece& out) { if (options_.output_to_directory) { return CreateDirectoryArchiveWriter(context_->GetDiagnostics(), out); @@ -2180,6 +2257,10 @@ class Linker { return 1; } + if (!VerifyLocaleFormat(manifest_xml.get(), context_->GetDiagnostics())) { + return 1; + }; + if (!WriteApk(archive_writer.get(), &proguard_keep_set, manifest_xml.get(), &final_table_)) { return 1; } diff --git a/tools/aapt2/cmd/Link_test.cpp b/tools/aapt2/cmd/Link_test.cpp index 430c184ef87d..7b1236ab4a5e 100644 --- a/tools/aapt2/cmd/Link_test.cpp +++ b/tools/aapt2/cmd/Link_test.cpp @@ -22,6 +22,7 @@ #include "LoadedApk.h" #include "test/Test.h" +using android::ConfigDescription; using testing::Eq; using testing::HasSubstr; using testing::IsNull; @@ -783,4 +784,51 @@ TEST_F(LinkTest, MacroSubstitution) { EXPECT_THAT(xml_attrs[1].value, Eq("Hello World!")); } +TEST_F(LinkTest, ParseLocaleConfig) { + StdErrDiagnostics diag; + const std::string xml_values = + R"(<locale-config xmlns:android="http://schemas.android.com/apk/res/android"> + <locale android:name="pt"/> + <locale android:name="chr"/> + <locale android:name="chr-US"/> + <locale android:name="zh-Hant"/> + <locale android:name="es-419"/> + <locale android:name="en-US"/> + <locale android:name="zh-Hans-SG"/> + </locale-config>)"; + + const std::string res = GetTestPath("test-res"); + ASSERT_TRUE(CompileFile(GetTestPath("res/xml/locale_config.xml"), xml_values, res, &diag)); + + const std::string out_apk = GetTestPath("out.apk"); + auto link_args = LinkCommandBuilder(this) + .SetManifestFile(ManifestBuilder(this).SetPackageName("com.test").Build()) + .AddCompiledResDir(res, &diag) + .AddFlag("--no-auto-version") + .Build(out_apk); + ASSERT_TRUE(Link(link_args, &diag)); + + std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_THAT(apk, Ne(nullptr)); + + auto xml = apk->LoadXml("res/xml/locale_config.xml", &diag); + ASSERT_THAT(xml, NotNull()); + EXPECT_THAT(xml->root->name, Eq("locale-config")); + ASSERT_THAT(xml->root->children.size(), Eq(7)); + for (auto& node : xml->root->children) { + const xml::Element* child_el = xml::NodeCast<xml::Element>(node.get()); + ASSERT_THAT(child_el, NotNull()); + EXPECT_THAT(child_el->name, Eq("locale")); + + auto& xml_attrs = child_el->attributes; + for (auto& attr : xml_attrs) { + std::string locale = "b+"; + locale += attr.value; + std::replace(locale.begin(), locale.end(), '-', '+'); + ConfigDescription config; + ASSERT_TRUE(ConfigDescription::Parse(locale, &config)); + } + } +} + } // namespace aapt |