diff options
341 files changed, 2566 insertions, 1186 deletions
diff --git a/Android.bp b/Android.bp index 2321cc5dd61d..71023bf647c8 100644 --- a/Android.bp +++ b/Android.bp @@ -581,4 +581,5 @@ build = [ "StubLibraries.bp", "ApiDocs.bp", "ProtoLibraries.bp", + "TestProtoLibraries.bp", ] diff --git a/TestProtoLibraries.bp b/TestProtoLibraries.bp new file mode 100644 index 000000000000..8e269d0a85c5 --- /dev/null +++ b/TestProtoLibraries.bp @@ -0,0 +1,36 @@ +// Copyright 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. + +java_library_host { + name: "platformtestprotos", + srcs: [ + ":libstats_atom_enum_protos", + ":libstats_atom_message_protos", + ":libstats_internal_protos", + ":statsd_internal_protos", + ], + libs: [ + "libprotobuf-java-full", + ], + proto: { + include_dirs: [ + "external/protobuf/src", + "frameworks/proto_logging/stats", + ], + type: "full", + }, + errorprone: { + javacflags: ["-Xep:MissingOverride:OFF"], // b/72714520 + }, +} diff --git a/apex/appsearch/service/java/com/android/server/appsearch/stats/PlatformLogger.java b/apex/appsearch/service/java/com/android/server/appsearch/stats/PlatformLogger.java index 26a16a1c061b..5a0199f8d78f 100644 --- a/apex/appsearch/service/java/com/android/server/appsearch/stats/PlatformLogger.java +++ b/apex/appsearch/service/java/com/android/server/appsearch/stats/PlatformLogger.java @@ -170,7 +170,7 @@ public final class PlatformLogger implements AppSearchLogger { } @Override - public void logStats(@androidx.annotation.NonNull RemoveStats stats) throws AppSearchException { + public void logStats(@NonNull RemoveStats stats) throws AppSearchException { // TODO(b/173532925): Log stats } diff --git a/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/PackageAccessibleDocument.java b/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/PackageAccessibleDocument.java index bf8051b42acd..0b4e196fd0c4 100644 --- a/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/PackageAccessibleDocument.java +++ b/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/PackageAccessibleDocument.java @@ -16,12 +16,11 @@ package com.android.server.appsearch.visibilitystore; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.appsearch.AppSearchSchema; import android.app.appsearch.GenericDocument; import android.app.appsearch.PackageIdentifier; -import androidx.annotation.Nullable; - /** * Holds configuration about a package+cert that can access a schema. * diff --git a/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/VisibilityDocument.java b/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/VisibilityDocument.java index f2b2621b22b8..1771b1ddc6b6 100644 --- a/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/VisibilityDocument.java +++ b/apex/appsearch/service/java/com/android/server/appsearch/visibilitystore/VisibilityDocument.java @@ -16,11 +16,10 @@ package com.android.server.appsearch.visibilitystore; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.appsearch.AppSearchSchema; import android.app.appsearch.GenericDocument; -import androidx.annotation.Nullable; - /** Holds the visibility settings that apply to a package's databases. */ class VisibilityDocument extends GenericDocument { /** Schema type for documents that hold AppSearch's metadata, e.g. visibility settings */ diff --git a/apex/media/Android.bp b/apex/media/Android.bp index 2b4b3f0f52e8..f2e64ce0b2c5 100644 --- a/apex/media/Android.bp +++ b/apex/media/Android.bp @@ -28,5 +28,8 @@ package { sdk { name: "media-module-sdk", bootclasspath_fragments: ["com.android.media-bootclasspath-fragment"], - java_sdk_libs: ["service-media-s"], + java_sdk_libs: [ + "framework-media", + "service-media-s", + ], } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index eb14c11e7e3c..96d59b80b479 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -3105,24 +3105,11 @@ public class AppOpsManager { */ public boolean isRecordAudioRestrictionExcept; - /** - * Is attribution tag not null and not contained in the package attributions - */ - public boolean isAttributionTagNotFound = false; - public RestrictionBypass(boolean isPrivileged, boolean isRecordAudioRestrictionExcept) { this.isPrivileged = isPrivileged; this.isRecordAudioRestrictionExcept = isRecordAudioRestrictionExcept; } - public void setIsAttributionTagNotFound(boolean isAttributionTagNotFound) { - this.isAttributionTagNotFound = isAttributionTagNotFound; - } - - public boolean getIsAttributionTagNotFound() { - return this.isAttributionTagNotFound; - } - public static RestrictionBypass UNRESTRICTED = new RestrictionBypass(true, true); } diff --git a/core/java/android/app/ConfigurationController.java b/core/java/android/app/ConfigurationController.java index 6d92201db8ec..f79e0780ecae 100644 --- a/core/java/android/app/ConfigurationController.java +++ b/core/java/android/app/ConfigurationController.java @@ -158,10 +158,9 @@ class ConfigurationController { int configDiff; boolean equivalent; - final Resources.Theme systemTheme = mActivityThread.getSystemContext().getTheme(); - final Resources.Theme systemUiTheme = mActivityThread.getSystemUiContext().getTheme(); - synchronized (mResourcesManager) { + final Resources.Theme systemTheme = mActivityThread.getSystemContext().getTheme(); + final Resources.Theme systemUiTheme = mActivityThread.getSystemUiContext().getTheme(); if (mPendingConfiguration != null) { if (!mPendingConfiguration.isOtherSeqNewer(config)) { config = mPendingConfiguration; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index cb2a45ddc624..8c9e771dbd73 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -6845,6 +6845,10 @@ public class DevicePolicyManager { * <p> Enabling lockdown via {@code lockdownEnabled} argument carries the risk that any failure * of the VPN provider could break networking for all apps. This method clears any lockdown * allowlist set by {@link #setAlwaysOnVpnPackage(ComponentName, String, boolean, Set)}. + * <p> Starting from {@link android.os.Build.VERSION_CODES#S API 31} calling this method with + * {@code vpnPackage} set to {@code null} only removes the existing configuration if it was + * previously created by this admin. To remove VPN configuration created by the user use + * {@link UserManager#DISALLOW_CONFIG_VPN}. * * @param vpnPackage The package name for an installed VPN app on the device, or {@code null} to * remove an existing always-on VPN configuration. diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index 67f5c366bc14..a9bec98ce405 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -265,5 +265,4 @@ public abstract class DevicePolicyManagerInternal { */ public abstract void notifyUnsafeOperationStateChanged(DevicePolicySafetyChecker checker, @OperationSafetyReason int reason, boolean isSafe); - } diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index df51734bc17d..a9b95fce8777 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -94,6 +94,7 @@ public final class DisplayManagerGlobal { // Guarded by mLock private boolean mDispatchNativeCallbacks = false; + private float mNativeCallbackReportedRefreshRate; private final Object mLock = new Object(); @UnsupportedAppUsage @@ -404,10 +405,11 @@ public final class DisplayManagerGlobal { // We can likely save a binder hop if we attach the refresh rate onto the // listener. DisplayInfo display = getDisplayInfoLocked(displayId); - if (display != null) { - float refreshRate = display.getRefreshRate(); + if (display != null + && mNativeCallbackReportedRefreshRate != display.getRefreshRate()) { + mNativeCallbackReportedRefreshRate = display.getRefreshRate(); // Signal native callbacks if we ever set a refresh rate. - nSignalNativeCallbacks(refreshRate); + nSignalNativeCallbacks(mNativeCallbackReportedRefreshRate); } } } @@ -1055,8 +1057,8 @@ public final class DisplayManagerGlobal { if (display != null) { // We need to tell AChoreographer instances the current refresh rate so that apps // can get it for free once a callback first registers. - float refreshRate = display.getRefreshRate(); - nSignalNativeCallbacks(refreshRate); + mNativeCallbackReportedRefreshRate = display.getRefreshRate(); + nSignalNativeCallbacks(mNativeCallbackReportedRefreshRate); } } } diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index dce3fefff285..c739c6a53167 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -287,6 +287,12 @@ public abstract class DisplayManagerInternal { public abstract void ignoreProximitySensorUntilChanged(); /** + * Returns the refresh rate switching type. + */ + @DisplayManager.SwitchingType + public abstract int getRefreshRateSwitchingType(); + + /** * Describes the requested power state of the display. * * This object is intended to describe the general characteristics of the diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 224cd84bc777..c22224dd0da2 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -575,6 +575,8 @@ public class UserManager { * <p>This restriction also prevents VPNs from starting. However, in Android 7.0 * ({@linkplain android.os.Build.VERSION_CODES#N API level 24}) or higher, the system does * start always-on VPNs created by the device or profile owner. + * <p>From Android 12 ({@linkplain android.os.Build.VERSION_CODES#S API level 31}) enforcing + * this restriction clears currently active VPN if it was configured by the user. * * <p>Key for user restrictions. * <p>Type: Boolean diff --git a/core/java/android/service/voice/HotwordDetectionService.java b/core/java/android/service/voice/HotwordDetectionService.java index deb6c01a3088..b66d93d6316e 100644 --- a/core/java/android/service/voice/HotwordDetectionService.java +++ b/core/java/android/service/voice/HotwordDetectionService.java @@ -31,6 +31,7 @@ import android.content.Context; import android.content.Intent; import android.hardware.soundtrigger.SoundTrigger; import android.media.AudioFormat; +import android.media.AudioSystem; import android.os.Bundle; import android.os.IBinder; import android.os.IRemoteCallback; @@ -187,6 +188,11 @@ public abstract class HotwordDetectionService extends Service { } @Override + public void updateAudioFlinger(IBinder audioFlinger) { + AudioSystem.setAudioFlingerBinder(audioFlinger); + } + + @Override public void updateContentCaptureManager(IContentCaptureManager manager, ContentCaptureOptions options) { mContentCaptureManager = new ContentCaptureManager( diff --git a/core/java/android/service/voice/IHotwordDetectionService.aidl b/core/java/android/service/voice/IHotwordDetectionService.aidl index 72dd45aeeb0f..d7ed67812e87 100644 --- a/core/java/android/service/voice/IHotwordDetectionService.aidl +++ b/core/java/android/service/voice/IHotwordDetectionService.aidl @@ -19,6 +19,7 @@ package android.service.voice; import android.content.ContentCaptureOptions; import android.hardware.soundtrigger.SoundTrigger; import android.media.AudioFormat; +import android.os.IBinder; import android.os.IRemoteCallback; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; @@ -50,6 +51,8 @@ oneway interface IHotwordDetectionService { in SharedMemory sharedMemory, in IRemoteCallback callback); + void updateAudioFlinger(in IBinder audioFlinger); + void updateContentCaptureManager( in IContentCaptureManager contentCaptureManager, in ContentCaptureOptions options); diff --git a/core/java/android/service/voice/VoiceInteractionManagerInternal.java b/core/java/android/service/voice/VoiceInteractionManagerInternal.java index f5c959137d9b..c048286545c3 100644 --- a/core/java/android/service/voice/VoiceInteractionManagerInternal.java +++ b/core/java/android/service/voice/VoiceInteractionManagerInternal.java @@ -16,9 +16,12 @@ package android.service.voice; +import android.annotation.Nullable; import android.os.Bundle; import android.os.IBinder; +import com.android.internal.annotations.Immutable; + /** * @hide @@ -46,4 +49,38 @@ public abstract class VoiceInteractionManagerInternal { * Returns whether the given package is currently in an active session */ public abstract boolean hasActiveSession(String packageName); + + /** + * Gets the identity of the currently active HotwordDetectionService. + * + * @see HotwordDetectionServiceIdentity + */ + @Nullable + public abstract HotwordDetectionServiceIdentity getHotwordDetectionServiceIdentity(); + + /** + * Provides the uids of the currently active + * {@link android.service.voice.HotwordDetectionService} and its owning package. The + * HotwordDetectionService is an isolated service, so it has a separate uid. + */ + @Immutable + public static class HotwordDetectionServiceIdentity { + private final int mIsolatedUid; + private final int mOwnerUid; + + public HotwordDetectionServiceIdentity(int isolatedUid, int ownerUid) { + mIsolatedUid = isolatedUid; + mOwnerUid = ownerUid; + } + + /** Gets the uid of the currently active isolated process hosting the service. */ + public int getIsolatedUid() { + return mIsolatedUid; + } + + /** Gets the uid of the package that provides the HotwordDetectionService. */ + public int getOwnerUid() { + return mOwnerUid; + } + } }
\ No newline at end of file diff --git a/core/java/android/speech/RecognitionService.java b/core/java/android/speech/RecognitionService.java index b9ff5e7be86a..055e71f0077b 100644 --- a/core/java/android/speech/RecognitionService.java +++ b/core/java/android/speech/RecognitionService.java @@ -33,10 +33,13 @@ import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; +import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; +import com.android.internal.util.function.pooled.PooledLambda; + import java.lang.ref.WeakReference; import java.util.Objects; @@ -226,6 +229,27 @@ public abstract class RecognitionService extends Service { protected abstract void onStopListening(Callback listener); @Override + public Context createContext(@NonNull ContextParams contextParams) { + if (contextParams.getNextAttributionSource() != null) { + if (mHandler.getLooper().equals(Looper.myLooper())) { + handleAttributionContextCreation(contextParams.getNextAttributionSource()); + } else { + mHandler.sendMessage( + PooledLambda.obtainMessage(this::handleAttributionContextCreation, + contextParams.getNextAttributionSource())); + } + } + return super.createContext(contextParams); + } + + private void handleAttributionContextCreation(@NonNull AttributionSource attributionSource) { + if (mCurrentCallback != null + && mCurrentCallback.mCallingAttributionSource.equals(attributionSource)) { + mCurrentCallback.mAttributionContextCreated = true; + } + } + + @Override public final IBinder onBind(final Intent intent) { if (DBG) Log.d(TAG, "onBind, intent=" + intent); return mBinder; @@ -249,6 +273,7 @@ public abstract class RecognitionService extends Service { private final IRecognitionListener mListener; private final @NonNull AttributionSource mCallingAttributionSource; private @Nullable Context mAttributionContext; + private boolean mAttributionContextCreated; private Callback(IRecognitionListener listener, @NonNull AttributionSource attributionSource) { @@ -421,7 +446,7 @@ public abstract class RecognitionService extends Service { } private boolean checkPermissionAndStartDataDelivery() { - if (isPerformingDataDelivery()) { + if (mCurrentCallback.mAttributionContextCreated) { return true; } if (PermissionChecker.checkPermissionAndStartDataDelivery( @@ -441,13 +466,4 @@ public abstract class RecognitionService extends Service { mCurrentCallback.getAttributionContextForCaller().getAttributionSource()); } } - - @SuppressWarnings("ConstantCondition") - private boolean isPerformingDataDelivery() { - final int op = AppOpsManager.permissionToOpCode(Manifest.permission.RECORD_AUDIO); - final AppOpsManager appOpsManager = getSystemService(AppOpsManager.class); - return appOpsManager.isProxying(op, getAttributionTag(), - mCurrentCallback.getCallingAttributionSource().getUid(), - mCurrentCallback.getCallingAttributionSource().getPackageName()); - } } diff --git a/core/java/android/uwb/AdapterStateListener.java b/core/java/android/uwb/AdapterStateListener.java index 91847f740953..7e82cc6318f7 100644 --- a/core/java/android/uwb/AdapterStateListener.java +++ b/core/java/android/uwb/AdapterStateListener.java @@ -108,16 +108,13 @@ public class AdapterStateListener extends IUwbAdapterStateCallbacks.Stub { */ public void setEnabled(boolean isEnabled) { synchronized (this) { - if (!mIsRegistered) { - return; - } else { - try { - mAdapter.setEnabled(isEnabled); - } catch (RemoteException e) { - Log.w(TAG, "Failed to set adapter state"); - throw e.rethrowFromSystemServer(); - } + try { + mAdapter.setEnabled(isEnabled); + } catch (RemoteException e) { + Log.w(TAG, "Failed to set adapter state"); + throw e.rethrowFromSystemServer(); } + } } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 6d861dd00e9c..a8fe875f3485 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -30929,6 +30929,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** + * Clears the ViewTranslationResponse stored by the default implementation of {@link + * #onViewTranslationResponse}. + * + * @hide + */ + public void clearViewTranslationResponse() { + mViewTranslationResponse = null; + } + + /** * Called when the content from {@link View#onCreateVirtualViewTranslationRequests} had been * translated by the TranslationService. * diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 538b8888fa70..73294b3ac969 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -953,8 +953,7 @@ public class ViewDebug { private final Callable<OutputStream> mCallback; private final Executor mExecutor; private final ReentrantLock mLock = new ReentrantLock(false); - private final ArrayDeque<byte[]> mQueue = new ArrayDeque<>(3); - private final ByteArrayOutputStream mByteStream = new ByteArrayOutputStream(); + private final ArrayDeque<Picture> mQueue = new ArrayDeque<>(3); private boolean mStopListening; private Thread mRenderThread; @@ -990,9 +989,7 @@ public class ViewDebug { mQueue.removeLast(); needsInvoke = false; } - picture.writeToStream(mByteStream); - mQueue.add(mByteStream.toByteArray()); - mByteStream.reset(); + mQueue.add(picture); mLock.unlock(); if (needsInvoke) { @@ -1003,7 +1000,7 @@ public class ViewDebug { @Override public void run() { mLock.lock(); - final byte[] picture = mQueue.poll(); + final Picture picture = mQueue.poll(); final boolean isStopped = mStopListening; mLock.unlock(); if (Thread.currentThread() == mRenderThread) { @@ -1024,7 +1021,8 @@ public class ViewDebug { } if (stream != null) { try { - stream.write(picture); + picture.writeToStream(stream); + stream.flush(); } catch (IOException ex) { Log.w("ViewDebug", "Aborting rendering commands capture " + "due to IOException writing to output stream", ex); diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java index 790b93a1f495..5ac878d88100 100644 --- a/core/java/android/view/translation/UiTranslationController.java +++ b/core/java/android/view/translation/UiTranslationController.java @@ -155,6 +155,7 @@ public class UiTranslationController { destroyTranslators(); runForEachView((view, callback) -> { callback.onClearTranslation(view); + view.clearViewTranslationResponse(); if (view.hasTranslationTransientState()) { view.setHasTransientState(false); view.setHasTranslationTransientState(false); diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 73d56daab6fb..8a044fd06dd5 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -814,7 +814,9 @@ public class RemoteViews implements Parcelable, Filter { // The PendingIntent template is stored in the view's tag. OnItemClickListener listener = (parent, view, position, id) -> { RemoteResponse response = findRemoteResponseTag(view); - response.handleViewInteraction(view, handler); + if (response != null) { + response.handleViewInteraction(view, handler); + } }; av.setOnItemClickListener(listener); av.setTag(pendingIntentTemplate); diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java index b35eb065e3fb..862829bf9b55 100644 --- a/core/java/android/widget/Toast.java +++ b/core/java/android/widget/Toast.java @@ -71,6 +71,9 @@ import java.util.List; * Note that * <a href="{@docRoot}reference/com/google/android/material/snackbar/Snackbar">Snackbars</a> are * preferred for brief messages while the app is in the foreground. + * <p> + * Note that toasts being sent from the background are rate limited, so avoid sending such toasts + * in quick succession. * * <div class="special reference"> * <h3>Developer Guides</h3> diff --git a/core/java/android/widget/ToastPresenter.java b/core/java/android/widget/ToastPresenter.java index 0f2a3ca6936b..eccff0692fab 100644 --- a/core/java/android/widget/ToastPresenter.java +++ b/core/java/android/widget/ToastPresenter.java @@ -69,7 +69,7 @@ public class ToastPresenter { private final Context mContext; private final Resources mResources; private final WindowManager mWindowManager; - private final AccessibilityManager mAccessibilityManager; + private final IAccessibilityManager mAccessibilityManager; private final INotificationManager mNotificationManager; private final String mPackageName; private final WindowManager.LayoutParams mParams; @@ -83,16 +83,7 @@ public class ToastPresenter { mWindowManager = context.getSystemService(WindowManager.class); mNotificationManager = notificationManager; mPackageName = packageName; - - // We obtain AccessibilityManager manually via its constructor instead of using method - // AccessibilityManager.getInstance() for 2 reasons: - // 1. We want to be able to inject IAccessibilityManager in tests to verify behavior. - // 2. getInstance() caches the instance for the process even if we pass a different - // context to it. This is problematic for multi-user because callers can pass a context - // created via Context.createContextAsUser(). - mAccessibilityManager = new AccessibilityManager(context, accessibilityManager, - context.getUserId()); - + mAccessibilityManager = accessibilityManager; mParams = createLayoutParams(); } @@ -283,7 +274,16 @@ public class ToastPresenter { * enabled. */ public void trySendAccessibilityEvent(View view, String packageName) { - if (!mAccessibilityManager.isEnabled()) { + // We obtain AccessibilityManager manually via its constructor instead of using method + // AccessibilityManager.getInstance() for 2 reasons: + // 1. We want to be able to inject IAccessibilityManager in tests to verify behavior. + // 2. getInstance() caches the instance for the process even if we pass a different + // context to it. This is problematic for multi-user because callers can pass a context + // created via Context.createContextAsUser(). + final AccessibilityManager accessibilityManager = + new AccessibilityManager(mContext, mAccessibilityManager, mContext.getUserId()); + if (!accessibilityManager.isEnabled()) { + accessibilityManager.removeClient(); return; } AccessibilityEvent event = AccessibilityEvent.obtain( @@ -291,7 +291,11 @@ public class ToastPresenter { event.setClassName(Toast.class.getName()); event.setPackageName(packageName); view.dispatchPopulateAccessibilityEvent(event); - mAccessibilityManager.sendAccessibilityEvent(event); + accessibilityManager.sendAccessibilityEvent(event); + // Every new instance of A11yManager registers an IA11yManagerClient object with the + // backing service. This client isn't removed until the calling process is destroyed, + // causing a leak here. We explicitly remove the client. + accessibilityManager.removeClient(); } private void addToastView() { diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 99868346f95b..68388d98dbb4 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -232,6 +232,7 @@ cc_library_shared { "libseccomp_policy", "libgrallocusage", "libscrypt_static", + "libstatssocket_lazy", ], shared_libs: [ @@ -295,11 +296,8 @@ cc_library_shared { "libnativewindow", "libdl", "libdl_android", - "libstatslog", - "libstatssocket", "libtimeinstate", "server_configurable_flags", - "libstatspull", ], export_shared_lib_headers: [ // our headers include libnativewindow's public headers diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 5ca4ec0aae13..6e2b9cf250c6 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -42,6 +42,7 @@ #include "android_media_AudioFormat.h" #include "android_media_AudioProfile.h" #include "android_media_MicrophoneInfo.h" +#include "android_util_Binder.h" // ---------------------------------------------------------------------------- @@ -850,6 +851,11 @@ android_media_AudioSystem_checkAudioFlinger(JNIEnv *env, jobject clazz) return (jint) check_AudioSystem_Command(AudioSystem::checkAudioFlinger()); } +static void android_media_AudioSystem_setAudioFlingerBinder(JNIEnv *env, jobject clazz, + jobject audioFlinger) { + AudioSystem::setAudioFlingerBinder(android::ibinderForJavaObject(env, audioFlinger)); +} + static void convertAudioGainConfigToNative(JNIEnv *env, struct audio_gain_config *nAudioGainConfig, const jobject jAudioGainConfig, @@ -2728,6 +2734,8 @@ static const JNINativeMethod gMethods[] = {"getOutputLatency", "(I)I", (void *)android_media_AudioSystem_getOutputLatency}, {"setLowRamDevice", "(ZJ)I", (void *)android_media_AudioSystem_setLowRamDevice}, {"checkAudioFlinger", "()I", (void *)android_media_AudioSystem_checkAudioFlinger}, + {"setAudioFlingerBinder", "(Landroid/os/IBinder;)V", + (void *)android_media_AudioSystem_setAudioFlingerBinder}, {"listAudioPorts", "(Ljava/util/ArrayList;[I)I", (void *)android_media_AudioSystem_listAudioPorts}, {"createAudioPatch", diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 6b6cbea94009..d7010298adba 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -693,8 +693,8 @@ <!-- Added in S --> <protected-broadcast android:name="android.scheduling.action.REBOOT_READY" /> <protected-broadcast android:name="android.app.action.DEVICE_POLICY_CONSTANTS_CHANGED" /> - <protected-broadcast android:name="android.app.action.SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED" /> + <protected-broadcast android:name="android.app.action.ACTION_SHOW_NEW_USER_DISCLAIMER" /> <!-- ====================================================================== --> <!-- RUNTIME PERMISSIONS --> @@ -1408,13 +1408,13 @@ <!-- @SystemApi Required in addition to android.permission.CAMERA to be able to access system only camera devices. - <p>Protection level: system|signature + <p>Protection level: system|signature|role @hide --> <permission android:name="android.permission.SYSTEM_CAMERA" android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_systemCamera" android:description="@string/permdesc_systemCamera" - android:protectionLevel="system|signature" /> + android:protectionLevel="system|signature|role" /> <!-- @SystemApi Allows receiving the camera service notifications when a camera is opened (by a certain application package) or closed. diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 77d3e6066100..09d6266e42b2 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -1961,7 +1961,7 @@ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"يؤدي استخدام ميزة \"توفير شحن البطارية\" إلى تفعيل وضع \"المظهر الداكن\" وتقييد أو إيقاف الأنشطة في الخلفية وبعض التأثيرات المرئية وميزات معيّنة وبعض اتصالات الشبكات."</string> <string name="battery_saver_description" msgid="8518809702138617167">"يؤدي استخدام ميزة \"توفير شحن البطارية\" إلى تفعيل وضع \"المظهر الداكن\" وتقييد أو إيقاف الأنشطة في الخلفية وبعض التأثيرات المرئية وميزات معيّنة وبعض اتصالات الشبكات."</string> <string name="data_saver_description" msgid="4995164271550590517">"للمساعدة في خفض استخدام البيانات، تمنع ميزة \"توفير البيانات\" بعض التطبيقات من إرسال البيانات وتلقّيها في الخلفية. يمكن للتطبيقات المتاحة لديك الآن استخدام البيانات، ولكن لا يمكنها الإكثار من ذلك. وهذا يعني أن الصور مثلاً لا تظهر حتى تنقر عليها."</string> - <string name="data_saver_enable_title" msgid="7080620065745260137">"هل تريد تفعيل توفير البيانات؟"</string> + <string name="data_saver_enable_title" msgid="7080620065745260137">"هل تريد تفعيل ميزة \"توفير البيانات\"؟"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"تفعيل"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> <item quantity="zero">لمدة أقل من دقيقة (%1$d) (حتى <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> @@ -2201,8 +2201,8 @@ <string name="harmful_app_warning_title" msgid="8794823880881113856">"تم العثور على تطبيق ضار"</string> <string name="slices_permission_request" msgid="3677129866636153406">"يريد تطبيق <xliff:g id="APP_0">%1$s</xliff:g> عرض شرائح تطبيق <xliff:g id="APP_2">%2$s</xliff:g>."</string> <string name="screenshot_edit" msgid="7408934887203689207">"تعديل"</string> - <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"سيهتز الهاتف عند تلقّي المكالمات والإشعارات"</string> - <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"سيتم كتم صوت الهاتف عند تلقي المكالمات والإشعارات"</string> + <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"سيهتز الهاتف عند تلقّي المكالمات والإشعارات."</string> + <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"سيتم كتم صوت الهاتف عند تلقي المكالمات والإشعارات."</string> <string name="notification_channel_system_changes" msgid="2462010596920209678">"تغييرات النظام"</string> <string name="notification_channel_do_not_disturb" msgid="7832584281883687653">"عدم الإزعاج"</string> <string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"جديد: يؤدي تفعيل ميزة \"عدم الإزعاج\" إلى إخفاء الإشعارات."</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 79043149b907..8301144fb9d3 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -1564,7 +1564,7 @@ <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Kilidi açmaq üçün vurun."</string> <string name="action_bar_home_description" msgid="1501655419158631974">"Evə naviqasiya et"</string> <string name="action_bar_up_description" msgid="6611579697195026932">"Yuxarı gedin"</string> - <string name="action_menu_overflow_description" msgid="4579536843510088170">"Digər variantlar"</string> + <string name="action_menu_overflow_description" msgid="4579536843510088170">"Digər seçimlər"</string> <string name="action_bar_home_description_format" msgid="5087107531331621803">"%1$s, %2$s"</string> <string name="action_bar_home_subtitle_description_format" msgid="4346835454749569826">"%1$s, %2$s, %3$s"</string> <string name="storage_internal" msgid="8490227947584914460">"Daxili paylaşılan yaddaş"</string> @@ -1711,11 +1711,11 @@ <string name="color_inversion_feature_name" msgid="326050048927789012">"Rəng İnversiyası"</string> <string name="color_correction_feature_name" msgid="3655077237805422597">"Rəng korreksiyası"</string> <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Birəlli rejim"</string> - <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Əlavə qaraltma"</string> + <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Əlavə tündləşmə"</string> <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Səs səviyyəsi düymələrinə basıb saxlayın. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> aktiv edildi."</string> <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Səs səviyyəsi düymələrinə basılaraq saxlanıb. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> deaktiv edilib."</string> <string name="accessibility_shortcut_spoken_feedback" msgid="4228997042855695090">"<xliff:g id="SERVICE_NAME">%1$s</xliff:g> istifadə etmək üçün hər iki səs düyməsini üç saniyə basıb saxlayın"</string> - <string name="accessibility_button_prompt_text" msgid="8343213623338605305">"Əlçatımlılıq düyməsinə toxunduqda istifadə edəcəyiniz funksiyanı seçin:"</string> + <string name="accessibility_button_prompt_text" msgid="8343213623338605305">"Xüsusi imkanlar düyməsinə toxunanda istədiyiniz funksiyanı seçin:"</string> <string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"Əlçatımlılıq jesti (iki barmağınızla ekranın aşağısından yuxarı doğru sürüşdürün) ilə istifadə edəcəyiniz funksiyanı seçin:"</string> <string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"Əlçatımlılıq jesti (üç barmağınızla ekranın aşağısından yuxarı doğru sürüşdürün) ilə istifadə edəcəyiniz funksiyanı seçin:"</string> <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"Funksiyalar arasında keçid etmək üçün əlçatımlılıq düyməsinə toxunub saxlayın."</string> @@ -1937,7 +1937,7 @@ <string name="usb_midi_peripheral_name" msgid="490523464968655741">"Android USB Peripheral Port"</string> <string name="usb_midi_peripheral_manufacturer_name" msgid="7557148557088787741">"Android"</string> <string name="usb_midi_peripheral_product_name" msgid="2836276258480904434">"USB Peripheral Port"</string> - <string name="floating_toolbar_open_overflow_description" msgid="2260297653578167367">"Daha çox seçim"</string> + <string name="floating_toolbar_open_overflow_description" msgid="2260297653578167367">"Digər seçimlər"</string> <string name="floating_toolbar_close_overflow_description" msgid="3949818077708138098">"Yüklənməni qapadın"</string> <string name="maximize_button_text" msgid="4258922519914732645">"Böyüdün"</string> <string name="close_button_text" msgid="10603510034455258">"Qapadın"</string> @@ -2005,7 +2005,7 @@ <string name="app_category_productivity" msgid="1844422703029557883">"Məhsuldarlıq"</string> <string name="app_category_accessibility" msgid="6643521607848547683">"Əlçatımlılıq"</string> <string name="device_storage_monitor_notification_channel" msgid="5164244565844470758">"Cihaz yaddaşı"</string> - <string name="adb_debugging_notification_channel_tv" msgid="4764046459631031496">"USB sazlama"</string> + <string name="adb_debugging_notification_channel_tv" msgid="4764046459631031496">"USB ilə sazlama"</string> <string name="time_picker_hour_label" msgid="4208590187662336864">"saat"</string> <string name="time_picker_minute_label" msgid="8307452311269824553">"dəqiqə"</string> <string name="time_picker_header_text" msgid="9073802285051516688">"Vaxtı ayarlayın"</string> @@ -2277,7 +2277,7 @@ <string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string> <string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string> <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Yeni böyütmə ayarları"</string> - <string name="window_magnification_prompt_content" msgid="8159173903032344891">"İndi ekranınızın bir hissəsini böyüdə bilərsiniz"</string> + <string name="window_magnification_prompt_content" msgid="8159173903032344891">"İndi ekran hissəsini böyütmək olar"</string> <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ayarlarda aktiv edin"</string> <string name="dismiss_action" msgid="1728820550388704784">"Qapadın"</string> <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Cihaz mikrofonunu blokdan çıxarın"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 4099ccbb2f62..1dadb14a145b 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1869,7 +1869,7 @@ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Estalvi de bateria activa el tema fosc i limita o desactiva l\'activitat en segon pla, alguns efectes visuals, determinades funcions i algunes connexions a la xarxa."</string> <string name="battery_saver_description" msgid="8518809702138617167">"Estalvi de bateria activa el tema fosc i limita o desactiva l\'activitat en segon pla, alguns efectes visuals, determinades funcions i algunes connexions a la xarxa."</string> <string name="data_saver_description" msgid="4995164271550590517">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a les dades, però menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string> - <string name="data_saver_enable_title" msgid="7080620065745260137">"Activar l\'Economitzador de dades?"</string> + <string name="data_saver_enable_title" msgid="7080620065745260137">"Vols activar l\'Economitzador de dades?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activa"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> <item quantity="other">Durant %1$d minuts (fins a les <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 6dbf7d4d1afe..718fe0f385db 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -2225,7 +2225,7 @@ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah nelze sdílet pomocí osobních aplikací"</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah nelze otevřít pomocí osobních aplikací"</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Pracovní profil je pozastaven"</string> - <string name="resolver_switch_on_work" msgid="463709043650610420">"Klepnutím zapnete"</string> + <string name="resolver_switch_on_work" msgid="463709043650610420">"Klepnutím ho zapnete"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žádné pracovní aplikace"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žádné osobní aplikace"</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Otevřít v aplikaci <xliff:g id="APP">%s</xliff:g> v osobním profilu?"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index a67033fec66e..392973c5cfc9 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -350,7 +350,7 @@ <string name="permlab_fullScreenIntent" msgid="4310888199502509104">"Benachrichtigungen auf einem gesperrten Gerät als Vollbildaktivitäten anzeigen"</string> <string name="permdesc_fullScreenIntent" msgid="1100721419406643997">"Ermöglicht der App, Benachrichtigungen auf einem gesperrten Gerät als Vollbildaktivitäten anzuzeigen"</string> <string name="permlab_install_shortcut" msgid="7451554307502256221">"Verknüpfungen installieren"</string> - <string name="permdesc_install_shortcut" msgid="4476328467240212503">"Ermöglicht einer App das Hinzufügen von Verknüpfungen zum Startbildschirm ohne Eingriff des Nutzers"</string> + <string name="permdesc_install_shortcut" msgid="4476328467240212503">"ohne Zutun des Nutzers Verknüpfungen zum Startbildschirm hinzufügen."</string> <string name="permlab_uninstall_shortcut" msgid="295263654781900390">"Verknüpfungen deinstallieren"</string> <string name="permdesc_uninstall_shortcut" msgid="1924735350988629188">"Ermöglicht einer App das Entfernen von Verknüpfungen vom Startbildschirm ohne Eingriff des Nutzers"</string> <string name="permlab_processOutgoingCalls" msgid="4075056020714266558">"Ausgehende Anrufe umleiten"</string> diff --git a/core/res/res/values-es-rCO/donottranslate-cldr.xml b/core/res/res/values-es-rCO/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rCO/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rCR/donottranslate-cldr.xml b/core/res/res/values-es-rCR/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rCR/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rEC/donottranslate-cldr.xml b/core/res/res/values-es-rEC/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rEC/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rGT/donottranslate-cldr.xml b/core/res/res/values-es-rGT/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rGT/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rHN/donottranslate-cldr.xml b/core/res/res/values-es-rHN/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rHN/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rNI/donottranslate-cldr.xml b/core/res/res/values-es-rNI/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rNI/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rPA/donottranslate-cldr.xml b/core/res/res/values-es-rPA/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rPA/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rPE/donottranslate-cldr.xml b/core/res/res/values-es-rPE/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rPE/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es-rSV/donottranslate-cldr.xml b/core/res/res/values-es-rSV/donottranslate-cldr.xml new file mode 100755 index 000000000000..db438f22208f --- /dev/null +++ b/core/res/res/values-es-rSV/donottranslate-cldr.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="month_day_year">%-e %B %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%-e %b %Y, %H:%M:%S</string> + <string name="date_time">%1$s, %2$s</string> +</resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 1b6d3d0dd5bd..0c5de09f514f 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -148,7 +148,7 @@ <string name="wfc_mode_wifi_only_summary" msgid="104951993894678665">"Solo Wi-Fi"</string> <!-- no translation found for crossSimFormat_spn (9125246077491634262) --> <skip /> - <string name="crossSimFormat_spn_cross_sim_calling" msgid="5620807020002879057">"Llamadas de reserva de <xliff:g id="SPN">%s</xliff:g>"</string> + <string name="crossSimFormat_spn_cross_sim_calling" msgid="5620807020002879057">"Alternativa para llamadas de <xliff:g id="SPN">%s</xliff:g>"</string> <string name="cfTemplateNotForwarded" msgid="862202427794270501">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: No desviada"</string> <string name="cfTemplateForwarded" msgid="9132506315842157860">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> <string name="cfTemplateForwardedTime" msgid="735042369233323609">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> transcurridos <xliff:g id="TIME_DELAY">{2}</xliff:g> segundos"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index d9157831fc2b..d0bdd6fe1bc2 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -609,10 +609,10 @@ <string-array name="fingerprint_error_vendor"> </string-array> <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Hatz-markaren ikonoa"</string> - <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Aurpegiaren bidez desblokeatzeko eginbidea"</string> + <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Aurpegi bidez desblokeatzeko eginbidea"</string> <string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Erregistratu aurpegia berriro"</string> <string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ezagutzea hobetzeko, erregistratu aurpegia berriro"</string> - <string name="face_setup_notification_title" msgid="8843461561970741790">"Konfiguratu aurpegiaren bidez desblokeatzeko eginbidea"</string> + <string name="face_setup_notification_title" msgid="8843461561970741790">"Konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string> <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefonoa desblokeatzeko, begira iezaiozu"</string> <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfiguratu telefonoa desblokeatzeko modu gehiago"</string> <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Sakatu hau hatz-marka bat gehitzeko"</string> @@ -642,16 +642,16 @@ <string name="face_error_timeout" msgid="2598544068593889762">"Saiatu berriro aurpegiaren bidez desblokeatzen"</string> <string name="face_error_no_space" msgid="5649264057026021723">"Ezin dira gorde aurpegiaren datu berriak. Ezabatu zaharrak."</string> <string name="face_error_canceled" msgid="2164434737103802131">"Utzi da aurpegiaren bidezko eragiketa."</string> - <string name="face_error_user_canceled" msgid="5766472033202928373">"Erabiltzaileak aurpegiaren bidez desblokeatzeko aukera utzi du"</string> + <string name="face_error_user_canceled" msgid="5766472033202928373">"Erabiltzaileak aurpegi bidez desblokeatzeko aukera utzi du"</string> <string name="face_error_lockout" msgid="7864408714994529437">"Saiakera gehiegi egin dituzu. Saiatu berriro geroago."</string> - <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Saiakera gehiegi egin dira. Desgaitu egin da aurpegiaren bidez desblokeatzeko eginbidea."</string> + <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Saiakera gehiegi egin dira. Desgaitu egin da aurpegi bidez desblokeatzeko eginbidea."</string> <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Saiakera gehiegi egin dira. Horren ordez, erabili pantailaren blokeoa."</string> <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ezin da egiaztatu aurpegia. Saiatu berriro."</string> - <string name="face_error_not_enrolled" msgid="1134739108536328412">"Ez duzu konfiguratu aurpegiaren bidez desblokeatzeko eginbidea"</string> - <string name="face_error_hw_not_present" msgid="7940978724978763011">"Aurpegiaren bidez desblokeatzeko eginbidea ez da bateragarria gailu honekin"</string> + <string name="face_error_not_enrolled" msgid="1134739108536328412">"Ez duzu konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string> + <string name="face_error_hw_not_present" msgid="7940978724978763011">"Aurpegi bidez desblokeatzeko eginbidea ez da bateragarria gailu honekin"</string> <string name="face_error_security_update_required" msgid="5076017208528750161">"Sentsorea aldi baterako desgaitu da."</string> <string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> aurpegia"</string> - <string name="face_app_setting_name" msgid="5854024256907828015">"Erabili aurpegiaren bidez desblokeatzeko eginbidea"</string> + <string name="face_app_setting_name" msgid="5854024256907828015">"Erabili aurpegi bidez desblokeatzeko eginbidea"</string> <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Erabili aurpegia edo pantailaren blokeoa"</string> <string name="face_dialog_default_subtitle" msgid="6620492813371195429">"Aurrera egiteko, erabili aurpegia"</string> <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Aurrera egiteko, erabili aurpegia edo pantailaren blokeoa"</string> @@ -884,7 +884,7 @@ <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Saiatu berriro"</string> <string name="lockscreen_password_wrong" msgid="8605355913868947490">"Saiatu berriro"</string> <string name="lockscreen_storage_locked" msgid="634993789186443380">"Desblokeatu eginbide eta datu guztiak erabiltzeko"</string> - <string name="faceunlock_multiple_failures" msgid="681991538434031708">"Gainditu da aurpegiaren bidez desblokeatzeko saiakera-muga"</string> + <string name="faceunlock_multiple_failures" msgid="681991538434031708">"Gainditu da aurpegi bidez desblokeatzeko saiakera-muga"</string> <string name="lockscreen_missing_sim_message_short" msgid="1248431165144893792">"Ez dago SIM txartelik"</string> <string name="lockscreen_missing_sim_message" product="tablet" msgid="8596805728510570760">"Ez dago SIM txartelik tabletan."</string> <string name="lockscreen_missing_sim_message" product="tv" msgid="2582768023352171073">"Ez dago SIM txartelik Android TV gailuan."</string> @@ -954,7 +954,7 @@ <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"Zabaldu desblokeatzeko eremua."</string> <string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"Hatza lerratuta desblokeatzea."</string> <string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"Ereduaren bidez desblokeatzea."</string> - <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Aurpegiaren bidez desblokeatzeko eginbidea."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Aurpegi bidez desblokeatzeko eginbidea."</string> <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"PIN kodearen bidez desblokeatzea."</string> <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"SIMa desblokeatzeko PINa."</string> <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"SIM txartela desblokeatzeko PUK kodea."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index c1c0349817e7..ac6cca83a330 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -1355,7 +1355,7 @@ <string name="no_permissions" msgid="5729199278862516390">"Lupia ei tarvita"</string> <string name="perm_costs_money" msgid="749054595022779685">"tämä voi maksaa"</string> <string name="dlg_ok" msgid="5103447663504839312">"OK"</string> - <string name="usb_charging_notification_title" msgid="1674124518282666955">"Laitetta ladataan USB-yhteyden kautta"</string> + <string name="usb_charging_notification_title" msgid="1674124518282666955">"Laite lataa USB-yhteydellä"</string> <string name="usb_supplying_notification_title" msgid="5378546632408101811">"Ladataan yhdistettyä laitetta USB:n kautta"</string> <string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB-tiedostonsiirto on käytössä"</string> <string name="usb_ptp_notification_title" msgid="5043437571863443281">"PTP USB:n kautta on käytössä"</string> @@ -1367,7 +1367,7 @@ <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analoginen äänilaite havaittu"</string> <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Liitetty laite ei ole yhteensopiva puhelimen kanssa. Napauta, niin näet lisätietoja."</string> <string name="adb_active_notification_title" msgid="408390247354560331">"USB-vianetsintä yhdistetty"</string> - <string name="adb_active_notification_message" msgid="5617264033476778211">"Laita USB-vianetsintä pois päältä napauttamalla"</string> + <string name="adb_active_notification_message" msgid="5617264033476778211">"Sulje USB-vianetsintä napauttamalla"</string> <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Poista USB-vianetsintä käytöstä valitsemalla tämä."</string> <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Langaton virheenkorjaus yhdistetty"</string> <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Poista langaton virheenkorjaus käytöstä napauttamalla"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 2660df69d04b..f04e71e3e1aa 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -209,8 +209,8 @@ <string name="factory_reset_message" msgid="2657049595153992213">"Impossible d\'utiliser l\'application d\'administration. Les données de votre appareil vont maintenant être effacées.\n\nSi vous avez des questions, contactez l\'administrateur de votre organisation."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impression désactivée par <xliff:g id="OWNER_APP">%s</xliff:g>."</string> <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activez votre profil pro"</string> - <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vos applications personnelles seront bloquées jusqu\'à ce que vous activiez votre profil professionnel"</string> - <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Vos applications personnelles seront bloquées le <xliff:g id="DATE">%1$s</xliff:g> à <xliff:g id="TIME">%2$s</xliff:g>. Votre administrateur informatique ne vous autorise pas à désactiver votre profil professionnel pendant plus de <xliff:g id="NUMBER">%3$d</xliff:g> jours."</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vos applis perso sont bloquées tant que vous n\'avez pas activé votre profil pro"</string> + <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Vos applis perso seront bloquées le <xliff:g id="DATE">%1$s</xliff:g> à <xliff:g id="TIME">%2$s</xliff:g>. Votre administrateur ne permet pas que votre profil pro reste désactivé pendant plus de <xliff:g id="NUMBER">%3$d</xliff:g> jours."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activer"</string> <string name="me" msgid="6207584824693813140">"Moi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string> @@ -1869,7 +1869,7 @@ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"L\'économiseur de batterie active le thème sombre et limite ou désactive les activités en arrière-plan ainsi que certains effets visuels, fonctionnalités et connexions réseau."</string> <string name="battery_saver_description" msgid="8518809702138617167">"L\'économiseur de batterie active le thème sombre et limite ou désactive les activités en arrière-plan ainsi que certains effets visuels, fonctionnalités et connexions réseau."</string> <string name="data_saver_description" msgid="4995164271550590517">"Pour réduire la consommation des données, l\'Économiseur de données empêche certaines applis d\'envoyer ou de recevoir des données en arrière-plan. Les applis que vous utiliserez pourront toujours accéder aux données, mais le feront moins fréquemment. Par exemple, les images pourront ne pas s\'afficher tant que vous n\'aurez pas appuyé pas dessus."</string> - <string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données ?"</string> + <string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'Économiseur de données ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> <item quantity="one">Pendant %1$d minute (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> @@ -2070,7 +2070,7 @@ <string name="slices_permission_request" msgid="3677129866636153406">"<xliff:g id="APP_0">%1$s</xliff:g> souhaite afficher des éléments de <xliff:g id="APP_2">%2$s</xliff:g>"</string> <string name="screenshot_edit" msgid="7408934887203689207">"Modifier"</string> <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"Vibreur pour les appels et les notifications"</string> - <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"Sonnerie désactivée pour les appels et les notifications"</string> + <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"Sons désactivés pour les appels et les notifications"</string> <string name="notification_channel_system_changes" msgid="2462010596920209678">"Modifications du système"</string> <string name="notification_channel_do_not_disturb" msgid="7832584281883687653">"Ne pas déranger"</string> <string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"Nouveau : Le mode Ne pas déranger masque les notifications"</string> @@ -2157,7 +2157,7 @@ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Impossible de partager ce contenu avec des applis personnelles"</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Impossible d\'ouvrir ce contenu avec des applis personnelles"</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil professionnel en pause"</string> - <string name="resolver_switch_on_work" msgid="463709043650610420">"Appuyer pour activer"</string> + <string name="resolver_switch_on_work" msgid="463709043650610420">"Appuyez pour l\'activer"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune appli professionnelle"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune appli personnelle"</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Ouvrir dans <xliff:g id="APP">%s</xliff:g> avec le profil personnel ?"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index d686450a6f3c..fd45cce3e5ec 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -990,7 +990,7 @@ <string name="autofill_province" msgid="3676846437741893159">"प्रांत"</string> <string name="autofill_postal_code" msgid="7034789388968295591">"डाक कोड"</string> <string name="autofill_state" msgid="3341725337190434069">"राज्य"</string> - <string name="autofill_zip_code" msgid="1315503730274962450">"ज़िप कोड"</string> + <string name="autofill_zip_code" msgid="1315503730274962450">"पिन कोड"</string> <string name="autofill_county" msgid="7781382735643492173">"काउंटी"</string> <string name="autofill_island" msgid="5367139008536593734">"द्वीप"</string> <string name="autofill_district" msgid="6428712062213557327">"जिला"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index c430c4ab39db..9e0fb1edc610 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -2190,7 +2190,7 @@ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Taj se sadržaj ne može otvoriti pomoću poslovnih aplikacija"</string> <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Taj se sadržaj ne može dijeliti pomoću osobnih aplikacija"</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Taj se sadržaj ne može otvoriti pomoću osobnih aplikacija"</string> - <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni je profil pauziran"</string> + <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni profil je pauziran"</string> <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Poslovne aplikacije nisu dostupne"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Osobne aplikacije nisu dostupne"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 1ff6e9dcb9a0..b84778fbdcd0 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -2225,7 +2225,7 @@ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"אי אפשר לשתף את התוכן הזה עם אפליקציות לשימוש אישי"</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"אי אפשר לפתוח את התוכן הזה באמצעות אפליקציות לשימוש אישי"</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"פרופיל העבודה מושהה"</string> - <string name="resolver_switch_on_work" msgid="463709043650610420">"יש להקיש כדי להפעיל"</string> + <string name="resolver_switch_on_work" msgid="463709043650610420">"יש להקיש כדי להפעיל את פרופיל העבודה"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"אין אפליקציות לעבודה"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"אין אפליקציות לשימוש אישי"</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"לפתוח באפליקציה <xliff:g id="APP">%s</xliff:g> בפרופיל האישי?"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 9e72ec87dac5..ff5edfebc131 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -246,7 +246,7 @@ <string name="global_action_lock" msgid="6949357274257655383">"Экранды құлыптау"</string> <string name="global_action_power_off" msgid="4404936470711393203">"Өшіру"</string> <string name="global_action_power_options" msgid="1185286119330160073">"Қуат"</string> - <string name="global_action_restart" msgid="4678451019561687074">"Қайта қосу"</string> + <string name="global_action_restart" msgid="4678451019561687074">"Өшіріп қосу"</string> <string name="global_action_emergency" msgid="1387617624177105088">"Төтенше жағдай"</string> <string name="global_action_bug_report" msgid="5127867163044170003">"Вирус туралы хабарлау"</string> <string name="global_action_logout" msgid="6093581310002476511">"Сеансты аяқтау"</string> @@ -442,7 +442,7 @@ <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"болжалды орналасқан жер туралы ақпаратқа тек ашық экранда кіру"</string> <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"Бұл қолданба пайдаланылып жатқанда, ол Локация қызметтерінен болжалды геодерегіңізді ала алады. Геодеректі алу үшін құрылғыңызға арналған Локация қызметтері қосулы тұруы керек."</string> <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"геодеректерді фондық режимде пайдалану"</string> - <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"Бұл қолданба пайдаланылмайтын кезде де, ол геодеректі кез келген уақытта пайдалана алады."</string> + <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"Бұл қолданба кез келген уақытта (пайдаланылмайтын кезде де) локацияны пайдалана алады."</string> <string name="permlab_modifyAudioSettings" msgid="6129039778010031815">"аудио параметрлерін өзгерту"</string> <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"Қолданбаға дыбыс қаттылығы және аудио шығыс үндеткішін таңдау сияқты жаһандық аудио параметрлерін өзгерту мүмкіндігін береді."</string> <string name="permlab_recordAudio" msgid="1208457423054219147">"аудио жазу"</string> @@ -971,7 +971,7 @@ <string name="factorytest_failed" msgid="3190979160945298006">"Зауыт тесті орындалмады."</string> <string name="factorytest_not_system" msgid="5658160199925519869">"ЗАУЫТ_TEСТІ әрекетінің қолдауы жүйеде/қолданбада орнатылған жинақтар үшін ғана ұсынылған."</string> <string name="factorytest_no_action" msgid="339252838115675515">"ЗАУЫТ_TEСТІ әрекетін жабдықтайтын жинақ табылмады."</string> - <string name="factorytest_reboot" msgid="2050147445567257365">"Қайта қосу"</string> + <string name="factorytest_reboot" msgid="2050147445567257365">"Өшіріп қосу"</string> <string name="js_dialog_title" msgid="7464775045615023241">"\"<xliff:g id="TITLE">%s</xliff:g>\" парағында былай делінген:"</string> <string name="js_dialog_title_default" msgid="3769524569903332476">"JavaScript"</string> <string name="js_dialog_before_unload_title" msgid="7012587995876771246">"Жылжуды растау"</string> @@ -1239,7 +1239,7 @@ <string name="unsupported_display_size_show" msgid="980129850974919375">"Үнемі көрсету"</string> <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы сіздің Android OЖ-бен үйлеспейді және дұрыс жұмыс істемеуі ықтимал. Қолданбаның жаңартылған нұсқасы қолжетімді болуы мүмкін."</string> <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Үнемі көрсету"</string> - <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Жаңа нұсқасының бар-жоғын тексеру"</string> + <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Жаңарту бар-жоғын тексеру"</string> <string name="smv_application" msgid="3775183542777792638">"<xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасы (<xliff:g id="PROCESS">%2$s</xliff:g> процесі) өзі қолданған StrictMode саясатын бұзды."</string> <string name="smv_process" msgid="1398801497130695446">"<xliff:g id="PROCESS">%1$s</xliff:g> үрдісі өздігінен күшіне енген ҚатаңРежим ережесін бұзды."</string> <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Телефон жаңартылуда…"</string> @@ -1830,7 +1830,7 @@ <string name="reason_unknown" msgid="5599739807581133337">"белгісіз"</string> <string name="reason_service_unavailable" msgid="5288405248063804713">"Принтер қызметі қосылмаған"</string> <string name="print_service_installed_title" msgid="6134880817336942482">"<xliff:g id="NAME">%s</xliff:g> қызметі орнатылды"</string> - <string name="print_service_installed_message" msgid="7005672469916968131">"Қосу үшін түрту"</string> + <string name="print_service_installed_message" msgid="7005672469916968131">"Қосу үшін түртіңіз"</string> <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"Әкімшінің PIN кодын енгізіңіз"</string> <string name="restr_pin_enter_pin" msgid="373139384161304555">"PIN енгізу"</string> <string name="restr_pin_incorrect" msgid="3861383632940852496">"Дұрыс емес"</string> @@ -1976,7 +1976,7 @@ <string name="app_blocked_title" msgid="7353262160455028160">"Қолданба қолжетімді емес"</string> <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> қазір қолжетімді емес."</string> <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Қолданба Android жүйесінің ескі нұсқасына арналған және дұрыс жұмыс істемеуі мүмкін. Жаңартылған нұсқаны тексеріңіз немесе әзірлеушіге хабарласыңыз."</string> - <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңа нұсқасының бар-жоғын тексеру"</string> + <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңарту бар-жоғын тексеру"</string> <string name="new_sms_notification_title" msgid="6528758221319927107">"Сізде жаңа хабарлар бар"</string> <string name="new_sms_notification_content" msgid="3197949934153460639">"Көру үшін SMS қолданбасын ашыңыз"</string> <string name="profile_encrypted_title" msgid="9001208667521266472">"Кейбір функциялар істемеуі мүмкін."</string> @@ -2157,7 +2157,7 @@ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бұл мазмұнды жеке қолданбалармен бөлісу мүмкін емес."</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бұл мазмұнды жеке қолданбалармен ашу мүмкін емес."</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Жұмыс профилі кідіртілді."</string> - <string name="resolver_switch_on_work" msgid="463709043650610420">"Қосу үшін түрту"</string> + <string name="resolver_switch_on_work" msgid="463709043650610420">"Қосу үшін түртіңіз"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жұмыс қолданбалары жоқ."</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке қолданбалар жоқ."</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Жеке профильдегі <xliff:g id="APP">%s</xliff:g> қолданбасында ашу керек пе?"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 470683d06134..a297d535dac1 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -1866,8 +1866,8 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಪ್ಡೇಟ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಳಿಸಿದ್ದಾರೆ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ಸರಿ"</string> - <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"ಬ್ಯಾಟರಿ ಸೇವರ್, ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು, ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಇತರ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕಗಳನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಆಫ್ ಮಾಡುತ್ತದೆ."</string> - <string name="battery_saver_description" msgid="8518809702138617167">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು, ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಇತರ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕಗಳನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಆಫ್ ಮಾಡುತ್ತದೆ."</string> + <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"ಬ್ಯಾಟರಿ ಸೇವರ್, ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು, ಕೆಲವು ಫೀಚರ್ಗಳು ಮತ್ತು ಇತರ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕಗಳನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಆಫ್ ಮಾಡುತ್ತದೆ."</string> + <string name="battery_saver_description" msgid="8518809702138617167">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು, ಕೆಲವು ಫೀಚರ್ಗಳು ಮತ್ತು ಇತರ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕಗಳನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಆಫ್ ಮಾಡುತ್ತದೆ."</string> <string name="data_saver_description" msgid="4995164271550590517">"ಡೇಟಾ ಬಳಕೆ ಕಡಿಮೆ ಮಾಡುವ ನಿಟ್ಟಿನಲ್ಲಿ, ಡೇಟಾ ಸೇವರ್ ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಆದರೆ ಪದೇ ಪದೇ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಇದರರ್ಥ, ಉದಾಹರಣೆಗೆ, ನೀವು ಅವುಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವವರೆಗೆ ಆ ಚಿತ್ರಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ಡೇಟಾ ಸೇವರ್ ಆನ್ ಮಾಡಬೇಕೇ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ಆನ್ ಮಾಡಿ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 5474a493c609..44d751e60e41 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -2157,7 +2157,7 @@ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"이 콘텐츠는 개인 앱을 통해 공유할 수 없습니다."</string> <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"이 콘텐츠는 개인 앱으로 열 수 없습니다."</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"직장 프로필이 일시중지됨"</string> - <string name="resolver_switch_on_work" msgid="463709043650610420">"탭하여 사용"</string> + <string name="resolver_switch_on_work" msgid="463709043650610420">"탭하여 사용 설정"</string> <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"직장 앱 없음"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"개인 앱 없음"</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"개인 프로필의 <xliff:g id="APP">%s</xliff:g>에서 여시겠습니까?"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 984e6f6a2166..c8f94fbbc5bd 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -1259,7 +1259,7 @@ <string name="fp_enrollment_powerbutton_intent_title" msgid="3385634173366119903">"Экран өчүрүлсүнбү?"</string> <string name="fp_enrollment_powerbutton_intent_message" msgid="6582149052513682522">"Манжаңыздын изин жөндөп жатканда күйгүзүү/өчүрүү баскычын басып алдыңыз.\n\nБул адатта экранды өчүрөт."</string> <string name="fp_enrollment_powerbutton_intent_positive_button" msgid="5963520983910436791">"Өчүрүү"</string> - <string name="fp_enrollment_powerbutton_intent_negative_button" msgid="6465764183480190748">"Жокко чыгаруу"</string> + <string name="fp_enrollment_powerbutton_intent_negative_button" msgid="6465764183480190748">"Жок"</string> <string name="heavy_weight_notification" msgid="8382784283600329576">"<xliff:g id="APP">%1$s</xliff:g> иштеп жатат"</string> <string name="heavy_weight_notification_detail" msgid="6802247239468404078">"Оюнга кайтуу үчүн таптаңыз"</string> <string name="heavy_weight_switcher_title" msgid="3861984210040100886">"Оюн тандоо"</string> @@ -1683,10 +1683,10 @@ <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Ыкчам иштетесизби?"</string> <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Атайын мүмкүнчүлүктөр функциясын пайдалануу үчүн ал күйгүзүлгөндө, үндү катуулатып/акырындаткан эки баскычты тең 3 секунддай коё бербей басып туруңуз."</string> <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Атайын мүмкүнчүлүктөрдүн ыкчам баскычын иштетесизби?"</string> - <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Атайын мүмкүнчүлүктөр функциясын иштетүү үчүн, үндү чоңойтуп/кичирейтүү баскычтарын бир нече секунд коё бербей басып туруңуз. Ушуну менен, түзмөгүңүз бир аз башкача иштеп калышы мүмкүн.\n\nУчурдагы функциялар:\n<xliff:g id="SERVICE">%1$s</xliff:g>\nТандалган функцияларды өзгөртүү үчүн Жөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнө өтүңүз."</string> + <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Атайын мүмкүнчүлүктөр функциясын иштетүү үчүн үндү чоңойтуп/кичирейтүү баскычтарын бир нече секунд коё бербей басып туруңуз. Ушуну менен, түзмөгүңүз бир аз башкача иштеп калышы мүмкүн.\n\nУчурдагы функциялар:\n<xliff:g id="SERVICE">%1$s</xliff:g>\nТандалган функцияларды өзгөртүү үчүн Жөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнө өтүңүз."</string> <string name="accessibility_shortcut_multiple_service_list" msgid="6935581470716541531">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string> <string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"<xliff:g id="SERVICE">%1$s</xliff:g> ыкчам баскычын иштетесизби?"</string> - <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"<xliff:g id="SERVICE">%1$s</xliff:g> кызматын иштетүү үчүн, үндү чоңойтуп/кичирейтүү баскычтарын бир нече секунд коё бербей басып туруңуз. Ушуну менен, түзмөгүңүз бир аз башкача иштеп калышы мүмкүн.\n\nБаскычтардын ушул айкалышын башка функцияга дайындоо үчүн, Жөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнө өтүңүз."</string> + <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"<xliff:g id="SERVICE">%1$s</xliff:g> кызматын иштетүү үчүн үндү чоңойтуп/кичирейтүү баскычтарын бир нече секунд коё бербей басып туруңуз. Ушуну менен, түзмөгүңүз бир аз башкача иштеп калышы мүмкүн.\n\nБаскычтардын ушул айкалышын башка функцияга дайындоо үчүн, Жөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнө өтүңүз."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ооба"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Жок"</string> <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"КҮЙҮК"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 69e3c74ea601..9d14a8d3834c 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -1239,7 +1239,7 @@ <string name="unsupported_display_size_show" msgid="980129850974919375">"नेहमी दर्शवा"</string> <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे Android OS च्या विसंगत आवृत्तीसाठी तयार केले होते आणि ते अनपेक्षित पद्धतीने काम करू शकते. ॲपची अपडेट केलेली आवृत्ती उपलब्ध असू शकते."</string> <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"नेहमी दर्शवा"</string> - <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"अपडेट आहे का ते तपासा"</string> + <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"अपडेटसाठी तपासा"</string> <string name="smv_application" msgid="3775183542777792638">"अॅप <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ने तिच्या स्वयं-लागू केलेल्या StrictMode धोरणाचे उल्लंघन केले आहे."</string> <string name="smv_process" msgid="1398801497130695446">"<xliff:g id="PROCESS">%1$s</xliff:g> प्रक्रियेने तिच्या स्वतः-लागू केलेल्या StrictMode धोरणाचे उल्लंघन केले."</string> <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"फोन अपडेट होत आहे…"</string> @@ -1976,7 +1976,7 @@ <string name="app_blocked_title" msgid="7353262160455028160">"ॲप उपलब्ध नाही"</string> <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> आता उपलब्ध नाही."</string> <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"हे अॅप Android च्या जुन्या आवृत्ती साठी तयार करण्यात आले होते आणि योग्यरितीने कार्य करू शकणार नाही. अपडेट आहेत का ते तपासून पाहा, किंवा डेव्हलपरशी संपर्क साधण्याचा प्रयत्न करा."</string> - <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेट आहे का ते तपासा"</string> + <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेटसाठी तपासा"</string> <string name="new_sms_notification_title" msgid="6528758221319927107">"आपल्याकडे नवीन मेसेज आहेत"</string> <string name="new_sms_notification_content" msgid="3197949934153460639">"पाहण्यासाठी SMS अॅप उघडा"</string> <string name="profile_encrypted_title" msgid="9001208667521266472">"काही कार्यक्षमता मर्यादित असू शकतात"</string> @@ -2117,8 +2117,8 @@ <string name="mime_type_document_ext" msgid="2398002765046677311">"<xliff:g id="EXTENSION">%1$s</xliff:g> दस्तऐवज"</string> <string name="mime_type_spreadsheet" msgid="8188407519131275838">"स्प्रेडशीट"</string> <string name="mime_type_spreadsheet_ext" msgid="8720173181137254414">"<xliff:g id="EXTENSION">%1$s</xliff:g> स्प्रेडशीट"</string> - <string name="mime_type_presentation" msgid="1145384236788242075">"सादरीकरण"</string> - <string name="mime_type_presentation_ext" msgid="8761049335564371468">"<xliff:g id="EXTENSION">%1$s</xliff:g> सादरीकरण"</string> + <string name="mime_type_presentation" msgid="1145384236788242075">"प्रेझेंटेशन"</string> + <string name="mime_type_presentation_ext" msgid="8761049335564371468">"<xliff:g id="EXTENSION">%1$s</xliff:g> प्रेझेंटेशन"</string> <string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"विमान मोड दरम्यान ब्लूटूथ सुरू राहील"</string> <string name="car_loading_profile" msgid="8219978381196748070">"लोड होत आहे"</string> <plurals name="file_count" formatted="false" msgid="7063513834724389247"> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 13a17366f0e4..d565c28faaf8 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -198,7 +198,7 @@ <string name="location_changed_notification_text" msgid="7158423339982706912">"थप जानकारी प्राप्त गर्न आफ्ना IT प्रशासकसँग सम्पर्क गर्नुहोस्"</string> <string name="geofencing_service" msgid="3826902410740315456">"जियोफेन्सिङ सेवा"</string> <string name="country_detector" msgid="7023275114706088854">"देश पत्ता लगाउने सुविधा"</string> - <string name="location_service" msgid="2439187616018455546">"स्थानसम्बन्धी सेवा"</string> + <string name="location_service" msgid="2439187616018455546">"लोकेसन सर्भिस"</string> <string name="gnss_service" msgid="8907781262179951385">"GNSS सेवा"</string> <string name="sensor_notification_service" msgid="7474531979178682676">"सेन्सरको सूचनासम्बन्धी सेवा"</string> <string name="twilight_service" msgid="8964898045693187224">"ट्वाइलाइट सेवा"</string> @@ -910,7 +910,7 @@ <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"तपाईंले गलत तरिकाले आफ्नो पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक टाइप गर्नुभयो। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string> <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string> <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"तपाईँले तपाईँको अनलक प्याटर्न गलत तरिकाले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक खिच्नु भएको छ। पछि <xliff:g id="NUMBER_1">%2$d</xliff:g> थप असफल कोसिसहरू, तपाईँको Google साइन इन प्रयोग गरी तपाईँको ट्याब्लेट अनलक गर्न भनिने छ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा फरि प्रयास गर्नुहोस्।"</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"तपाईंले आफ्नो अनलक शैली <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले कोर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंलाई आफ्नो Google खाता मार्फत साइन इन गरेर आफ्नो Android टिभी यन्त्र अनलक गर्न अनुरोध गरिनेछ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"तपाईंले आफ्नो अनलक शैली <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले कोर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंलाई आफ्नो Google खाता मार्फत साइन इन गरेर आफ्नो Android टिभी डिभाइस अनलक गर्न अनुरोध गरिनेछ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string> <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"तपाईँले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले तपाईँको अनलक ढाँचालाई कोर्नु भएको छ। पछि <xliff:g id="NUMBER_1">%2$d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, तपाईँलाई तपाईँको फोन Google साइन इन प्रयोग गरेर अनलक गर्नको लागि सोधिने छ। \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"तपाईँले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक ट्याब्लेटलाई अनलक गर्नको लागि गलत तरिकाले कोशिस गर्नुभएको छ। <xliff:g id="NUMBER_1">%2$d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, ट्याब्लेट फ्याट्रि पूर्वनिर्धारितमा रिसेट हुने छ र सबै प्रयोगकर्ता डेटा हराउने छन्।"</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"तपाईंले आफ्नो Android टिभी यन्त्र <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले अनलक गर्ने प्रयास गर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंको Android टिभी यन्त्रलाई रिसेट गरेर डिफल्ट फ्याक्ट्री सेटिङ लागू गरिने छ र प्रयोगकर्ताको सम्पूर्ण डेटा गुम्ने छ।"</string> @@ -1393,7 +1393,7 @@ <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"भाषा र लेआउट चयन गर्न ट्याप गर्नुहोस्"</string> <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> - <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"अरू एपमाथि देखाउनुहोस्"</string> + <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"अरू एपमाथि देखाइयोस्"</string> <string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"<xliff:g id="NAME">%s</xliff:g> अन्य एपहरूमा देखिँदैछ"</string> <string name="alert_windows_notification_title" msgid="6331662751095228536">"<xliff:g id="NAME">%s</xliff:g> अन्य एपहरूमा देखिँदैछ"</string> <string name="alert_windows_notification_message" msgid="6538171456970725333">"तपाईं <xliff:g id="NAME">%s</xliff:g> ले यो विशेषता प्रयोग नगरेको चाहनुहुन्न भने सेटिङहरू खोली यसलाई निष्क्रिय पार्न ट्याप गर्नुहोस्।"</string> @@ -1675,7 +1675,7 @@ <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"तपाईंले आफ्नो Android टिभी यन्त्र <xliff:g id="NUMBER">%d</xliff:g> पटक गलत तरिकाले अनलक गर्ने प्रयास गर्नुभएको छ। अब तपाईंको Android टिभी यन्त्रलाई रिसेट गरेर डिफल्ट फ्याक्ट्री सेटिङ लागू गरिनेछ।"</string> <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा रिसेट हुने छ।"</string> <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"तपाईंले गलत तरिकाले आफ्नो अनलक प्याटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%2$d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डहरूमा।"</string> - <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"तपाईंले आफ्नो अनलक शैली <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले कोर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंलाई आफ्नो इमेल खाता प्रयोग गरेर आफ्नो Android टिभी यन्त्र अनलक गर्न अनुरोध गरिनेछ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string> + <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"तपाईंले आफ्नो अनलक शैली <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले कोर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंलाई आफ्नो इमेल खाता प्रयोग गरेर आफ्नो Android टिभी डिभाइस अनलक गर्न अनुरोध गरिनेछ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"तपाईँले आफ्नो अनलक प्याटर्न गलत रूपमा <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%2$d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string> <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string> <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"हटाउनुहोस्"</string> @@ -1866,8 +1866,7 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"तपाईंका प्रशासकले अद्यावधिक गर्नुभएको"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"तपाईंका प्रशासकले मेट्नुभएको"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ठिक छ"</string> - <!-- no translation found for battery_saver_description_with_learn_more (5444908404021316250) --> - <skip /> + <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"ब्याट्री सेभरले अँध्यारो थिम अन गर्छ र ब्याकग्राउन्डमा हुने क्रियाकलाप, केही भिजुअल इफेक्ट, निश्चित सुविधा र केही नेटवर्क कनेक्सनहरू अफ गर्छ वा सीमित रूपमा मात्र चल्न दिन्छ।"</string> <string name="battery_saver_description" msgid="8518809702138617167">"ब्याट्री सेभरले अँध्यारो थिम अन गर्छ र ब्याकग्राउन्डमा हुने क्रियाकलाप, केही भिजुअल इफेक्ट, निश्चित सुविधा र केही नेटवर्क कनेक्सनहरू अफ गर्छ वा सीमित रूपमा मात्र चल्न दिन्छ।"</string> <string name="data_saver_description" msgid="4995164271550590517">"डेटा सेभरले डेटा खपत कम गर्न केही एपहरूलाई ब्याकग्राउन्डमा डेटा पठाउन वा प्राप्त गर्न दिँदैन। तपाईंले अहिले प्रयोग गरिरहनुभएको एपले सीमित रूपमा मात्र डेटा चलाउन पाउँछ। उदाहरणका लागि, तपाईंले फोटोमा ट्याप गर्नुभयो भने मात्र फोटो देखिन्छ नत्र देखिँदैन।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा सेभर अन गर्ने हो?"</string> @@ -1977,7 +1976,7 @@ <string name="app_blocked_title" msgid="7353262160455028160">"एप उपलब्ध छैन"</string> <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> अहिले उपलब्ध छैन।"</string> <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"यो एप Android को पुरानो संस्करणका लागि बनाइएको हुनाले यसले सही ढङ्गले काम नगर्न सक्छ। अद्यावधिकहरू उपलब्ध छन् वा छैनन् भनी जाँच गरी हेर्नुहोस् वा यसको विकासकर्तालाई सम्पर्क गर्नुहोस्।"</string> - <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अद्यावधिक उपलब्ध छ वा छैन भनी जाँच गर्नुहोस्"</string> + <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेट उपलब्ध छ वा छैन जाँच्नुहोस्"</string> <string name="new_sms_notification_title" msgid="6528758221319927107">"तपाईंलाई नयाँ सन्देश आएको छ"</string> <string name="new_sms_notification_content" msgid="3197949934153460639">"हेर्नका लागि SMS एप खोल्नुहोस्"</string> <string name="profile_encrypted_title" msgid="9001208667521266472">"केही सुविधा राम्ररी नचल्न सक्छन्"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 4dc2a1b6d3b2..531612423a83 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1868,7 +1868,7 @@ <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Met Batterijbesparing wordt het donkere thema aangezet en worden achtergrondactiviteit, bepaalde visuele effecten, bepaalde functies en sommige netwerkverbindingen beperkt of uitgezet."</string> <string name="battery_saver_description" msgid="8518809702138617167">"Met Batterijbesparing wordt het donkere thema aangezet en worden achtergrondactiviteit, bepaalde visuele effecten, bepaalde functies en sommige netwerkverbindingen beperkt of uitgezet."</string> - <string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens sturen of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt."</string> + <string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens sturen of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet getoond totdat je erop tikt."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Databesparing aanzetten?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aanzetten"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index d12bb0b06b43..d2165cbab44a 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -223,7 +223,7 @@ <string name="power_off" msgid="4111692782492232778">"ପାୱାର୍ ବନ୍ଦ"</string> <string name="silent_mode_silent" msgid="5079789070221150912">"ରିଙ୍ଗର୍ ଅଫ୍ ଅଛି"</string> <string name="silent_mode_vibrate" msgid="8821830448369552678">"ରିଙ୍ଗର୍ କମ୍ପନ"</string> - <string name="silent_mode_ring" msgid="6039011004781526678">"ରିଙ୍ଗର୍ ଅନ୍ ଅଛି"</string> + <string name="silent_mode_ring" msgid="6039011004781526678">"ରିଙ୍ଗର୍ ଚାଲୁ ଅଛି"</string> <string name="reboot_to_update_title" msgid="2125818841916373708">"Android ସିଷ୍ଟମ୍ ଅପଡେଟ୍"</string> <string name="reboot_to_update_prepare" msgid="6978842143587422365">"ଅପଡେଟ୍ କରିବାକୁ ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string> <string name="reboot_to_update_package" msgid="4644104795527534811">"ଅପଡେଟ୍ ପ୍ୟାକେଜ୍ ପ୍ରୋସେସ୍ କରାଯାଉଛି…"</string> @@ -265,7 +265,7 @@ <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"ବଗ୍ ରିପୋର୍ଟ ସହ ସ୍କ୍ରିନସଟ୍ ନେବାରେ ବିଫଳ ହୋଇଛି"</string> <string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"ସାଇଲେଣ୍ଟ ମୋଡ୍"</string> <string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"ସାଉଣ୍ଡ ଅଫ୍ ଅଛି"</string> - <string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"ସାଉଣ୍ଡ ଅନ୍ ଅଛି"</string> + <string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"ସାଉଣ୍ଡ ଚାଲୁ ଅଛି"</string> <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍"</string> <string name="global_actions_airplane_mode_on_status" msgid="5508025516695361936">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍ ଅନ୍ ଅଛି"</string> <string name="global_actions_airplane_mode_off_status" msgid="8522219771500505475">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍ ଅଫ୍ ଅଛି"</string> @@ -930,7 +930,7 @@ <string name="lockscreen_glogin_account_recovery_hint" msgid="1683405808525090649">"ଆପଣଙ୍କର ଯୁଜରନେମ୍ କିମ୍ୱା ପାସୱାର୍ଡ ଭୁଲି ଯାଇଛନ୍ତି କି?\n"<b>"google.com/accounts/recovery"</b>" ଭିଜିଟ୍ କରନ୍ତୁ।"</string> <string name="lockscreen_glogin_checking_password" msgid="2607271802803381645">"ଯାଞ୍ଚ କରାଯାଉଛି…"</string> <string name="lockscreen_unlock_label" msgid="4648257878373307582">"ଅନଲକ୍"</string> - <string name="lockscreen_sound_on_label" msgid="1660281470535492430">"ସାଉଣ୍ଡ ଅନ୍ ଅଛି"</string> + <string name="lockscreen_sound_on_label" msgid="1660281470535492430">"ସାଉଣ୍ଡ ଚାଲୁ ଅଛି"</string> <string name="lockscreen_sound_off_label" msgid="2331496559245450053">"ସାଉଣ୍ଡ ଅଫ୍ ଅଛି"</string> <string name="lockscreen_access_pattern_start" msgid="3778502525702613399">"ପାଟର୍ନ ଆରମ୍ଭ ହେଲା"</string> <string name="lockscreen_access_pattern_cleared" msgid="7493849102641167049">"ପାଟର୍ନ ଖାଲି କରାଗଲା"</string> @@ -1033,7 +1033,7 @@ <string name="menu_function_shortcut_label" msgid="2367112760987662566">"Function+"</string> <string name="menu_space_shortcut_label" msgid="5949311515646872071">"ସ୍ପେସ୍"</string> <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"ଏଣ୍ଟର୍"</string> - <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ଡିଲିଟ୍"</string> + <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ଡିଲିଟ୍ କରନ୍ତୁ"</string> <string name="search_go" msgid="2141477624421347086">"Search"</string> <string name="search_hint" msgid="455364685740251925">"ସର୍ଚ୍ଚ…"</string> <string name="searchview_description_search" msgid="1045552007537359343">"Search"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 1436d47666eb..91dd2fc5219a 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1866,10 +1866,9 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ਠੀਕ ਹੈ"</string> - <!-- no translation found for battery_saver_description_with_learn_more (5444908404021316250) --> - <skip /> + <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"ਬੈਟਰੀ ਸੇਵਰ ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਭਾਵਾਂ, ਕੁਝ ਖਾਸ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਕੁਝ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੀਮਤ ਜਾਂ ਬੰਦ ਕਰਦਾ ਹੈ।"</string> <string name="battery_saver_description" msgid="8518809702138617167">"ਬੈਟਰੀ ਸੇਵਰ ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਭਾਵਾਂ, ਕੁਝ ਖਾਸ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਕੁਝ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੀਮਤ ਜਾਂ ਬੰਦ ਕਰਦਾ ਹੈ।"</string> - <string name="data_saver_description" msgid="4995164271550590517">"ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ \'ਤੇ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।"</string> + <string name="data_saver_description" msgid="4995164271550590517">"ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ਕੀ ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ਚਾਲੂ ਕਰੋ"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 89eb90c8788b..c3c5d0a93623 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1724,7 +1724,7 @@ <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string> <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Usuń"</string> <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Zwiększyć głośność ponad zalecany poziom?\n\nSłuchanie głośno przez długi czas może uszkodzić Twój słuch."</string> - <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Użyć skrótu do ułatwień dostępu?"</string> + <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Użyć skrótu ułatwień dostępu?"</string> <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Gdy skrót jest włączony, jednoczesne naciskanie przez trzy sekundy obu przycisków głośności uruchamia funkcję ułatwień dostępu."</string> <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Włączyć skrót ułatwień dostępu?"</string> <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Przytrzymanie obu klawiszy głośności przez kilka sekund włącza ułatwienia dostępu. Może to zmienić sposób działania urządzenia.\n\nBieżące funkcje:\n<xliff:g id="SERVICE">%1$s</xliff:g>\naby zmienić wybrane funkcje, kliknij Ustawienia > Ułatwienia dostępu."</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index dd899de8a74b..42e3b5bb1cbb 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1367,7 +1367,7 @@ <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Acessório de áudio analógico detectado"</string> <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"O dispositivo anexo não é compatível com esse smartphone. Toque para saber mais."</string> <string name="adb_active_notification_title" msgid="408390247354560331">"Depuração USB conectada"</string> - <string name="adb_active_notification_message" msgid="5617264033476778211">"Toque para desativar a depuração USB."</string> + <string name="adb_active_notification_message" msgid="5617264033476778211">"Toque para desativar a depuração USB"</string> <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selecione para desativar a depuração USB."</string> <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Depuração por Wi-Fi conectada"</string> <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Toque para desativar a depuração por Wi-Fi"</string> @@ -1869,7 +1869,7 @@ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"A Economia de bateria ativa o tema escuro e limita ou desativa atividades em segundo plano, alguns efeitos visuais, recursos específicos e algumas conexões de rede."</string> <string name="battery_saver_description" msgid="8518809702138617167">"A Economia de bateria ativa o tema escuro e limita ou desativa atividades em segundo plano, alguns efeitos visuais, recursos específicos e algumas conexões de rede."</string> <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> - <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar \"Economia de dados\"?"</string> + <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar a Economia de dados?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> <item quantity="one">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index dd899de8a74b..42e3b5bb1cbb 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1367,7 +1367,7 @@ <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Acessório de áudio analógico detectado"</string> <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"O dispositivo anexo não é compatível com esse smartphone. Toque para saber mais."</string> <string name="adb_active_notification_title" msgid="408390247354560331">"Depuração USB conectada"</string> - <string name="adb_active_notification_message" msgid="5617264033476778211">"Toque para desativar a depuração USB."</string> + <string name="adb_active_notification_message" msgid="5617264033476778211">"Toque para desativar a depuração USB"</string> <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selecione para desativar a depuração USB."</string> <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Depuração por Wi-Fi conectada"</string> <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Toque para desativar a depuração por Wi-Fi"</string> @@ -1869,7 +1869,7 @@ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"A Economia de bateria ativa o tema escuro e limita ou desativa atividades em segundo plano, alguns efeitos visuais, recursos específicos e algumas conexões de rede."</string> <string name="battery_saver_description" msgid="8518809702138617167">"A Economia de bateria ativa o tema escuro e limita ou desativa atividades em segundo plano, alguns efeitos visuais, recursos específicos e algumas conexões de rede."</string> <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> - <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar \"Economia de dados\"?"</string> + <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar a Economia de dados?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="2877101784123058273"> <item quantity="one">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 658ab8d7b57c..ebdde2378db2 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -1406,8 +1406,8 @@ <string name="usb_power_notification_message" msgid="7284765627437897702">"Polnjenje akumulatorja v povezani napravi. Dotaknite se za več možnosti."</string> <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Zaznana je analogna dodatna zvočna oprema"</string> <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Priključena naprava ni združljiva s tem telefonom. Dotaknite se za več informacij."</string> - <string name="adb_active_notification_title" msgid="408390247354560331">"Iskanje napak prek USB je povezano"</string> - <string name="adb_active_notification_message" msgid="5617264033476778211">"Dotaknite se, če želite izklop. odpravlj. napak prek USB-ja"</string> + <string name="adb_active_notification_title" msgid="408390247354560331">"Iskanje napak prek USB-ja je povezano"</string> + <string name="adb_active_notification_message" msgid="5617264033476778211">"Dotaknite se, če želite izklopiti odpravljanje napak prek USB-ja."</string> <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Izberite, če želite onemogočiti iskanje in odpravljanje napak prek vrat USB."</string> <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Povezava za brezžično odpravljanje napak je vzpostavljena"</string> <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Dotaknite se, če želite izklopiti brezžično odpravljanje napak."</string> @@ -2226,7 +2226,7 @@ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Te vsebine ni mogoče odpreti z osebnimi aplikacijami."</string> <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Delovni profil je začasno zaustavljen"</string> <string name="resolver_switch_on_work" msgid="463709043650610420">"Dotaknite se za vklop"</string> - <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nobena delovna aplikacija"</string> + <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nobena delovna aplikacija ni na voljo"</string> <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nobena osebna aplikacija"</string> <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Želite odpreti v aplikaciji <xliff:g id="APP">%s</xliff:g> v osebnem profilu?"</string> <string name="miniresolver_open_in_work" msgid="152208044699347924">"Želite odpreti v aplikaciji <xliff:g id="APP">%s</xliff:g> v delovnem profilu?"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 7a363f10f76c..f9fbe65230f2 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -247,7 +247,7 @@ <string name="global_action_power_off" msgid="4404936470711393203">"పవర్ ఆఫ్ చేయి"</string> <string name="global_action_power_options" msgid="1185286119330160073">"పవర్"</string> <string name="global_action_restart" msgid="4678451019561687074">"రీస్టార్ట్ చేయి"</string> - <string name="global_action_emergency" msgid="1387617624177105088">"అత్యవసరం"</string> + <string name="global_action_emergency" msgid="1387617624177105088">"ఎమర్జెన్సీ"</string> <string name="global_action_bug_report" msgid="5127867163044170003">"బగ్ నివేదిక"</string> <string name="global_action_logout" msgid="6093581310002476511">"సెషన్ను ముగించు"</string> <string name="global_action_screenshot" msgid="2610053466156478564">"స్క్రీన్షాట్"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 9fee7d85f252..0bbaa7898bc2 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -1355,7 +1355,7 @@ <string name="no_permissions" msgid="5729199278862516390">"Hech qanday ruxsat talab qilinmaydi"</string> <string name="perm_costs_money" msgid="749054595022779685">"buning uchun sizdan haq olinishi mumkin"</string> <string name="dlg_ok" msgid="5103447663504839312">"OK"</string> - <string name="usb_charging_notification_title" msgid="1674124518282666955">"Bu qurilma USB orqali quvvatlanmoqda"</string> + <string name="usb_charging_notification_title" msgid="1674124518282666955">"Qurilma USB orqali quvvatlanmoqda"</string> <string name="usb_supplying_notification_title" msgid="5378546632408101811">"USB orqali ulangan qurilma quvvatlanmoqda"</string> <string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB orqali fayl uzatish yoqildi"</string> <string name="usb_ptp_notification_title" msgid="5043437571863443281">"USB orqali PTP rejimi yoqildi"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 1198cf634764..1fca2e90dfae 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1866,8 +1866,7 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理员更新"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理员删除"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"确定"</string> - <!-- no translation found for battery_saver_description_with_learn_more (5444908404021316250) --> - <skip /> + <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"在省电模式下,系统会启用深色主题,并限制或关闭后台活动、某些视觉效果、特定功能和部分网络连接。"</string> <string name="battery_saver_description" msgid="8518809702138617167">"在省电模式下,系统会启用深色主题,并限制或关闭后台活动、某些视觉效果、特定功能和部分网络连接。"</string> <string name="data_saver_description" msgid="4995164271550590517">"为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"要开启流量节省程序吗?"</string> diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml index 23b0ed111add..5949099bd6a3 100644 --- a/libs/WindowManager/Shell/res/values-es/strings.xml +++ b/libs/WindowManager/Shell/res/values-es/strings.xml @@ -62,7 +62,7 @@ <string name="bubble_dismiss_text" msgid="8816558050659478158">"Cerrar burbuja"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostrar conversación en burbuja"</string> <string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatea con burbujas"</string> - <string name="bubbles_user_education_description" msgid="4215862563054175407">"Las conversaciones nuevas aparecen como iconos flotantes llamadas \"burbujas\". Toca para abrir la burbuja. Arrastra para moverla."</string> + <string name="bubbles_user_education_description" msgid="4215862563054175407">"Las conversaciones nuevas aparecen como iconos flotantes llamadas \"burbujas\". Toca una burbuja para abrirla. Arrástrala para moverla."</string> <string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"Controla las burbujas"</string> <string name="bubbles_user_education_manage" msgid="3460756219946517198">"Toca Gestionar para desactivar las burbujas de esta aplicación"</string> <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml index 911741322345..eecc9cbbba43 100644 --- a/libs/WindowManager/Shell/res/values-fr/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr/strings.xml @@ -63,7 +63,7 @@ <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne pas afficher la conversation dans une bulle"</string> <string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatter en utilisant des bulles"</string> <string name="bubbles_user_education_description" msgid="4215862563054175407">"Les nouvelles conversations s\'affichent sous forme d\'icônes flottantes ou bulles. Appuyez sur la bulle pour l\'ouvrir. Faites-la glisser pour la déplacer."</string> - <string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"Contrôler les paramètres des bulles"</string> + <string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"Contrôlez les bulles à tout moment"</string> <string name="bubbles_user_education_manage" msgid="3460756219946517198">"Appuyez sur \"Gérer\" pour désactiver les bulles de cette application"</string> <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Aucune bulle récente"</string> diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml index 76e4c735241e..6deb0b892316 100644 --- a/libs/WindowManager/Shell/res/values-kk/strings.xml +++ b/libs/WindowManager/Shell/res/values-kk/strings.xml @@ -70,7 +70,7 @@ <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Соңғы және жабылған қалқыма хабарлар осы жерде көрсетіледі."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Көпіршік"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Басқару"</string> - <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Қалқымалы анықтама өшірілді."</string> + <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Қалқыма хабар жабылды."</string> <string name="restart_button_description" msgid="5887656107651190519">"Бұл қолданбаны қайта қосып, толық экранға өту үшін түртіңіз."</string> <string name="got_it" msgid="4428750913636945527">"Түсінікті"</string> </resources> diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml index 0738ed261f71..f0bf513e264c 100644 --- a/libs/WindowManager/Shell/res/values-ml/strings.xml +++ b/libs/WindowManager/Shell/res/values-ml/strings.xml @@ -68,9 +68,9 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"മനസ്സിലായി"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"അടുത്തിടെയുള്ള ബബിളുകൾ ഒന്നുമില്ല"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"അടുത്തിടെയുള്ള ബബിളുകൾ, ഡിസ്മിസ് ചെയ്ത ബബിളുകൾ എന്നിവ ഇവിടെ ദൃശ്യമാവും"</string> - <string name="notification_bubble_title" msgid="6082910224488253378">"ബബ്ൾ"</string> + <string name="notification_bubble_title" msgid="6082910224488253378">"ബബിൾ"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"മാനേജ് ചെയ്യുക"</string> - <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ബബ്ൾ ഡിസ്മിസ് ചെയ്തു."</string> + <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ബബിൾ ഡിസ്മിസ് ചെയ്തു."</string> <string name="restart_button_description" msgid="5887656107651190519">"ഈ ആപ്പ് റീസ്റ്റാർട്ട് ചെയ്ത് പൂർണ്ണ സ്ക്രീനിലേക്ക് മാറാൻ ടാപ്പ് ചെയ്യുക."</string> <string name="got_it" msgid="4428750913636945527">"മനസ്സിലായി"</string> </resources> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index afd7d2694ad6..6451b94caaba 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -833,10 +833,14 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, public void onMovementBoundsChanged(Rect destinationBoundsOut, boolean fromRotation, boolean fromImeAdjustment, boolean fromShelfAdjustment, WindowContainerTransaction wct) { - // note that this can be called when swiping pip to home is happening. For instance, - // swiping an app in landscape to portrait home. skip this entirely if that's the case. - if (mInSwipePipToHomeTransition && fromRotation) { - if (DEBUG) Log.d(TAG, "skip onMovementBoundsChanged due to swipe-pip-to-home"); + // note that this can be called when swipe-to-home or fixed-rotation is happening. + // Skip this entirely if that's the case. + if ((mInSwipePipToHomeTransition || mWaitForFixedRotation) && fromRotation) { + if (DEBUG) { + Log.d(TAG, "Skip onMovementBoundsChanged on rotation change" + + " mInSwipePipToHomeTransition=" + mInSwipePipToHomeTransition + + " mWaitForFixedRotation=" + mWaitForFixedRotation); + } return; } final PipAnimationController.PipTransitionAnimator animator = diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/IStartingWindowListener.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/IStartingWindowListener.aidl index f562c8fc4f85..630c8e7575b2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/IStartingWindowListener.aidl +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/IStartingWindowListener.aidl @@ -25,6 +25,7 @@ interface IStartingWindowListener { * Notifies when Shell going to create a new starting window. * @param taskId The task Id * @param supportedType The starting window type + * @param splashScreenBackgroundColor The splash screen's background color */ - oneway void onTaskLaunching(int taskId, int supportedType); + oneway void onTaskLaunching(int taskId, int supportedType, int splashScreenBackgroundColor); } 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 8463da6a0ecb..c72a535fa329 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 @@ -32,6 +32,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.PixelFormat; import android.graphics.Rect; +import android.graphics.drawable.ColorDrawable; import android.hardware.display.DisplayManager; import android.os.IBinder; import android.os.SystemProperties; @@ -326,6 +327,12 @@ public class StartingSurfaceDrawer { } } + int getStartingWindowBackgroundColorForTask(int taskId) { + StartingWindowRecord startingWindowRecord = mStartingWindowRecords.get(taskId); + if (startingWindowRecord == null || startingWindowRecord.mContentView == null) return 0; + return ((ColorDrawable) startingWindowRecord.mContentView.getBackground()).getColor(); + } + private static class SplashScreenViewSupplier implements Supplier<SplashScreenView> { private SplashScreenView mView; private boolean mIsViewSet; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java index cb7afc77a65b..cffc789106cb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java @@ -36,12 +36,11 @@ import android.window.TaskSnapshot; import androidx.annotation.BinderThread; +import com.android.internal.util.function.TriConsumer; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TransactionPool; -import java.util.function.BiConsumer; - /** * Implementation to draw the starting window to an application, and remove the starting window * until the application displays its own window. @@ -68,7 +67,7 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo private final StartingSurfaceDrawer mStartingSurfaceDrawer; private final StartingWindowTypeAlgorithm mStartingWindowTypeAlgorithm; - private BiConsumer<Integer, Integer> mTaskLaunchingCallback; + private TriConsumer<Integer, Integer, Integer> mTaskLaunchingCallback; private final StartingSurfaceImpl mImpl = new StartingSurfaceImpl(); private final Context mContext; private final ShellExecutor mSplashScreenExecutor; @@ -103,7 +102,7 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo * * @param listener The callback when need a starting window. */ - void setStartingWindowListener(BiConsumer<Integer, Integer> listener) { + void setStartingWindowListener(TriConsumer<Integer, Integer, Integer> listener) { mTaskLaunchingCallback = listener; } @@ -121,9 +120,6 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo final int suggestionType = mStartingWindowTypeAlgorithm.getSuggestedWindowType( windowInfo); final RunningTaskInfo runningTaskInfo = windowInfo.taskInfo; - if (mTaskLaunchingCallback != null && shouldSendToListener(suggestionType)) { - mTaskLaunchingCallback.accept(runningTaskInfo.taskId, suggestionType); - } if (suggestionType == STARTING_WINDOW_TYPE_SPLASH_SCREEN) { mStartingSurfaceDrawer.addSplashScreenStartingWindow(windowInfo, appToken, false /* emptyView */); @@ -137,6 +133,11 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo } else /* suggestionType == STARTING_WINDOW_TYPE_NONE */ { // Don't add a staring window. } + if (mTaskLaunchingCallback != null && shouldSendToListener(suggestionType)) { + int taskId = runningTaskInfo.taskId; + int color = mStartingSurfaceDrawer.getStartingWindowBackgroundColorForTask(taskId); + mTaskLaunchingCallback.accept(taskId, suggestionType, color); + } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); }); @@ -181,7 +182,7 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo private static class IStartingWindowImpl extends IStartingWindow.Stub { private StartingWindowController mController; private IStartingWindowListener mListener; - private final BiConsumer<Integer, Integer> mStartingWindowListener = + private final TriConsumer<Integer, Integer, Integer> mStartingWindowListener = this::notifyIStartingWindowListener; private final IBinder.DeathRecipient mListenerDeathRecipient = new IBinder.DeathRecipient() { @@ -230,13 +231,14 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo }); } - private void notifyIStartingWindowListener(int taskId, int supportedType) { + private void notifyIStartingWindowListener(int taskId, int supportedType, + int startingWindowBackgroundColor) { if (mListener == null) { return; } try { - mListener.onTaskLaunching(taskId, supportedType); + mListener.onTaskLaunching(taskId, supportedType, startingWindowBackgroundColor); } catch (RemoteException e) { Slog.e(TAG, "Failed to notify task launching", e); } diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp index d8715dbf7646..0a232d6272bd 100644 --- a/libs/hwui/Android.bp +++ b/libs/hwui/Android.bp @@ -87,8 +87,8 @@ cc_defaults { cflags: [ "-Wno-unused-variable", ], - } - } + }, + }, } cc_defaults { @@ -108,7 +108,6 @@ cc_defaults { shared_libs: [ "liblog", "libcutils", - "libstatslog", "libutils", "libEGL", "libGLESv1_CM", @@ -122,12 +121,13 @@ cc_defaults { "libandroidfw", "libcrypto", "libsync", - "libstatspull", - "libstatssocket", ], static_libs: [ "libEGL_blobCache", "libprotoutil", + "libstatslog_hwui", + "libstatspull_lazy", + "libstatssocket_lazy", ], }, host: { @@ -135,8 +135,8 @@ cc_defaults { "libandroidfw", "libutils", ], - } - } + }, + }, } cc_defaults { @@ -220,7 +220,7 @@ filegroup { srcs: [ "apex/java/**/*.java", ], - path: "apex/java" + path: "apex/java", } // ------------------------ @@ -238,7 +238,7 @@ cc_library_headers { windows: { enabled: true, }, - } + }, } cc_defaults { @@ -263,7 +263,7 @@ cc_defaults { "apex/android_region.cpp", ], - header_libs: [ "android_graphics_apex_headers" ], + header_libs: ["android_graphics_apex_headers"], target: { android: { @@ -278,7 +278,7 @@ cc_defaults { srcs: [ "apex/LayoutlibLoader.cpp", ], - } + }, }, } @@ -297,7 +297,7 @@ cc_library_headers { windows: { enabled: true, }, - } + }, } cc_defaults { @@ -370,7 +370,7 @@ cc_defaults { "jni/text/TextShaper.cpp", ], - header_libs: [ "android_graphics_jni_headers" ], + header_libs: ["android_graphics_jni_headers"], include_dirs: [ "external/skia/include/private", @@ -391,7 +391,10 @@ cc_defaults { "libjpeg", ], - static_libs: ["libnativehelper_lazy", "libziparchive_for_incfs"], + static_libs: [ + "libnativehelper_lazy", + "libziparchive_for_incfs", + ], target: { android: { @@ -417,13 +420,13 @@ cc_defaults { "libmediandk", "libnativedisplay", "libnativewindow", - "libstatspull", - "libstatssocket", "libpdfium", ], static_libs: [ "libgif", - "libstatslog", + "libstatslog_hwui", + "libstatspull_lazy", + "libstatssocket_lazy", ], }, host: { @@ -434,10 +437,41 @@ cc_defaults { static_libs: [ "libandroidfw", ], - } + }, }, } +cc_library_static { + name: "libstatslog_hwui", + generated_sources: ["statslog_hwui.cpp"], + generated_headers: ["statslog_hwui.h"], + export_generated_headers: ["statslog_hwui.h"], + static_libs: [ + "libstatssocket_lazy", + "libstatspull_lazy", + ], +} + +genrule { + name: "statslog_hwui.h", + tools: ["stats-log-api-gen"], + cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_hwui.h --module hwui" + + " --namespace android,uirenderer,stats", + out: [ + "statslog_hwui.h", + ], +} + +genrule { + name: "statslog_hwui.cpp", + tools: ["stats-log-api-gen"], + cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_hwui.cpp --module hwui" + + " --namespace android,uirenderer,stats --importHeader statslog_hwui.h", + out: [ + "statslog_hwui.cpp", + ], +} + // ------------------------ // library // ------------------------ @@ -449,8 +483,8 @@ cc_library_headers { export_include_dirs: [ ".", ], - header_libs: [ "android_graphics_jni_headers" ], - export_header_lib_headers: [ "android_graphics_jni_headers" ], + header_libs: ["android_graphics_jni_headers"], + export_header_lib_headers: ["android_graphics_jni_headers"], } cc_defaults { @@ -514,7 +548,7 @@ cc_defaults { target: { android: { - header_libs: ["libandroid_headers_private" ], + header_libs: ["libandroid_headers_private"], srcs: [ "hwui/AnimatedImageThread.cpp", @@ -572,8 +606,8 @@ cc_defaults { export_static_lib_headers: [ "libarect", ], - } - } + }, + }, } cc_library { @@ -589,7 +623,7 @@ cc_library { target: { android: { version_script: "libhwui.map.txt", - } + }, }, } @@ -608,10 +642,10 @@ cc_defaults { target: { android: { shared_libs: [ - "libgui", - "libui", - ], - } + "libgui", + "libui", + ], + }, }, srcs: [ "tests/common/scenes/*.cpp", @@ -732,5 +766,5 @@ phony { required: [ "hwuimicro", "hwuimacro", - ] + ], } diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp index 7702f9bba0e4..dd977c32f531 100644 --- a/libs/hwui/JankTracker.cpp +++ b/libs/hwui/JankTracker.cpp @@ -20,7 +20,6 @@ #include <errno.h> #include <inttypes.h> #include <log/log.h> -#include <statslog.h> #include <sys/mman.h> #include <algorithm> diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp index 8a8b4181bd94..d8735ce57b65 100644 --- a/libs/hwui/Readback.cpp +++ b/libs/hwui/Readback.cpp @@ -275,6 +275,14 @@ CopyResult Readback::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBitmap return copyResult; } +CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, SkBitmap* bitmap) { + Rect srcRect; + Matrix4 transform; + transform.loadScale(1, -1, 1); + transform.translate(0, -1); + return copyImageInto(image, transform, srcRect, bitmap); +} + CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, Matrix4& texTransform, const Rect& srcRect, SkBitmap* bitmap) { ATRACE_CALL(); diff --git a/libs/hwui/Readback.h b/libs/hwui/Readback.h index 4cb4bd8510ab..da252695dd3b 100644 --- a/libs/hwui/Readback.h +++ b/libs/hwui/Readback.h @@ -50,6 +50,7 @@ public: CopyResult copySurfaceInto(ANativeWindow* window, const Rect& srcRect, SkBitmap* bitmap); CopyResult copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap); + CopyResult copyImageInto(const sk_sp<SkImage>& image, SkBitmap* bitmap); CopyResult copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap); diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 9a9e6d4b77bd..332f7e6f0eac 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -306,11 +306,17 @@ void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) { info.damageAccumulator->popTransform(); syncProperties(); - const StretchEffect& stagingStretch = - mProperties.layerProperties().getStretchEffect(); + auto& layerProperties = mProperties.layerProperties(); + const StretchEffect& stagingStretch = layerProperties.getStretchEffect(); if (stagingStretch.isEmpty()) { mStretchMask.clear(); } + + if (layerProperties.getImageFilter() == nullptr) { + mSnapshotResult.snapshot = nullptr; + mTargetImageFilter = nullptr; + } + // We could try to be clever and only re-damage if the matrix changed. // However, we don't need to worry about that. The cost of over-damaging // here is only going to be a single additional map rect of this node @@ -321,6 +327,44 @@ void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) { } } +std::optional<RenderNode::SnapshotResult> RenderNode::updateSnapshotIfRequired( + GrRecordingContext* context, + const SkImageFilter* imageFilter, + const SkIRect& clipBounds +) { + auto* layerSurface = getLayerSurface(); + if (layerSurface == nullptr) { + return std::nullopt; + } + + sk_sp<SkImage> snapshot = layerSurface->makeImageSnapshot(); + const auto subset = SkIRect::MakeWH(properties().getWidth(), + properties().getHeight()); + // If we don't have an ImageFilter just return the snapshot + if (imageFilter == nullptr) { + mSnapshotResult.snapshot = snapshot; + mSnapshotResult.outSubset = subset; + mSnapshotResult.outOffset = SkIPoint::Make(0.0f, 0.0f); + mImageFilterClipBounds = clipBounds; + mTargetImageFilter = nullptr; + } else if (mSnapshotResult.snapshot == nullptr || + imageFilter != mTargetImageFilter.get() || + mImageFilterClipBounds != clipBounds) { + // Otherwise create a new snapshot with the given filter and snapshot + mSnapshotResult.snapshot = + snapshot->makeWithFilter(context, + imageFilter, + subset, + clipBounds, + &mSnapshotResult.outSubset, + &mSnapshotResult.outOffset); + mTargetImageFilter = sk_ref_sp(imageFilter); + mImageFilterClipBounds = clipBounds; + } + + return mSnapshotResult; +} + void RenderNode::syncDisplayList(TreeObserver& observer, TreeInfo* info) { // Make sure we inc first so that we don't fluctuate between 0 and 1, // which would thrash the layer cache @@ -411,6 +455,8 @@ void RenderNode::destroyLayers() { if (hasLayer()) { this->setLayerSurface(nullptr); } + mSnapshotResult.snapshot = nullptr; + mTargetImageFilter = nullptr; if (mDisplayList) { mDisplayList.updateChildren([](RenderNode* child) { child->destroyLayers(); }); } diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index 6a0b1aafd7c7..8595b6e5f78a 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -345,6 +345,16 @@ public: return mSkiaLayer.get() ? mSkiaLayer->layerSurface.get() : nullptr; } + struct SnapshotResult { + sk_sp<SkImage> snapshot; + SkIRect outSubset; + SkIPoint outOffset; + }; + + std::optional<SnapshotResult> updateSnapshotIfRequired(GrRecordingContext* context, + const SkImageFilter* imageFilter, + const SkIRect& clipBounds); + skiapipeline::SkiaLayer* getSkiaLayer() const { return mSkiaLayer.get(); } /** @@ -375,6 +385,22 @@ private: */ std::unique_ptr<skiapipeline::SkiaLayer> mSkiaLayer; + /** + * SkImageFilter used to create the mSnapshotResult + */ + sk_sp<SkImageFilter> mTargetImageFilter; + + /** + * Clip bounds used to create the mSnapshotResult + */ + SkIRect mImageFilterClipBounds; + + /** + * Result of the most recent snapshot with additional metadata used to + * determine how to draw the contents + */ + SnapshotResult mSnapshotResult; + struct ClippedOutlineCache { // keys uint32_t outlineID = 0; diff --git a/libs/hwui/effects/StretchEffect.cpp b/libs/hwui/effects/StretchEffect.cpp index 807fb75e097c..43f805d906a5 100644 --- a/libs/hwui/effects/StretchEffect.cpp +++ b/libs/hwui/effects/StretchEffect.cpp @@ -188,7 +188,8 @@ static const float ZERO = 0.f; static const float INTERPOLATION_STRENGTH_VALUE = 0.7f; sk_sp<SkShader> StretchEffect::getShader(float width, float height, - const sk_sp<SkImage>& snapshotImage) const { + const sk_sp<SkImage>& snapshotImage, + const SkMatrix* matrix) const { if (isEmpty()) { return nullptr; } @@ -206,8 +207,9 @@ sk_sp<SkShader> StretchEffect::getShader(float width, float height, mBuilder = std::make_unique<SkRuntimeShaderBuilder>(getStretchEffect()); } - mBuilder->child("uContentTexture") = snapshotImage->makeShader( - SkTileMode::kClamp, SkTileMode::kClamp, SkSamplingOptions(SkFilterMode::kLinear)); + mBuilder->child("uContentTexture") = + snapshotImage->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, + SkSamplingOptions(SkFilterMode::kLinear), matrix); mBuilder->uniform("uInterpolationStrength").set(&INTERPOLATION_STRENGTH_VALUE, 1); mBuilder->uniform("uStretchAffectedDistX").set(&width, 1); mBuilder->uniform("uStretchAffectedDistY").set(&height, 1); diff --git a/libs/hwui/effects/StretchEffect.h b/libs/hwui/effects/StretchEffect.h index 64fb2bf7ef18..25777c278a11 100644 --- a/libs/hwui/effects/StretchEffect.h +++ b/libs/hwui/effects/StretchEffect.h @@ -93,8 +93,8 @@ public: */ float computeStretchedPositionY(float normalizedY) const; - sk_sp<SkShader> getShader(float width, float height, - const sk_sp<SkImage>& snapshotImage) const; + sk_sp<SkShader> getShader(float width, float height, const sk_sp<SkImage>& snapshotImage, + const SkMatrix* matrix) const; float maxStretchAmountX = 0; float maxStretchAmountY = 0; diff --git a/libs/hwui/jni/GraphicsStatsService.cpp b/libs/hwui/jni/GraphicsStatsService.cpp index 1591ffabd26a..e32c9115483c 100644 --- a/libs/hwui/jni/GraphicsStatsService.cpp +++ b/libs/hwui/jni/GraphicsStatsService.cpp @@ -24,10 +24,10 @@ #include <service/GraphicsStatsService.h> #include <stats_event.h> #include <stats_pull_atom_callback.h> -#include <statslog.h> +#include <statslog_hwui.h> -#include "android/graphics/jni_runtime.h" #include "GraphicsJNI.h" +#include "android/graphics/jni_runtime.h" namespace android { @@ -161,14 +161,14 @@ static void nativeInit(JNIEnv* env, jobject javaObject) { AStatsManager_PullAtomMetadata_setCoolDownMillis(metadata, 10); // 10 milliseconds AStatsManager_PullAtomMetadata_setTimeoutMillis(metadata, 2 * MS_PER_SEC); // 2 seconds - AStatsManager_setPullAtomCallback(android::util::GRAPHICS_STATS, metadata, - &graphicsStatsPullCallback, nullptr); + AStatsManager_setPullAtomCallback(stats::GRAPHICS_STATS, metadata, &graphicsStatsPullCallback, + nullptr); AStatsManager_PullAtomMetadata_release(metadata); } static void nativeDestructor(JNIEnv* env, jobject javaObject) { - AStatsManager_clearPullAtomCallback(android::util::GRAPHICS_STATS); + AStatsManager_clearPullAtomCallback(stats::GRAPHICS_STATS); env->DeleteGlobalRef(gGraphicsStatsServiceObject); gGraphicsStatsServiceObject = nullptr; } diff --git a/libs/hwui/jni/Picture.h b/libs/hwui/jni/Picture.h index 536f651473a9..87ba3978a780 100644 --- a/libs/hwui/jni/Picture.h +++ b/libs/hwui/jni/Picture.h @@ -38,6 +38,7 @@ class Picture { public: explicit Picture(const Picture* src = NULL); explicit Picture(sk_sp<SkPicture>&& src); + virtual ~Picture() = default; Canvas* beginRecording(int width, int height); @@ -49,7 +50,7 @@ public: static Picture* CreateFromStream(SkStream* stream); - void serialize(SkWStream* stream) const; + virtual void serialize(SkWStream* stream) const; void draw(Canvas* canvas); diff --git a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp index 4289c455453e..602c32a966d3 100644 --- a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp +++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp @@ -23,6 +23,8 @@ #include <Picture.h> #include <Properties.h> #include <RootRenderNode.h> +#include <SkImagePriv.h> +#include <SkSerialProcs.h> #include <dlfcn.h> #include <gui/TraceUtils.h> #include <inttypes.h> @@ -35,6 +37,7 @@ #include <renderthread/RenderProxy.h> #include <renderthread/RenderTask.h> #include <renderthread/RenderThread.h> +#include <src/image/SkImage_Base.h> #include <thread/CommonPool.h> #include <utils/Color.h> #include <utils/RefBase.h> @@ -497,6 +500,108 @@ private: jobject mObject; }; +using TextureMap = std::unordered_map<uint32_t, sk_sp<SkImage>>; + +struct PictureCaptureState { + // Each frame we move from the active map to the previous map, essentially an LRU of 1 frame + // This avoids repeated readbacks of the same image, but avoids artificially extending the + // lifetime of any particular image. + TextureMap mActiveMap; + TextureMap mPreviousActiveMap; +}; + +// TODO: This & Multi-SKP & Single-SKP should all be de-duped into +// a single "make a SkPicture serailizable-safe" utility somewhere +class PictureWrapper : public Picture { +public: + PictureWrapper(sk_sp<SkPicture>&& src, const std::shared_ptr<PictureCaptureState>& state) + : Picture(), mPicture(std::move(src)) { + ATRACE_NAME("Preparing SKP for capture"); + // Move the active to previous active + state->mPreviousActiveMap = std::move(state->mActiveMap); + state->mActiveMap.clear(); + SkSerialProcs tempProc; + tempProc.fImageCtx = state.get(); + tempProc.fImageProc = collectNonTextureImagesProc; + auto ns = SkNullWStream(); + mPicture->serialize(&ns, &tempProc); + state->mPreviousActiveMap.clear(); + + // Now snapshot a copy of the active map so this PictureWrapper becomes self-sufficient + mTextureMap = state->mActiveMap; + } + + static sk_sp<SkImage> imageForCache(SkImage* img) { + const SkBitmap* bitmap = as_IB(img)->onPeekBitmap(); + // This is a mutable bitmap pretending to be an immutable SkImage. As we're going to + // actually cross thread boundaries here, make a copy so it's immutable proper + if (bitmap && !bitmap->isImmutable()) { + ATRACE_NAME("Copying mutable bitmap"); + return SkImage::MakeFromBitmap(*bitmap); + } + if (img->isTextureBacked()) { + ATRACE_NAME("Readback of texture image"); + return img->makeNonTextureImage(); + } + SkPixmap pm; + if (img->isLazyGenerated() && !img->peekPixels(&pm)) { + ATRACE_NAME("Readback of HW bitmap"); + // This is a hardware bitmap probably + SkBitmap bm; + if (!bm.tryAllocPixels(img->imageInfo())) { + // Failed to allocate, just see what happens + return sk_ref_sp(img); + } + if (RenderProxy::copyImageInto(sk_ref_sp(img), &bm)) { + // Failed to readback + return sk_ref_sp(img); + } + bm.setImmutable(); + return SkMakeImageFromRasterBitmap(bm, kNever_SkCopyPixelsMode); + } + return sk_ref_sp(img); + } + + static sk_sp<SkData> collectNonTextureImagesProc(SkImage* img, void* ctx) { + PictureCaptureState* context = reinterpret_cast<PictureCaptureState*>(ctx); + const uint32_t originalId = img->uniqueID(); + auto it = context->mActiveMap.find(originalId); + if (it == context->mActiveMap.end()) { + auto pit = context->mPreviousActiveMap.find(originalId); + if (pit == context->mPreviousActiveMap.end()) { + context->mActiveMap[originalId] = imageForCache(img); + } else { + context->mActiveMap[originalId] = pit->second; + } + } + return SkData::MakeEmpty(); + } + + static sk_sp<SkData> serializeImage(SkImage* img, void* ctx) { + PictureWrapper* context = reinterpret_cast<PictureWrapper*>(ctx); + const uint32_t id = img->uniqueID(); + auto iter = context->mTextureMap.find(id); + if (iter != context->mTextureMap.end()) { + img = iter->second.get(); + } + return img->encodeToData(); + } + + void serialize(SkWStream* stream) const override { + SkSerialProcs procs; + procs.fImageProc = serializeImage; + procs.fImageCtx = const_cast<PictureWrapper*>(this); + procs.fTypefaceProc = [](SkTypeface* tf, void* ctx) { + return tf->serialize(SkTypeface::SerializeBehavior::kDoIncludeData); + }; + mPicture->serialize(stream, &procs); + } + +private: + sk_sp<SkPicture> mPicture; + TextureMap mTextureMap; +}; + static void android_view_ThreadedRenderer_setPictureCapturedCallbackJNI(JNIEnv* env, jobject clazz, jlong proxyPtr, jobject pictureCallback) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); @@ -507,9 +612,11 @@ static void android_view_ThreadedRenderer_setPictureCapturedCallbackJNI(JNIEnv* LOG_ALWAYS_FATAL_IF(env->GetJavaVM(&vm) != JNI_OK, "Unable to get Java VM"); auto globalCallbackRef = std::make_shared<JGlobalRefHolder>(vm, env->NewGlobalRef(pictureCallback)); - proxy->setPictureCapturedCallback([globalCallbackRef](sk_sp<SkPicture>&& picture) { + auto pictureState = std::make_shared<PictureCaptureState>(); + proxy->setPictureCapturedCallback([globalCallbackRef, + pictureState](sk_sp<SkPicture>&& picture) { JNIEnv* env = getenv(globalCallbackRef->vm()); - Picture* wrapper = new Picture{std::move(picture)}; + Picture* wrapper = new PictureWrapper{std::move(picture), pictureState}; env->CallStaticVoidMethod(gHardwareRenderer.clazz, gHardwareRenderer.invokePictureCapturedCallback, static_cast<jlong>(reinterpret_cast<intptr_t>(wrapper)), diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index d7546d86e4f4..7556af918170 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -171,17 +171,14 @@ void RenderNodeDrawable::forceDraw(SkCanvas* canvas) const { displayList->mProjectedOutline = nullptr; } -static bool layerNeedsPaint(const sk_sp<SkImage>& snapshotImage, const LayerProperties& properties, - float alphaMultiplier, SkPaint* paint) { +static bool layerNeedsPaint(const LayerProperties& properties, float alphaMultiplier, + SkPaint* paint) { if (alphaMultiplier < 1.0f || properties.alpha() < 255 || properties.xferMode() != SkBlendMode::kSrcOver || properties.getColorFilter() != nullptr || - properties.getImageFilter() != nullptr || properties.getStretchEffect().requiresLayer()) { + properties.getStretchEffect().requiresLayer()) { paint->setAlpha(properties.alpha() * alphaMultiplier); paint->setBlendMode(properties.xferMode()); paint->setColorFilter(sk_ref_sp(properties.getColorFilter())); - - sk_sp<SkImageFilter> imageFilter = sk_ref_sp(properties.getImageFilter()); - paint->setImageFilter(std::move(imageFilter)); return true; } return false; @@ -223,6 +220,9 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { // TODO should we let the bound of the drawable do this for us? const SkRect bounds = SkRect::MakeWH(properties.getWidth(), properties.getHeight()); bool quickRejected = properties.getClipToBounds() && canvas->quickReject(bounds); + auto clipBounds = canvas->getLocalClipBounds(); + SkIRect srcBounds = SkIRect::MakeWH(bounds.width(), bounds.height()); + SkIPoint offset = SkIPoint::Make(0.0f, 0.0f); if (!quickRejected) { SkiaDisplayList* displayList = renderNode->getDisplayList().asSkiaDl(); const LayerProperties& layerProperties = properties.layerProperties(); @@ -230,8 +230,19 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { if (renderNode->getLayerSurface() && mComposeLayer) { SkASSERT(properties.effectiveLayerType() == LayerType::RenderLayer); SkPaint paint; - sk_sp<SkImage> snapshotImage = renderNode->getLayerSurface()->makeImageSnapshot(); - layerNeedsPaint(snapshotImage, layerProperties, alphaMultiplier, &paint); + layerNeedsPaint(layerProperties, alphaMultiplier, &paint); + const auto snapshotResult = renderNode->updateSnapshotIfRequired( + canvas->recordingContext(), + layerProperties.getImageFilter(), + clipBounds.roundOut() + ); + sk_sp<SkImage> snapshotImage = snapshotResult->snapshot; + srcBounds = snapshotResult->outSubset; + offset = snapshotResult->outOffset; + const auto dstBounds = SkIRect::MakeXYWH(offset.x(), + offset.y(), + srcBounds.width(), + srcBounds.height()); SkSamplingOptions sampling(SkFilterMode::kLinear); // surfaces for layers are created on LAYER_SIZE boundaries (which are >= layer size) so @@ -257,7 +268,8 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { TransformCanvas transformCanvas(canvas, SkBlendMode::kClear); displayList->draw(&transformCanvas); } - canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, + canvas->drawImageRect(snapshotImage, SkRect::Make(srcBounds), + SkRect::Make(dstBounds), sampling, &paint, SkCanvas::kStrict_SrcRectConstraint); } else { // If we do have stretch effects and have hole punches, @@ -265,6 +277,16 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { // get the corresponding hole punches. // Then apply the stretch to the mask and draw the mask to // the destination + // Also if the stretchy container has an ImageFilter applied + // to it (i.e. blur) we need to take into account the offset + // that will be generated with this result. Ex blurs will "grow" + // the source image by the blur radius so we need to translate + // the shader by the same amount to render in the same location + SkMatrix matrix; + matrix.setTranslate( + offset.x() - srcBounds.left(), + offset.y() - srcBounds.top() + ); if (renderNode->hasHolePunches()) { GrRecordingContext* context = canvas->recordingContext(); StretchMask& stretchMask = renderNode->getStretchMask(); @@ -275,11 +297,10 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { canvas); } - sk_sp<SkShader> stretchShader = stretch.getShader(bounds.width(), - bounds.height(), - snapshotImage); + sk_sp<SkShader> stretchShader = + stretch.getShader(bounds.width(), bounds.height(), snapshotImage, &matrix); paint.setShader(stretchShader); - canvas->drawRect(bounds, paint); + canvas->drawRect(SkRect::Make(dstBounds), paint); } if (!renderNode->getSkiaLayer()->hasRenderedSinceRepaint) { diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index a78cd8316624..9bca4df577c9 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -75,7 +75,9 @@ bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty, con bool opaque, const LightInfo& lightInfo, const std::vector<sp<RenderNode>>& renderNodes, FrameInfoVisualizer* profiler) { - mEglManager.damageFrame(frame, dirty); + if (!isCapturingSkp()) { + mEglManager.damageFrame(frame, dirty); + } SkColorType colorType = getSurfaceColorType(); // setup surface for fbo0 diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 039b0f9a6e9a..5462623e75ff 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -420,7 +420,7 @@ void SkiaPipeline::endCapture(SkSurface* surface) { procs.fTypefaceProc = [](SkTypeface* tf, void* ctx){ return tf->serialize(SkTypeface::SerializeBehavior::kDoIncludeData); }; - auto data = picture->serialize(); + auto data = picture->serialize(&procs); savePictureAsync(data, mCapturedFile); mCaptureSequence = 0; mCaptureMode = CaptureMode::None; @@ -470,8 +470,7 @@ void SkiaPipeline::renderFrameImpl(const SkRect& clip, const SkMatrix& preTransform) { SkAutoCanvasRestore saver(canvas, true); auto clipRestriction = preTransform.mapRect(clip).roundOut(); - if (CC_UNLIKELY(mCaptureMode == CaptureMode::SingleFrameSKP - || mCaptureMode == CaptureMode::MultiFrameSKP)) { + if (CC_UNLIKELY(isCapturingSkp())) { canvas->drawAnnotation(SkRect::Make(clipRestriction), "AndroidDeviceClipRestriction", nullptr); } else { diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.h b/libs/hwui/pipeline/skia/SkiaPipeline.h index 46580358aaf5..bc8a5659dd83 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.h +++ b/libs/hwui/pipeline/skia/SkiaPipeline.h @@ -80,6 +80,8 @@ protected: SkColorType mSurfaceColorType; sk_sp<SkColorSpace> mSurfaceColorSpace; + bool isCapturingSkp() const { return mCaptureMode != CaptureMode::None; } + private: void renderFrameImpl(const SkRect& clip, const std::vector<sp<RenderNode>>& nodes, bool opaque, diff --git a/libs/hwui/pipeline/skia/StretchMask.cpp b/libs/hwui/pipeline/skia/StretchMask.cpp index 1c58c6a5d440..2dbeb3adfab3 100644 --- a/libs/hwui/pipeline/skia/StretchMask.cpp +++ b/libs/hwui/pipeline/skia/StretchMask.cpp @@ -59,8 +59,7 @@ void StretchMask::draw(GrRecordingContext* context, } sk_sp<SkImage> maskImage = mMaskSurface->makeImageSnapshot(); - sk_sp<SkShader> maskStretchShader = stretch.getShader( - width, height, maskImage); + sk_sp<SkShader> maskStretchShader = stretch.getShader(width, height, maskImage, nullptr); SkPaint maskPaint; maskPaint.setShader(maskStretchShader); diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index ac19a153b6fb..6fd644bfa28e 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -390,6 +390,17 @@ int RenderProxy::copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap) { } } +int RenderProxy::copyImageInto(const sk_sp<SkImage>& image, SkBitmap* bitmap) { + RenderThread& thread = RenderThread::getInstance(); + if (gettid() == thread.getTid()) { + // TODO: fix everything that hits this. We should never be triggering a readback ourselves. + return (int)thread.readback().copyImageInto(image, bitmap); + } else { + return thread.queue().runSync( + [&]() -> int { return (int)thread.readback().copyImageInto(image, bitmap); }); + } +} + void RenderProxy::disableVsync() { Properties::disableVsync = true; } diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index 0681dc5e16be..6d80949a4eba 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -136,6 +136,7 @@ public: static void prepareToDraw(Bitmap& bitmap); static int copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap); + static int copyImageInto(const sk_sp<SkImage>& image, SkBitmap* bitmap); static void disableVsync(); diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp index 5a718330d68f..f70149111116 100644 --- a/libs/hwui/renderthread/VulkanManager.cpp +++ b/libs/hwui/renderthread/VulkanManager.cpp @@ -425,27 +425,38 @@ Frame VulkanManager::dequeueNextBuffer(VulkanSurface* surface) { semaphoreInfo.flags = 0; VkSemaphore semaphore; VkResult err = mCreateSemaphore(mDevice, &semaphoreInfo, nullptr, &semaphore); - LOG_ALWAYS_FATAL_IF(VK_SUCCESS != err, "Failed to create import semaphore, err: %d", - err); - - VkImportSemaphoreFdInfoKHR importInfo; - importInfo.sType = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR; - importInfo.pNext = nullptr; - importInfo.semaphore = semaphore; - importInfo.flags = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT; - importInfo.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT; - importInfo.fd = fence_clone; - - err = mImportSemaphoreFdKHR(mDevice, &importInfo); - LOG_ALWAYS_FATAL_IF(VK_SUCCESS != err, "Failed to import semaphore, err: %d", err); - - GrBackendSemaphore backendSemaphore; - backendSemaphore.initVulkan(semaphore); - bufferInfo->skSurface->wait(1, &backendSemaphore); - // The following flush blocks the GPU immediately instead of waiting for other - // drawing ops. It seems dequeue_fence is not respected otherwise. - // TODO: remove the flush after finding why backendSemaphore is not working. - bufferInfo->skSurface->flushAndSubmit(); + if (err != VK_SUCCESS) { + ALOGE("Failed to create import semaphore, err: %d", err); + close(fence_clone); + sync_wait(bufferInfo->dequeue_fence, -1 /* forever */); + } else { + VkImportSemaphoreFdInfoKHR importInfo; + importInfo.sType = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR; + importInfo.pNext = nullptr; + importInfo.semaphore = semaphore; + importInfo.flags = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT; + importInfo.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT; + importInfo.fd = fence_clone; + + err = mImportSemaphoreFdKHR(mDevice, &importInfo); + if (err != VK_SUCCESS) { + ALOGE("Failed to import semaphore, err: %d", err); + mDestroySemaphore(mDevice, semaphore, nullptr); + close(fence_clone); + sync_wait(bufferInfo->dequeue_fence, -1 /* forever */); + } else { + GrBackendSemaphore backendSemaphore; + backendSemaphore.initVulkan(semaphore); + // Skia will take ownership of the VkSemaphore and delete it once the wait + // has finished. The VkSemaphore also owns the imported fd, so it will + // close the fd when it is deleted. + bufferInfo->skSurface->wait(1, &backendSemaphore); + // The following flush blocks the GPU immediately instead of waiting for + // other drawing ops. It seems dequeue_fence is not respected otherwise. + // TODO: remove the flush after finding why backendSemaphore is not working. + bufferInfo->skSurface->flushAndSubmit(); + } + } } } } @@ -621,6 +632,7 @@ status_t VulkanManager::fenceWait(int fence, GrDirectContext* grContext) { VkSemaphore semaphore; VkResult err = mCreateSemaphore(mDevice, &semaphoreInfo, nullptr, &semaphore); if (VK_SUCCESS != err) { + close(fenceFd); ALOGE("Failed to create import semaphore, err: %d", err); return UNKNOWN_ERROR; } @@ -635,6 +647,7 @@ status_t VulkanManager::fenceWait(int fence, GrDirectContext* grContext) { err = mImportSemaphoreFdKHR(mDevice, &importInfo); if (VK_SUCCESS != err) { mDestroySemaphore(mDevice, semaphore, nullptr); + close(fenceFd); ALOGE("Failed to import semaphore, err: %d", err); return UNKNOWN_ERROR; } @@ -642,7 +655,8 @@ status_t VulkanManager::fenceWait(int fence, GrDirectContext* grContext) { GrBackendSemaphore beSemaphore; beSemaphore.initVulkan(semaphore); - // Skia takes ownership of the semaphore and will delete it once the wait has finished. + // Skia will take ownership of the VkSemaphore and delete it once the wait has finished. The + // VkSemaphore also owns the imported fd, so it will close the fd when it is deleted. grContext->wait(1, &beSemaphore); grContext->flushAndSubmit(); diff --git a/libs/hwui/service/GraphicsStatsService.cpp b/libs/hwui/service/GraphicsStatsService.cpp index e4198017aee0..ece59051dae7 100644 --- a/libs/hwui/service/GraphicsStatsService.cpp +++ b/libs/hwui/service/GraphicsStatsService.cpp @@ -16,20 +16,19 @@ #include "GraphicsStatsService.h" +#include <android/util/ProtoOutputStream.h> #include <errno.h> #include <fcntl.h> #include <google/protobuf/io/zero_copy_stream_impl_lite.h> #include <inttypes.h> #include <log/log.h> +#include <stats_event.h> +#include <statslog_hwui.h> #include <sys/mman.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> -#include <android/util/ProtoOutputStream.h> -#include <stats_event.h> -#include <statslog.h> - #include "JankTracker.h" #include "protos/graphicsstats.pb.h" @@ -539,7 +538,7 @@ void GraphicsStatsService::finishDumpInMemory(Dump* dump, AStatsEventList* data, for (int stat_index = 0; stat_index < serviceDump.stats_size(); stat_index++) { auto& stat = serviceDump.stats(stat_index); AStatsEvent* event = AStatsEventList_addStatsEvent(data); - AStatsEvent_setAtomId(event, android::util::GRAPHICS_STATS); + AStatsEvent_setAtomId(event, stats::GRAPHICS_STATS); AStatsEvent_writeString(event, stat.package_name().c_str()); AStatsEvent_writeInt64(event, (int64_t)stat.version_code()); AStatsEvent_writeInt64(event, (int64_t)stat.stats_start()); diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 5f6fc17c38cb..8012f03d84b3 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -27,6 +27,7 @@ import android.content.pm.PackageManager; import android.media.audiofx.AudioEffect; import android.media.audiopolicy.AudioMix; import android.os.Build; +import android.os.IBinder; import android.os.Vibrator; import android.telephony.TelephonyManager; import android.util.Log; @@ -1655,6 +1656,8 @@ public class AudioSystem /** @hide */ @UnsupportedAppUsage public static native int checkAudioFlinger(); + /** @hide */ + public static native void setAudioFlingerBinder(IBinder audioFlinger); /** @hide */ public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); diff --git a/packages/DynamicSystemInstallationService/res/values-uz/strings.xml b/packages/DynamicSystemInstallationService/res/values-uz/strings.xml index 5597fb5e0e51..a34ac0007886 100644 --- a/packages/DynamicSystemInstallationService/res/values-uz/strings.xml +++ b/packages/DynamicSystemInstallationService/res/values-uz/strings.xml @@ -8,7 +8,7 @@ <string name="notification_image_validation_failed" msgid="2720357826403917016">"Disk tasviri tekshiruvi amalga oshmadi. Oʻrnatishni bekor qiling."</string> <string name="notification_dynsystem_in_use" msgid="1053194595682188396">"Hozirda dinamik tizim ishga tushirilgan. Asl Android versiyasidan foydlanish uchun qayta ishga tushiring."</string> <string name="notification_action_cancel" msgid="5929299408545961077">"Bekor qilish"</string> - <string name="notification_action_discard" msgid="1817481003134947493">"Bekor qilish"</string> + <string name="notification_action_discard" msgid="1817481003134947493">"Rad etish"</string> <string name="notification_action_reboot_to_dynsystem" msgid="4015817159115912479">"Boshidan"</string> <string name="notification_action_reboot_to_origin" msgid="4013901243271889897">"Boshidan"</string> <string name="toast_dynsystem_discarded" msgid="1733249860276017050">"Dinamik tizim bekor qilindi"</string> diff --git a/packages/PackageInstaller/res/values-bs/strings.xml b/packages/PackageInstaller/res/values-bs/strings.xml index 66d57e382cc3..dc07c025e08f 100644 --- a/packages/PackageInstaller/res/values-bs/strings.xml +++ b/packages/PackageInstaller/res/values-bs/strings.xml @@ -83,9 +83,9 @@ <string name="untrusted_external_source_warning" product="tablet" msgid="7067510047443133095">"Radi vaše sigurnosti, tabletu trenutno nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora. Ovo možete promijeniti u Postavkama."</string> <string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"Radi vaše sigurnosti, TV-u trenutno nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora. Ovo možete promijeniti u Postavkama."</string> <string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"Radi vaše sigurnosti, telefonu trenutno nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora. Ovo možete promijeniti u Postavkama."</string> - <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Vaši podaci na telefonu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na telefonu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> - <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Vaši podaci na tabletu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na tabletu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> - <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Vaši podaci na TV-u i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na TV-u ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> + <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Vaši podaci na telefonu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, prihvatate odgovornost za bilo kakvu štetu na telefonu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> + <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Vaši podaci na tabletu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, prihvatate odgovornost za bilo kakvu štetu na tabletu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> + <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Vaši podaci na TV-u i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, prihvatate odgovornost za bilo kakvu štetu na TV-u ili gubitak podataka do kojih može doći korištenjem aplikacije."</string> <string name="anonymous_source_continue" msgid="4375745439457209366">"Nastavi"</string> <string name="external_sources_settings" msgid="4046964413071713807">"Postavke"</string> <string name="wear_app_channel" msgid="1960809674709107850">"Instaliranje/deinstaliranje Wear aplik."</string> diff --git a/packages/PrintSpooler/res/values-az/strings.xml b/packages/PrintSpooler/res/values-az/strings.xml index 887434b4409f..fae4736f29e9 100644 --- a/packages/PrintSpooler/res/values-az/strings.xml +++ b/packages/PrintSpooler/res/values-az/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="4469836075319831821">"Çap Spuler"</string> - <string name="more_options_button" msgid="2243228396432556771">"Digər variantlar"</string> + <string name="more_options_button" msgid="2243228396432556771">"Digər seçimlər"</string> <string name="label_destination" msgid="9132510997381599275">"Hədəf"</string> <string name="label_copies" msgid="3634531042822968308">"Surətlər"</string> <string name="label_copies_summary" msgid="3861966063536529540">"Nüsxələr:"</string> diff --git a/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml b/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml index 54731f51248b..0929cc3d84a7 100644 --- a/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml +++ b/packages/SettingsLib/IllustrationPreference/res/layout/illustration_preference.xml @@ -25,7 +25,7 @@ <LinearLayout android:layout_width="match_parent" - android:layout_height="300dp" + android:layout_height="@dimen/settingslib_illustration_height" android:layout_gravity="center" android:gravity="center_vertical" android:padding="@dimen/settingslib_illustration_padding" @@ -33,7 +33,7 @@ <com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_view" android:adjustViewBounds="true" - android:maxWidth="412dp" + android:maxWidth="@dimen/settingslib_illustration_width" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center" @@ -44,8 +44,8 @@ <FrameLayout android:id="@+id/middleground_layout" - android:layout_width="412dp" - android:layout_height="300dp" + android:layout_width="@dimen/settingslib_illustration_width" + android:layout_height="@dimen/settingslib_illustration_height" android:padding="@dimen/settingslib_illustration_padding" android:background="@android:color/transparent" android:layout_gravity="center" diff --git a/packages/SettingsLib/IllustrationPreference/res/values/dimens.xml b/packages/SettingsLib/IllustrationPreference/res/values/dimens.xml index 5e540d3740f9..3f38769973db 100644 --- a/packages/SettingsLib/IllustrationPreference/res/values/dimens.xml +++ b/packages/SettingsLib/IllustrationPreference/res/values/dimens.xml @@ -18,4 +18,7 @@ <resources> <!-- Padding of illustration --> <dimen name="settingslib_illustration_padding">12dp</dimen> + + <dimen name="settingslib_illustration_width">412dp</dimen> + <dimen name="settingslib_illustration_height">300dp</dimen> </resources> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 7ae19707a672..603d09344e2e 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -1287,25 +1287,10 @@ <!-- Title for the setting screen for controlling apps that can schedule alarms [CHAR LIMIT=30] --> <string name="alarms_and_reminders_title">Alarms & reminders</string> <!-- Description that appears below the alarms_and_reminders switch [CHAR LIMIT=NONE] --> - <string name="alarms_and_reminders_footer_title" product="default"> - Allow this app to set alarms and schedule other actions. - This app may be used when you\u2019re not using your phone, which may use more battery. - If this permission is off, this app may not function normally, - and its alarms won\u2019t work as scheduled. - </string> - <!-- Description that appears below the alarms_and_reminders switch [CHAR LIMIT=NONE] --> - <string name="alarms_and_reminders_footer_title" product="tablet"> - Allow this app to set alarms and schedule other actions. - This app may be used when you\u2019re not using your tablet, which may use more battery. - If this permission is off, this app may not function normally, - and its alarms won\u2019t work as scheduled. - </string> - <!-- Description that appears below the alarms_and_reminders switch [CHAR LIMIT=NONE] --> - <string name="alarms_and_reminders_footer_title" product="device"> - Allow this app to set alarms and schedule other actions. - This app may be used when you\u2019re not using your device, which may use more battery. - If this permission is off, this app may not function normally, - and its alarms won\u2019t work as scheduled. + <string name="alarms_and_reminders_footer_title"> + Allow this app to set alarms and schedule time-sensitive actions. + This lets the app run in the background, which may use more battery.\n\nIf this permission + is off, existing alarms and time-based events scheduled by this app won\u2019t work. </string> <!-- Keywords for setting screen for controlling apps that can schedule alarms [CHAR LIMIT=100] --> <string name="keywords_alarms_and_reminders">schedule, alarm, reminder, clock</string> diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java index c9c3db8a2e27..eb8196176034 100644 --- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java +++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java @@ -75,5 +75,6 @@ public class GlobalSettings { Settings.Global.USER_DISABLED_HDR_FORMATS, Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, Settings.Global.DEVICE_CONFIG_SYNC_DISABLED, + Settings.Global.POWER_BUTTON_LONG_PRESS, }; } diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index f538875bf337..3297937e3e75 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -587,7 +587,6 @@ public class SettingsBackupTest { Settings.Global.RADIO_BUG_SYSTEM_ERROR_COUNT_THRESHOLD, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT, Settings.Global.MODEM_STACK_ENABLED_FOR_SLOT, - Settings.Global.POWER_BUTTON_LONG_PRESS, Settings.Global.POWER_BUTTON_VERY_LONG_PRESS, Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, // Temporary for R beta Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER, diff --git a/packages/Shell/res/values-pa/strings.xml b/packages/Shell/res/values-pa/strings.xml index d0c29055ecc1..daeac3cf0b04 100644 --- a/packages/Shell/res/values-pa/strings.xml +++ b/packages/Shell/res/values-pa/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="3701846017049540910">"ਸ਼ੈਲ"</string> + <string name="app_label" msgid="3701846017049540910">"ਸ਼ੈੱਲ"</string> <string name="bugreport_notification_channel" msgid="2574150205913861141">"ਬੱਗ ਰਿਪੋਰਟਾਂ"</string> <string name="bugreport_in_progress_title" msgid="4311705936714972757">"ਬੱਗ ਰਿਪੋਰਟ <xliff:g id="ID">#%d</xliff:g> ਸਿਰਜੀ ਜਾ ਰਹੀ ਹੈ"</string> <string name="bugreport_finished_title" msgid="4429132808670114081">"ਬੱਗ ਰਿਪੋਰਟ <xliff:g id="ID">#%d</xliff:g> ਕੈਪਚਰ ਕੀਤੀ ਗਈ"</string> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index 76ee66b82cce..08717675e295 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -136,6 +136,6 @@ <item quantity="one">സിം ഇപ്പോൾ പ്രവർത്തനരഹിതമാക്കി. തുടരുന്നതിന് PUK കോഡ് നൽകുക. സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി <xliff:g id="_NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു. വിശദാംശങ്ങൾക്ക് കാരിയറുമായി ബന്ധപ്പെടുക.</item> </plurals> <string name="clock_title_default" msgid="6342735240617459864">"ഡിഫോൾട്ട്"</string> - <string name="clock_title_bubble" msgid="2204559396790593213">"ബബ്ൾ"</string> + <string name="clock_title_bubble" msgid="2204559396790593213">"ബബിൾ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"അനലോഗ്"</string> </resources> diff --git a/packages/SystemUI/res/drawable/screenshot_border.xml b/packages/SystemUI/res/drawable/screenshot_border.xml index bb858dbc795a..c1accdc7063a 100644 --- a/packages/SystemUI/res/drawable/screenshot_border.xml +++ b/packages/SystemUI/res/drawable/screenshot_border.xml @@ -19,5 +19,5 @@ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" android:shape="rectangle"> <solid android:color="?androidprv:attr/colorSurface"/> - <corners android:radius="20dp"/> + <corners android:radius="24dp"/> </shape> diff --git a/packages/SystemUI/res/drawable/screenshot_edit_background.xml b/packages/SystemUI/res/drawable/screenshot_edit_background.xml index 5c3c12c572f6..ff5c62e1600b 100644 --- a/packages/SystemUI/res/drawable/screenshot_edit_background.xml +++ b/packages/SystemUI/res/drawable/screenshot_edit_background.xml @@ -20,7 +20,7 @@ android:color="?android:textColorPrimary"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> - <solid android:color="?androidprv:attr/colorAccentSecondary"/> + <solid android:color="?androidprv:attr/colorAccentPrimary"/> <corners android:radius="16dp"/> </shape> </item> diff --git a/packages/SystemUI/res/drawable/screenshot_save_background.xml b/packages/SystemUI/res/drawable/screenshot_save_background.xml index cfd2dc214477..b61b28ed1d9e 100644 --- a/packages/SystemUI/res/drawable/screenshot_save_background.xml +++ b/packages/SystemUI/res/drawable/screenshot_save_background.xml @@ -20,7 +20,7 @@ android:color="?android:textColorPrimary"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> - <solid android:color="?androidprv:attr/colorAccentSecondary"/> + <solid android:color="?androidprv:attr/colorAccentPrimary"/> <corners android:radius="20dp"/> </shape> </item> diff --git a/packages/SystemUI/res/layout/global_screenshot.xml b/packages/SystemUI/res/layout/global_screenshot.xml index 5bd181c82492..93bd58113bc2 100644 --- a/packages/SystemUI/res/layout/global_screenshot.xml +++ b/packages/SystemUI/res/layout/global_screenshot.xml @@ -21,6 +21,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView + android:id="@+id/screenshot_scrolling_scrim" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone"/> + <ImageView android:id="@+id/global_screenshot_actions_background" android:layout_height="@dimen/screenshot_bg_protection_height" android:layout_width="match_parent" diff --git a/packages/SystemUI/res/layout/global_screenshot_static.xml b/packages/SystemUI/res/layout/global_screenshot_static.xml index 60dbaf97b7f7..ba46edced03c 100644 --- a/packages/SystemUI/res/layout/global_screenshot_static.xml +++ b/packages/SystemUI/res/layout/global_screenshot_static.xml @@ -71,7 +71,7 @@ android:background="@drawable/screenshot_border" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/screenshot_preview_end" + app:layout_constraintEnd_toEndOf="@+id/screenshot_preview_end" app:layout_constraintTop_toTopOf="@+id/screenshot_preview_top"/> <androidx.constraintlayout.widget.Barrier android:id="@+id/screenshot_preview_end" @@ -91,8 +91,7 @@ android:id="@+id/global_screenshot_preview" android:visibility="invisible" android:layout_width="@dimen/global_screenshot_x_scale" - android:layout_marginStart="4dp" - android:layout_marginBottom="4dp" + android:layout_margin="4dp" android:layout_height="wrap_content" android:layout_gravity="center" android:elevation="@dimen/screenshot_preview_elevation" @@ -101,7 +100,9 @@ android:background="@drawable/screenshot_preview_background" android:adjustViewBounds="true" app:layout_constraintBottom_toBottomOf="@+id/global_screenshot_preview_border" - app:layout_constraintStart_toStartOf="@+id/global_screenshot_preview_border"> + app:layout_constraintStart_toStartOf="@+id/global_screenshot_preview_border" + app:layout_constraintEnd_toEndOf="@+id/global_screenshot_preview_border" + app:layout_constraintTop_toTopOf="@+id/global_screenshot_preview_border"> </ImageView> <FrameLayout android:id="@+id/global_screenshot_dismiss_button" @@ -121,4 +122,12 @@ android:layout_margin="@dimen/screenshot_dismiss_button_margin" android:src="@drawable/screenshot_cancel"/> </FrameLayout> + <ImageView + android:id="@+id/screenshot_scrollable_preview" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:scaleType="matrix" + app:layout_constraintStart_toStartOf="@id/global_screenshot_preview" + app:layout_constraintTop_toTopOf="@id/global_screenshot_preview" + android:elevation="@dimen/screenshot_preview_elevation"/> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/packages/SystemUI/res/layout/long_screenshot.xml b/packages/SystemUI/res/layout/long_screenshot.xml index 8e30aecd6a27..4765b44d78c8 100644 --- a/packages/SystemUI/res/layout/long_screenshot.xml +++ b/packages/SystemUI/res/layout/long_screenshot.xml @@ -62,6 +62,7 @@ android:paddingHorizontal="48dp" android:paddingTop="8dp" android:paddingBottom="42dp" + android:alpha="0" app:layout_constrainedHeight="true" app:layout_constrainedWidth="true" app:layout_constraintTop_toBottomOf="@id/save" @@ -72,6 +73,16 @@ tools:minHeight="100dp" tools:minWidth="100dp" /> + <ImageView + android:id="@+id/enter_transition" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:scaleType="matrix" + app:layout_constraintTop_toTopOf="@id/preview" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + android:transitionName="screenshot_preview_image"/> + <com.android.systemui.screenshot.CropView android:id="@+id/crop_view" android:layout_width="0px" @@ -86,7 +97,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:handleThickness="@dimen/screenshot_crop_handle_thickness" - app:handleColor="?androidprv:attr/colorAccentSecondary" + app:handleColor="?androidprv:attr/colorAccentPrimary" app:scrimColor="@color/screenshot_crop_scrim" tools:background="?android:colorBackground" tools:minHeight="100dp" @@ -128,7 +139,7 @@ android:id="@+id/transition" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintTop_toBottomOf="@id/save" + app:layout_constraintTop_toTopOf="@id/preview" app:layout_constraintStart_toStartOf="parent" android:scaleType="centerCrop" android:visibility="invisible" diff --git a/packages/SystemUI/res/layout/media_smartspace_recommendations.xml b/packages/SystemUI/res/layout/media_smartspace_recommendations.xml index 9a575893458d..2ffc16b35b9f 100644 --- a/packages/SystemUI/res/layout/media_smartspace_recommendations.xml +++ b/packages/SystemUI/res/layout/media_smartspace_recommendations.xml @@ -127,7 +127,7 @@ <TextView android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="20dp" + android:layout_marginTop="@dimen/qs_media_padding" android:layout_marginStart="@dimen/qs_media_padding" android:layout_marginEnd="@dimen/qs_media_padding" android:id="@+id/remove_text" @@ -150,7 +150,6 @@ android:layout_marginStart="@dimen/qs_media_padding" android:layout_marginEnd="@dimen/qs_media_info_spacing" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -164,6 +163,7 @@ android:id="@+id/settings_text" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/controls_media_settings_button" /> </FrameLayout> @@ -176,7 +176,6 @@ android:layout_marginStart="@dimen/qs_media_info_spacing" android:layout_marginEnd="@dimen/qs_media_info_spacing" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -188,6 +187,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/cancel" /> </FrameLayout> @@ -200,7 +200,6 @@ android:layout_marginStart="@dimen/qs_media_info_spacing" android:layout_marginEnd="@dimen/qs_media_padding" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -212,6 +211,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/controls_media_dismiss_button" /> diff --git a/packages/SystemUI/res/layout/media_view.xml b/packages/SystemUI/res/layout/media_view.xml index 10bdaaae6634..c341f7393318 100644 --- a/packages/SystemUI/res/layout/media_view.xml +++ b/packages/SystemUI/res/layout/media_view.xml @@ -135,7 +135,8 @@ android:forceHasOverlappingRendering="false"> <LinearLayout android:layout_width="wrap_content" - android:layout_height="@dimen/qs_seamless_height" + android:layout_height="wrap_content" + android:minHeight="@dimen/qs_seamless_height" android:theme="@style/MediaPlayer.SolidButton" android:background="@drawable/qs_media_seamless_background" android:orientation="horizontal" @@ -153,11 +154,12 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="4dp" - android:fontFamily="@*android:string/config_headlineFontFamily" + android:fontFamily="@*android:string/config_headlineFontFamilyMedium" android:singleLine="true" android:text="@*android:string/ext_media_seamless_action" android:textDirection="locale" - android:textSize="12sp" /> + android:textSize="12sp" + android:lineHeight="16sp" /> </LinearLayout> </LinearLayout> @@ -215,7 +217,7 @@ <TextView android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="20dp" + android:layout_marginTop="@dimen/qs_media_padding" android:layout_marginStart="@dimen/qs_media_padding" android:layout_marginEnd="@dimen/qs_media_padding" android:id="@+id/remove_text" @@ -238,7 +240,6 @@ android:layout_marginStart="@dimen/qs_media_padding" android:layout_marginEnd="@dimen/qs_media_info_spacing" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -252,6 +253,7 @@ android:id="@+id/settings_text" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/controls_media_settings_button" /> </FrameLayout> @@ -264,7 +266,6 @@ android:layout_marginStart="@dimen/qs_media_info_spacing" android:layout_marginEnd="@dimen/qs_media_info_spacing" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -276,6 +277,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/cancel" /> </FrameLayout> @@ -288,7 +290,6 @@ android:layout_marginStart="@dimen/qs_media_info_spacing" android:layout_marginEnd="@dimen/qs_media_padding" android:layout_marginBottom="@dimen/qs_media_padding" - android:layout_marginTop="6dp" app:layout_constrainedWidth="true" app:layout_constraintWidth_min="48dp" app:layout_constraintHeight_min="48dp" @@ -300,6 +301,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center|bottom" style="@style/MediaPlayer.OutlineButton" android:text="@string/controls_media_dismiss_button" /> diff --git a/packages/SystemUI/res/layout/volume_ringer_drawer.xml b/packages/SystemUI/res/layout/volume_ringer_drawer.xml index 9b6c92c71e5d..1112bcdbd14d 100644 --- a/packages/SystemUI/res/layout/volume_ringer_drawer.xml +++ b/packages/SystemUI/res/layout/volume_ringer_drawer.xml @@ -59,7 +59,7 @@ android:id="@+id/volume_drawer_vibrate" android:layout_width="@dimen/volume_ringer_drawer_item_size" android:layout_height="@dimen/volume_ringer_drawer_item_size" - android:description="@string/volume_ringer_hint_vibrate" + android:contentDescription="@string/volume_ringer_hint_vibrate" android:gravity="center"> <ImageView @@ -76,7 +76,7 @@ android:id="@+id/volume_drawer_mute" android:layout_width="@dimen/volume_ringer_drawer_item_size" android:layout_height="@dimen/volume_ringer_drawer_item_size" - android:description="@string/volume_ringer_hint_mute" + android:contentDescription="@string/volume_ringer_hint_mute" android:gravity="center"> <ImageView @@ -93,7 +93,7 @@ android:id="@+id/volume_drawer_normal" android:layout_width="@dimen/volume_ringer_drawer_item_size" android:layout_height="@dimen/volume_ringer_drawer_item_size" - android:description="@string/volume_ringer_hint_unmute" + android:contentDescription="@string/volume_ringer_hint_unmute" android:gravity="center"> <ImageView @@ -117,7 +117,7 @@ android:layout_width="@dimen/volume_ringer_drawer_item_size" android:layout_height="@dimen/volume_ringer_drawer_item_size" android:layout_gravity="bottom|right" - android:description="@string/volume_ringer_change" + android:contentDescription="@string/volume_ringer_change" android:background="@drawable/volume_drawer_selection_bg"> <ImageView diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index aa997440d102..214937105315 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Wekker"</string> <string name="wallet_title" msgid="5369767670735827105">"Beursie"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Stel op om vinniger, veiliger aankope met jou foon te doen"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Wys alles"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ontsluit om te betaal"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nie opgestel nie"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Maak toe"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Hervat"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> deur <xliff:g id="ARTIST_NAME">%2$s</xliff:g> speel tans vanaf <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Speel"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Maak <xliff:g id="APP_LABEL">%1$s</xliff:g> oop"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Speel <xliff:g id="SONG_NAME">%1$s</xliff:g> deur <xliff:g id="ARTIST_NAME">%2$s</xliff:g> vanaf <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Speel <xliff:g id="SONG_NAME">%1$s</xliff:g> vanaf <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Onaktief, gaan program na"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Fout, probeer tans weer …"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nie gekry nie"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 3d2e6b2520c5..fe3cc8eaeb06 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ኤተርኔት"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ማንቂያ"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"በስልክዎ በመጠቀም ፈጣን እና የበለጠ ደህንነቱ በተጠበቀ መንገድ ግዢዎችን ለመፈጸም ዝግጁ ይሁኑ"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"ሁሉንም አሳይ"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ለመክፈል ይክፈቱ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"አልተዋቀረም"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"አሰናብት"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ከቆመበት ቀጥል"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ቅንብሮች"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> በ<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ከ<xliff:g id="APP_LABEL">%3$s</xliff:g> እየተጫወተ ነው"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"አጫውት"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> ክፈት"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g> በ<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ከ<xliff:g id="APP_LABEL">%3$s</xliff:g> ያጫውቱ"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ከ<xliff:g id="APP_LABEL">%2$s</xliff:g> ያጫውቱ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ንቁ ያልኾነ፣ መተግበሪያን ይፈትሹ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ስህተት፣ እንደገና በመሞከር ላይ…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"አልተገኘም"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index d3401f89d846..83b483e81463 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -117,7 +117,7 @@ <string name="screenrecord_cancel_label" msgid="7850926573274483294">"إلغاء"</string> <string name="screenrecord_share_label" msgid="5025590804030086930">"مشاركة"</string> <string name="screenrecord_cancel_success" msgid="1775448688137393901">"تمّ إلغاء تسجيل الشاشة."</string> - <string name="screenrecord_save_title" msgid="1886652605520893850">"تم حفظ تسجيل الشاشة."</string> + <string name="screenrecord_save_title" msgid="1886652605520893850">"تم حفظ تسجيل الشاشة"</string> <string name="screenrecord_save_text" msgid="3008973099800840163">"انقر لعرض التسجيل."</string> <string name="screenrecord_delete_error" msgid="2870506119743013588">"حدث خطأ أثناء حذف تسجيل الشاشة."</string> <string name="screenrecord_permission_error" msgid="7856841237023137686">"تعذّر الحصول على أذونات."</string> @@ -621,7 +621,7 @@ <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"يؤدي هذا الإجراء إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. لإلغاء تثبيت الشاشة على هذا التطبيق، اسحب بسرعة للأعلى مع إبقاء الإصبع على الشاشة."</string> <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار زر \"نظرة عامة\" لإزالة التثبيت."</string> <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار زر \"الشاشة الرئيسية\" لإزالة التثبيت."</string> - <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"يمكن الوصول إلى البيانات الشخصية (مثلاً جهات الاتصال ومحتوى الرسائل الإلكترونية)"</string> + <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"يمكن الوصول إلى البيانات الشخصية (مثلاً جهات الاتصال ومحتوى الرسائل الإلكترونية)."</string> <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"عند تثبيت الشاشة على تطبيق معيّن، سيظل بإمكان التطبيق فتح تطبيقات أخرى."</string> <string name="screen_pinning_toast" msgid="8177286912533744328">"لإلغاء تثبيت الشاشة على هذا التطبيق، المس مع الاستمرار زرّي \"الرجوع\" و\"لمحة عامة\" (رمز المربّع)."</string> <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"لإلغاء تثبيت الشاشة على هذا التطبيق، المس مع الاستمرار زرّي \"الرجوع\" و\"الشاشة الرئيسية\"."</string> @@ -678,6 +678,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"إيثرنت"</string> <string name="status_bar_alarm" msgid="87160847643623352">"المنبّه"</string> <string name="wallet_title" msgid="5369767670735827105">"المحفظة"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"يمكنك إعداد طريقة دفع لإجراء عمليات شراء بسرعة وأمان أكبر باستخدام هاتفك."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"عرض الكل"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"فتح القفل للدفع"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"لم يتم الإعداد."</string> @@ -744,7 +745,7 @@ <string name="notification_automatic_title" msgid="3745465364578762652">"تلقائي"</string> <string name="notification_channel_summary_low" msgid="4860617986908931158">"بدون صوت أو اهتزاز"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"بدون صوت أو اهتزاز وتظهر في موضع أسفل في قسم المحادثات"</string> - <string name="notification_channel_summary_default" msgid="3282930979307248890">"يمكن إصدار رنين أو اهتزاز بناءً على إعدادات الهاتف"</string> + <string name="notification_channel_summary_default" msgid="3282930979307248890">"يمكن إصدار رنين أو اهتزاز بناءً على إعدادات الهاتف."</string> <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"يمكن إصدار رنين أو اهتزاز بناءً على إعدادات الهاتف. تظهر المحادثات من <xliff:g id="APP_NAME">%1$s</xliff:g> كفقاعات تلقائيًا."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"يلفِت هذا الإشعار انتباهك لهذا المحتوى باستخدام اختصار عائم."</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"السماح للنظام بتحديد ما إذا يجب اهتزاز الجهاز أو إصدار رنين عند تلقّي هذا الإشعار"</string> @@ -1108,7 +1109,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"إغلاق"</string> <string name="controls_media_resume" msgid="1933520684481586053">"استئناف التشغيل"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"الإعدادات"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"يتم تشغيل <xliff:g id="SONG_NAME">%1$s</xliff:g> للفنان <xliff:g id="ARTIST_NAME">%2$s</xliff:g> من تطبيق <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"تشغيل"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"فتح <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"تشغيل <xliff:g id="SONG_NAME">%1$s</xliff:g> للفنان <xliff:g id="ARTIST_NAME">%2$s</xliff:g> من تطبيق <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"تشغيل <xliff:g id="SONG_NAME">%1$s</xliff:g> من تطبيق <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"غير نشط، تحقّق من التطبيق."</string> <string name="controls_error_retryable" msgid="864025882878378470">"حدث خطأ، جارٍ إعادة المحاولة…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"لم يتم العثور عليه."</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 5f3e20f5c756..50d866d0ce54 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ইথাৰনেট"</string> <string name="status_bar_alarm" msgid="87160847643623352">"এলাৰ্ম"</string> <string name="wallet_title" msgid="5369767670735827105">"ৱালেট"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"আপোনাৰ ফ’নটোৰে দ্ৰুত তথা অধিক সুৰক্ষিত ক্ৰয় কৰিবলৈ ছেট আপ পাওক"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"আটাইবোৰ দেখুৱাওক"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"পৰিশোধ কৰিবলৈ আনলক কৰক"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ছেট আপ কৰা হোৱা নাই"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"অগ্ৰাহ্য কৰক"</string> <string name="controls_media_resume" msgid="1933520684481586053">"পুনৰ আৰম্ভ কৰক"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ছেটিংসমূহ"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ত <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ৰ <xliff:g id="SONG_NAME">%1$s</xliff:g> গীতটো প্লে’ হৈ আছে"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"প্লে’ কৰক"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> খোলক"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ত <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ৰ <xliff:g id="SONG_NAME">%1$s</xliff:g> গীতটো প্লে’ কৰক"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g>ত <xliff:g id="SONG_NAME">%1$s</xliff:g> গীতটো প্লে’ কৰক"</string> <string name="controls_error_timeout" msgid="794197289772728958">"সক্ৰিয় নহয়, এপ্টো পৰীক্ষা কৰক"</string> <string name="controls_error_retryable" msgid="864025882878378470">"আসোঁৱাহ, পুনৰ চেষ্টা কৰি আছে…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"বিচাৰি পোৱা নগ’ল"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 853e00fe1ad7..d1c613894b8c 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -61,7 +61,7 @@ <string name="usb_debugging_message" msgid="5794616114463921773">"Kompüterin RSA barmaq izi: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="4003121804294739548">"Bu kompüterdən həmişə icazə verilsin"</string> <string name="usb_debugging_allow" msgid="1722643858015321328">"İcazə verin"</string> - <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB debaq prosesinə icazə verilmir"</string> + <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB ilə sazlama qadağandır"</string> <string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Hazırda bu cihaza daxil olmuş istifadəçi USB sazlama prosesini aktiv edə bilməz. Bu funksiyadan istifadə etmək üçün əsas istifadəçi hesaba daxil olmalıdır."</string> <string name="wifi_debugging_title" msgid="7300007687492186076">"Bu şəbəkədə WiFi sazlamasına icazə verilsin?"</string> <string name="wifi_debugging_message" msgid="5461204211731802995">"Şəbəkə Adı (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWi‑Fi Ünvanı (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string> @@ -339,7 +339,7 @@ <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Qulaqlıq"</string> <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string> - <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Eşitmə Aparatı"</string> + <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Eşitmə cihazları"</string> <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiv edilir..."</string> <string name="quick_settings_brightness_label" msgid="680259653088849563">"Parlaqlıq"</string> <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avtodönüş"</string> @@ -660,12 +660,13 @@ <string name="quick_settings" msgid="6211774484997470203">"Sürətli Ayarlar"</string> <string name="status_bar" msgid="4357390266055077437">"Status paneli"</string> <string name="overview" msgid="3522318590458536816">"İcmal"</string> - <string name="demo_mode" msgid="263484519766901593">"Sistem İİ demo rejimi"</string> + <string name="demo_mode" msgid="263484519766901593">"Sistem interfeysi: demorejim"</string> <string name="enable_demo_mode" msgid="3180345364745966431">"Demo rejimini aktiv edin"</string> <string name="show_demo_mode" msgid="3677956462273059726">"Demo rejimini göstərin"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Zəngli saat"</string> <string name="wallet_title" msgid="5369767670735827105">"Pulqabı"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Telefonunuzla daha sürətli və təhlükəsiz satınalmalar etmək üçün ayarlayın"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Hamısını göstər"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ödəmək üçün kiliddən çıxarın"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Quraşdırılmayıb"</string> @@ -1030,7 +1031,7 @@ <string name="accessibility_control_move_right" msgid="8926821093629582888">"Sağa köçürün"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Böyütmə dəyişdiricisi"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Tam ekranı böyüdün"</string> - <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekranın bir hissəsini böyüdün"</string> + <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekran hissəsinin böyüdülməsi"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"Dəyişdirici"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"Əlçatımlılıq düyməsi əlçatımlılıq jestini əvəz etdi\n\n"<annotation id="link">"Ayarlara baxın"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Düyməni müvəqqəti gizlətmək üçün kənara çəkin"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"İmtina edin"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Davam edin"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> tərəfindən <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> tətbiqindən oxudulur"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Oxudun"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> tətbiqini açın"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> tərəfindən <xliff:g id="SONG_NAME">%1$s</xliff:g> mahnısını <xliff:g id="APP_LABEL">%3$s</xliff:g> tətbiqindən oxudun"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> mahnısını <xliff:g id="APP_LABEL">%2$s</xliff:g> tətbiqindən oxudun"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Aktiv deyil, tətbiqi yoxlayın"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Xəta, yenidən cəhd edilir…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Tapılmadı"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index ef524b841273..677bfb2d51a9 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Eternet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Novčanik"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Obavite konfigurisanje da biste mogli brže i sigurnije da kupujete pomoću telefona"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Prikaži sve"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Otključaj radi plaćanja"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nije podešeno"</string> @@ -1011,7 +1012,7 @@ <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">", "</string> <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" i "</string> <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"Koristi <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> - <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Nedavno koristio <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Nedavno koristio/la <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(posao)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"Telefonski poziv"</string> <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(preko: <xliff:g id="APPLICATION_NAME_S_">%s</xliff:g>)"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Odbaci"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Nastavi"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Podešavanja"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se pušta iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Pusti"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otvorite <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Pustite <xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Pustite <xliff:g id="SONG_NAME">%1$s</xliff:g> iz aplikacije <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno. Vidite aplikaciju"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Greška, pokušava se ponovo…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nije pronađeno"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index f1f238c1e8ee..6576a920e302 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будзільнік"</string> <string name="wallet_title" msgid="5369767670735827105">"Кашалёк"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Наладзьце картку, каб рабіць больш хуткія і бяспечныя куплі з дапамогай тэлефона"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Паказаць усе"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Разблакіраваць для аплаты"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Не наладжана"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Адхіліць"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Узнавіць"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Налады"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"У праграме \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\" прайграецца кампазіцыя \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", выканаўца – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Прайграць"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Адкрыйце праграму \"<xliff:g id="APP_LABEL">%1$s</xliff:g>\""</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Прайграйце кампазіцыю \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" (выканаўца – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) з дапамогай праграмы \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\""</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Прайграйце кампазіцыю \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" з дапамогай праграмы \"<xliff:g id="APP_LABEL">%2$s</xliff:g>\""</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактыўна, праверце праграму"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Памылка, паўторная спроба…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Не знойдзена"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 75bc1132fff0..75593a8c5d90 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будилник"</string> <string name="wallet_title" msgid="5369767670735827105">"Портфейл"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Купувайте по-бързо и по-сигурно с телефона си"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Показване на всички"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Отключване с цел плащане"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Не е настроено"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Отхвърляне"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Възобновяване"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> на <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се възпроизвежда от <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Google Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Отваряне на <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Пускане на <xliff:g id="SONG_NAME">%1$s</xliff:g> на <xliff:g id="ARTIST_NAME">%2$s</xliff:g> от <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Пускане на <xliff:g id="SONG_NAME">%1$s</xliff:g> от <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно, проверете прилож."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Грешка. Извършва се нов опит…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Не е намерено"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index b72381aa9469..802794177445 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ইথারনেট"</string> <string name="status_bar_alarm" msgid="87160847643623352">"অ্যালার্ম"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ফোন ব্যবহার করে আরও দ্রুত ও আরও নিরাপদে কেনাকাটা করার জন্য সেট-আপ করুন"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"সবকটি দেখুন"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"পেমেন্ট করতে ডিভাইস আনলক করুন"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"সেট আপ করা নেই"</string> @@ -1084,7 +1085,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"খারিজ করুন"</string> <string name="controls_media_resume" msgid="1933520684481586053">"আবার চালু করুন"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"সেটিংস"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"চালান"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"বন্ধ আছে, অ্যাপ চেক করুন"</string> <string name="controls_error_retryable" msgid="864025882878378470">"সমস্যা, আবার চেষ্টা করা হচ্ছে…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"খুঁজে পাওয়া যায়নি"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 659558969001..cfcceb69f1e2 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Novčanik"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Postavite aplikaciju za brže i sigurnije kupovine putem telefona"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Prikaži sve"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Otključaj za plaćanje"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nije postavljeno"</string> @@ -748,7 +749,7 @@ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Prikazuje se na vrhu obavještenja u razgovorima i kao slika profila na zaključanom ekranu, prekida funkciju Ne ometaj"</string> <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikazuje se na vrhu obavještenja u razgovorima i kao slika profila na zaključanom ekranu, izgleda kao oblačić, prekida funkciju Ne ometaj"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Postavke"</string> - <string name="notification_priority_title" msgid="2079708866333537093">"Prioritetni"</string> + <string name="notification_priority_title" msgid="2079708866333537093">"Prioritetno"</string> <string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava funkcije razgovora"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ta obavještenja se ne mogu izmijeniti."</string> <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ovu grupu obavještenja nije moguće konfigurirati ovdje"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Odbaci"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Nastavi"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Pjesma <xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se reproducira pomoću aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Pokrenite"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otvorite aplikaciju <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Reproducirajte pjesmu <xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> pomoću aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Reproducirajte pjesmu <xliff:g id="SONG_NAME">%1$s</xliff:g> pomoću aplikacije <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, vidite aplikaciju"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Greška, ponovni pokušaj…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nije pronađeno"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index ba3a3f4447a6..925a293b191b 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Configura una manera més ràpida i segura de fer compres amb el telèfon"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostra-ho tot"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloqueja per pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"No s\'ha configurat"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ignora"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reprèn"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuració"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) s\'està reproduint des de l\'aplicació <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reprodueix"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Obre <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Reprodueix <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) des de l\'aplicació <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Reprodueix <xliff:g id="SONG_NAME">%1$s</xliff:g> des de l\'aplicació <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactiu; comprova l\'aplicació"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error. S\'està tornant a provar…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"No s\'ha trobat"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 11dfe71522b0..b6bfe7883906 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -520,7 +520,7 @@ <string name="manage_notifications_text" msgid="6885645344647733116">"Spravovat"</string> <string name="manage_notifications_history_text" msgid="57055985396576230">"Historie"</string> <string name="notification_section_header_incoming" msgid="850925217908095197">"Nové"</string> - <string name="notification_section_header_gentle" msgid="6804099527336337197">"Ticho"</string> + <string name="notification_section_header_gentle" msgid="6804099527336337197">"Tiché"</string> <string name="notification_section_header_alerting" msgid="5581175033680477651">"Oznámení"</string> <string name="notification_section_header_conversations" msgid="821834744538345661">"Konverzace"</string> <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Vymazat všechna tichá oznámení"</string> @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Budík"</string> <string name="wallet_title" msgid="5369767670735827105">"Peněženka"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Nastavte si rychlejší a bezpečnější platby pomocí telefonu"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Zobrazit vše"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Odemknout a zaplatit"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Není nastaveno"</string> @@ -739,7 +740,7 @@ <string name="notification_channel_summary_low" msgid="4860617986908931158">"Žádný zvuk ani vibrace"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"Žádný zvuk ani vibrace a zobrazuje se níže v sekci konverzací"</string> <string name="notification_channel_summary_default" msgid="3282930979307248890">"Vyzvání nebo vibruje podle nastavení telefonu"</string> - <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Může vyzvánět nebo vibrovat v závislosti na nastavení telefonu. Konverzace z aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> ve výchozím nastavení bublají."</string> + <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Vyzvání nebo vibruje podle nastavení telefonu. Konverzace z aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> mají ve výchozím nastavení podobu bublin."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Přitahuje pozornost pomocí plovoucí zkratky k tomuto obsahu."</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"Nechat systém rozhodnout, zda má toto oznámení vydat zvuk či zavibrovat"</string> <string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"<b>Stav:</b> priorita zvýšena na Výchozí"</string> @@ -1015,8 +1016,8 @@ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8341216022442383954">"Aplikace využívají tato oprávnění: <xliff:g id="TYPES_LIST">%s</xliff:g>."</string> <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">", "</string> <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" a "</string> - <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"Používáno aplikací <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> - <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Nedávno použito aplikací <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"Právě používá aplikace <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Nedávno použila aplikace <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(práce)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"Telefonní hovor"</string> <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(prostřednictvím aplikace <xliff:g id="APPLICATION_NAME_S_">%s</xliff:g>)"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Zavřít"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Pokračovat"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavení"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> hrajte z aplikace <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Přehrát"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otevřít aplikaci <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Přehrát skladbu <xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> z aplikace <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Přehrát skladbu <xliff:g id="SONG_NAME">%1$s</xliff:g> z aplikace <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivní, zkontrolujte aplikaci"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Chyba. Nový pokus…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nenalezeno"</string> @@ -1142,7 +1147,7 @@ <string name="new_story_status_content_description" msgid="4963137422622516708">"<xliff:g id="NAME">%1$s</xliff:g> sdílí nový příběh"</string> <string name="video_status" msgid="4548544654316843225">"Sleduje"</string> <string name="audio_status" msgid="4237055636967709208">"Poslouchá"</string> - <string name="game_status" msgid="1340694320630973259">"Hraje"</string> + <string name="game_status" msgid="1340694320630973259">"Hraji hru"</string> <string name="empty_user_name" msgid="3389155775773578300">"Přátelé"</string> <string name="empty_status" msgid="5938893404951307749">"Pojďme chatovat."</string> <string name="status_before_loading" msgid="1500477307859631381">"Obsah se brzy zobrazí"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 4301f88d73dc..e5ca0ac01cd9 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Bliv klar til at foretage hurtigere og mere sikre køb med din telefon"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Vis alle"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Lås op for at betale"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ikke konfigureret"</string> @@ -1055,7 +1056,7 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjern fra favoritter"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"Flyt til position <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"Betjeningselementer"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Vælg, hvilke indstillinger du vil have adgang til i kvikmenuen"</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Vælg, hvilke styringselementer du vil have adgang til i kvikmenuen"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Flyt et felt ved at holde det nede og trække"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle styringselementerne blev fjernet"</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ændringerne blev ikke gemt"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Luk"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Genoptag"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Indstillinger"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> af <xliff:g id="ARTIST_NAME">%2$s</xliff:g> afspilles via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Afspil"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Åbn <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Afspil <xliff:g id="SONG_NAME">%1$s</xliff:g> af <xliff:g id="ARTIST_NAME">%2$s</xliff:g> via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Afspil <xliff:g id="SONG_NAME">%1$s</xliff:g> via <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv. Tjek appen"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Fejl. Prøver igen…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ikke fundet"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 8ebfebaf2765..806a33236f68 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Weckruf"</string> <string name="wallet_title" msgid="5369767670735827105">"Geldbörse"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Alle anzeigen"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Zum Bezahlen entsperren"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nicht eingerichtet"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ablehnen"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Fortsetzen"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Einstellungen"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> von <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wird gerade über <xliff:g id="APP_LABEL">%3$s</xliff:g> wiedergegeben"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Wiedergeben"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> öffnen"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g> von <xliff:g id="ARTIST_NAME">%2$s</xliff:g> über <xliff:g id="APP_LABEL">%3$s</xliff:g> wiedergeben"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> über <xliff:g id="APP_LABEL">%2$s</xliff:g> wiedergeben"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv – sieh in der App nach"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Fehler. Neuer Versuch…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nicht gefunden"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 3b23c35118a3..9525f99d5948 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -63,7 +63,7 @@ <string name="usb_debugging_allow" msgid="1722643858015321328">"Να επιτρέπεται"</string> <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Δεν επιτρέπεται ο εντοπισμός σφαλμάτων USB"</string> <string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή σε αυτήν τη συσκευή δεν μπορεί να ενεργοποιήσει τον εντοπισμό σφαλμάτων USB. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον κύριο χρήστη."</string> - <string name="wifi_debugging_title" msgid="7300007687492186076">"Να επιτρέπεται ο ασύρματος εντοπισμός σφαλμάτων σε αυτό το δίκτυο;"</string> + <string name="wifi_debugging_title" msgid="7300007687492186076">"Να επιτρέπεται ασύρματος εντοπ. σφαλ. στο δίκτυο;"</string> <string name="wifi_debugging_message" msgid="5461204211731802995">"Όνομα δικτύου (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nΔιεύθυνση Wi‑Fi (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string> <string name="wifi_debugging_always" msgid="2968383799517975155">"Να επιτρέπεται πάντα σε αυτό το δίκτυο"</string> <string name="wifi_debugging_allow" msgid="4573224609684957886">"Να επιτρέπεται"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ξυπνητήρι"</string> <string name="wallet_title" msgid="5369767670735827105">"Πορτοφόλι"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Ολοκληρώστε τη ρύθμιση για να κάνετε πιο γρήγορες και πιο ασφαλείς αγορές με το τηλέφωνό σας"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Εμφάνιση όλων"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ξεκλείδωμα για πληρωμή"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Δεν έχει ρυθμιστεί"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Παράβλεψη"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Συνέχιση"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ρυθμίσεις"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Γίνεται αναπαραγωγή του <xliff:g id="SONG_NAME">%1$s</xliff:g> από <xliff:g id="ARTIST_NAME">%2$s</xliff:g> στην εφαρμογή <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Άνοιγμα της εφαρμογής <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Αναπαραγωγή του <xliff:g id="SONG_NAME">%1$s</xliff:g> από <xliff:g id="ARTIST_NAME">%2$s</xliff:g> στην εφαρμογή <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Αναπαραγωγή του <xliff:g id="SONG_NAME">%1$s</xliff:g> στην εφαρμογή <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Ανενεργό, έλεγχος εφαρμογής"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Προέκυψε σφάλμα. Επανάληψη…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Δεν βρέθηκε."</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 8f5bf75bac6c..c69f5c0e3b2a 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Get set up to make faster, more secure purchases with your phone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Show all"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Unlock to pay"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Not set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Resume"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Open <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> from <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Not found"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index d47a4e93795e..2f96c42c6bf9 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Get set up to make faster, more secure purchases with your phone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Show all"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Unlock to pay"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Not set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Resume"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Open <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> from <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Not found"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 8f5bf75bac6c..c69f5c0e3b2a 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Get set up to make faster, more secure purchases with your phone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Show all"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Unlock to pay"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Not set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Resume"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Open <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> from <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Not found"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 8f5bf75bac6c..c69f5c0e3b2a 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Get set up to make faster, more secure purchases with your phone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Show all"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Unlock to pay"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Not set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Resume"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Open <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> from <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Not found"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 79400fe90082..a73c3878eaae 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Get set up to make faster, more secure purchases with your phone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Show all"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Unlock to pay"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Not set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Resume"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Open <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Play <xliff:g id="SONG_NAME">%1$s</xliff:g> from <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Not found"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 94b8d59fee61..051c0ddd687d 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Prepárate para realizar compras rápidas y seguras con tu teléfono"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostrar todo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloquear para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Sin configurar"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Descartar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reanudar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reproducir"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abre <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Reproduce <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Reproducir <xliff:g id="SONG_NAME">%1$s</xliff:g> en <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo. Verifica la app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Hubo un error. Reintentando…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"No se encontró"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 909dddac80ac..d04fd45b50dd 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Configura un método de pago para comprar de forma más rápida y segura con tu teléfono"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostrar todo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloquear para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Sin configurar"</string> @@ -1005,7 +1006,7 @@ <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8341216022442383954">"Hay aplicaciones que usan tu <xliff:g id="TYPES_LIST">%s</xliff:g>."</string> <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">", "</string> <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" y "</string> - <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"En uso en <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"Se está usando en <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Uso reciente en <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(trabajo)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"Llamada telefónica"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Cerrar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reanudar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ajustes"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reproducir"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abrir <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Poner <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Poner <xliff:g id="SONG_NAME">%1$s</xliff:g> en <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo, comprobar aplicación"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error; reintentando…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"No se ha encontrado"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 0ff64cb40cb2..00d98c256567 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Äratus"</string> <string name="wallet_title" msgid="5369767670735827105">"Rahakott"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Seadistage kiirem ja turvalisem viis telefoniga ostmiseks"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Kuva kõik"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Avage maksmiseks"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Pole seadistatud"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Loobu"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Jätka"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Seaded"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> esitajalt <xliff:g id="ARTIST_NAME">%2$s</xliff:g> esitatakse rakenduses <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Esitamine"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Rakenduse <xliff:g id="APP_LABEL">%1$s</xliff:g> avamine"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Esita lugu <xliff:g id="SONG_NAME">%1$s</xliff:g> esitajalt <xliff:g id="ARTIST_NAME">%2$s</xliff:g> rakenduses <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Esita lugu <xliff:g id="SONG_NAME">%1$s</xliff:g> rakenduses <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Passiivne, vaadake rakendust"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Viga, proovitakse uuesti …"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ei leitud"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index d48beba6ab08..87f3ccd3c2d6 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -63,9 +63,9 @@ <string name="usb_debugging_allow" msgid="1722643858015321328">"Eman baimena"</string> <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Ez da onartzen USB bidezko arazketa"</string> <string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Gailu honetan saioa hasita daukan erabiltzaileak ezin du aktibatu USB bidezko arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string> - <string name="wifi_debugging_title" msgid="7300007687492186076">"Hari gabeko arazketa onartu nahi duzu sare honetan?"</string> + <string name="wifi_debugging_title" msgid="7300007687492186076">"Hari gabeko arazketa sare honetan erabiltzeko baimena eman nahi duzu?"</string> <string name="wifi_debugging_message" msgid="5461204211731802995">"Sarearen izena (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nWifi-helbidea (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string> - <string name="wifi_debugging_always" msgid="2968383799517975155">"Baimendu beti sare honetan"</string> + <string name="wifi_debugging_always" msgid="2968383799517975155">"Eman baimena beti sare honetan"</string> <string name="wifi_debugging_allow" msgid="4573224609684957886">"Eman baimena"</string> <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"Ez da onartzen hari gabeko arazketa"</string> <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"Gailu honetan saioa hasita daukan erabiltzaileak ezin du aktibatu hari gabeko arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Konfiguratu erosketa bizkorrago eta seguruagoak egiteko telefonoarekin"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Erakutsi guztiak"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desblokeatu ordaintzeko"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Konfiguratu gabe"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Baztertu"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Berrekin"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ezarpenak"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) ari da erreproduzitzen <xliff:g id="APP_LABEL">%3$s</xliff:g> bidez"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Erreproduzitu"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Ireki <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Erreproduzitu <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) <xliff:g id="APP_LABEL">%3$s</xliff:g> bidez"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Erreproduzitu <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%2$s</xliff:g> bidez"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktibo; egiaztatu aplikazioa"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Errorea. Berriro saiatzen…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ez da aurkitu"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 476f6d2ffc6c..10e95f4be3bc 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -423,7 +423,7 @@ <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC غیرفعال است"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC فعال است"</string> - <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"ضبط کردن صفحهنمایش"</string> + <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"ضبط صفحهنمایش"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"شروع"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"توقف"</string> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"میکروفون دستگاه لغو انسداد شود؟"</string> @@ -604,7 +604,7 @@ <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"غیرفعال کردن"</string> <string name="accessibility_output_chooser" msgid="7807898688967194183">"تغییر دستگاه خروجی"</string> <string name="screen_pinning_title" msgid="9058007390337841305">"برنامه سنجاق شده است"</string> - <string name="screen_pinning_description" msgid="8699395373875667743">"تا زمانی که پین را بردارید، در نما نگهداشته میشود. برای برداشتن سنجاق، «برگشت» و «نمای کلی» را لمس کنید و نگهدارید."</string> + <string name="screen_pinning_description" msgid="8699395373875667743">"تا زمانی که سنجاق را برندارید، در نما نگهداشته میشود. برای برداشتن سنجاق، «برگشت» و «نمای کلی» را لمس کنید و نگهدارید."</string> <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"تا برداشتن سنجاق، در نما نگهداشته میشود. برای برداشتن سنجاق، «برگشت» و «صفحه اصلی» را لمس کنید و نگهدارید."</string> <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"به این ترتیب تا زمانی پین آن را برندارید قابلمشاهده است. برای برداشتن سنجاق، از پایین صفحه تند بهطرف بالا بکشید و نگه دارید."</string> <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"تا زمانی که پین را بردارید، در نما نگهداشته میشود. برای برداشتن سنجاق، «نمای کلی» را لمس کنید و نگهدارید."</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"اترنت"</string> <string name="status_bar_alarm" msgid="87160847643623352">"زنگ"</string> <string name="wallet_title" msgid="5369767670735827105">"کیفپول"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"برای خرید سریعتر و امنتر با تلفن، راهاندازی کنید"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"نمایش همه"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"باز کردن قفل برای پرداخت"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"تنظیمنشده"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"رد کردن"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ازسرگیری"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"تنظیمات"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> از <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ازطریق <xliff:g id="APP_LABEL">%3$s</xliff:g> پخش میشود"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"پخش"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"باز کردن <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g> از <xliff:g id="ARTIST_NAME">%2$s</xliff:g> را ازطریق <xliff:g id="APP_LABEL">%3$s</xliff:g> پخش کنید"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> را ازطریق <xliff:g id="APP_LABEL">%2$s</xliff:g> پخش کنید"</string> <string name="controls_error_timeout" msgid="794197289772728958">"غیرفعال، برنامه را بررسی کنید"</string> <string name="controls_error_retryable" msgid="864025882878378470">"خطا، درحال تلاش مجدد…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"پیدا نشد"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 805695b0c68e..51b73df555ec 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Herätys"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Lisää maksutapa, niin voit maksaa nopeasti ja turvallisesti puhelimella"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Näytä kaikki"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Avaa lukitus ja maksa"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ei otettu käyttöön"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ohita"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Jatka"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Asetukset"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> soittaa nyt tätä: <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Toista"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Avaa <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Soita <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) sovelluksessa <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Soita <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="APP_LABEL">%2$s</xliff:g>)"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Epäaktiivinen, tarkista sovellus"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Virhe, yritetään uudelleen…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ei löydy"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 6f8eea600440..58a52fff089f 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Tout afficher"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Déverrouiller pour payer"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Non configuré"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Fermer"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reprendre"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecteur à partir de <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Faire jouer"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Ouvrez <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Lecture de <xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> à partir de <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Lecture de <xliff:g id="SONG_NAME">%1$s</xliff:g> à partir de <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Délai expiré, vérifiez l\'appli"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erreur, nouvelle tentative…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Introuvable"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 5710c50fe1dc..04f7692c5720 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -107,10 +107,10 @@ <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micro"</string> <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Appareil et micro"</string> <string name="screenrecord_start" msgid="330991441575775004">"Démarrer"</string> - <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Enregistrement de l\'écran"</string> + <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Enregistrement de l\'écran…"</string> <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Enregistrement de l\'écran et de l\'audio…"</string> <string name="screenrecord_taps_label" msgid="1595690528298857649">"Afficher les points touchés sur l\'écran"</string> - <string name="screenrecord_stop_text" msgid="6549288689506057686">"Appuyez ici pour arrêter"</string> + <string name="screenrecord_stop_text" msgid="6549288689506057686">"Appuyez pour arrêter"</string> <string name="screenrecord_stop_label" msgid="72699670052087989">"Arrêter"</string> <string name="screenrecord_pause_label" msgid="6004054907104549857">"Pause"</string> <string name="screenrecord_resume_label" msgid="4972223043729555575">"Reprendre"</string> @@ -408,7 +408,7 @@ <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"<xliff:g id="DATA_USED">%s</xliff:g> utilisés"</string> <string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"<xliff:g id="DATA_LIMIT">%s</xliff:g> au maximum"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> - <string name="quick_settings_work_mode_label" msgid="6440531507319809121">"Applis professionnelles"</string> + <string name="quick_settings_work_mode_label" msgid="6440531507319809121">"Applis pro"</string> <string name="quick_settings_night_display_label" msgid="8180030659141778180">"Éclairage nocturne"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"Activé la nuit"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"Jusqu\'à l\'aube"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Configurez pour régler vos achats de façon sûre et rapide via votre téléphone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Tout afficher"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Déverrouiller pour payer"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Non configuré"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Fermer"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reprendre"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecture depuis <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Lire"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Ouvre <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Mets <xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> depuis <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Mets <xliff:g id="SONG_NAME">%1$s</xliff:g> depuis <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Délai expiré, vérifier l\'appli"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erreur. Nouvelle tentative…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Introuvable"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 6230687b273e..7e2e59163749 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Amosar todo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloquear para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Sen configurar"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ignorar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Retomar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Estase reproducindo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reproducir"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abre <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Reproduce <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Reproduce <xliff:g id="SONG_NAME">%1$s</xliff:g> en <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo. Comproba a app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando de novo…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Non se atopou"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index adc01b8c4eb9..d7d5290d55b2 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ઇથરનેટ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"અલાર્મ"</string> <string name="wallet_title" msgid="5369767670735827105">"વૉલેટ"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"બધું બતાવો"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ચુકવણી કરવા માટે અનલૉક કરો"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"કોઈ સેટઅપ કર્યું નથી"</string> @@ -1084,7 +1086,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"છોડી દો"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ફરી શરૂ કરો"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"સેટિંગ"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ચલાવો"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"નિષ્ક્રિય, ઍપને ચેક કરો"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ભૂલ, ફરી પ્રયાસ કરી રહ્યા છીએ…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"મળ્યું નથી"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index d73be920fbec..3f9a53e2399b 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -342,7 +342,7 @@ <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"कान की मशीन"</string> <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ब्लूटूथ चालू हो रहा है…"</string> <string name="quick_settings_brightness_label" msgid="680259653088849563">"स्क्रीन की रोशनी"</string> - <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"अपने-आप घूमना"</string> + <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"स्क्रीन का अपने-आप दिशा बदलना"</string> <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रीन का अपने-आप दिशा बदलना (ऑटो-रोटेट)"</string> <string name="accessibility_quick_settings_rotation_value" msgid="2916484894750819251">"<xliff:g id="ID_1">%s</xliff:g> मोड"</string> <string name="quick_settings_rotation_locked_label" msgid="4420863550666310319">"घुमाना लॉक किया गया"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ईथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> <string name="wallet_title" msgid="5369767670735827105">"वॉलेट"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"फ़ोन पर तेज़ी से और सुरक्षित तरीके से खरीदारी करने के लिए सेट अप करें"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"सभी दिखाएं"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"पैसे चुकाने के लिए, डिवाइस अनलॉक करें"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"सेट अप नहीं किया गया है"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"खारिज करें"</string> <string name="controls_media_resume" msgid="1933520684481586053">"फिर से शुरू करें"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> पर, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> का <xliff:g id="SONG_NAME">%1$s</xliff:g> चल रहा है"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"चलाएं"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> खोलें"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g> पर, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> का <xliff:g id="SONG_NAME">%1$s</xliff:g> चलाएं"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g> पर, <xliff:g id="SONG_NAME">%1$s</xliff:g> चलाएं"</string> <string name="controls_error_timeout" msgid="794197289772728958">"काम नहीं कर रहा, ऐप जांचें"</string> <string name="controls_error_retryable" msgid="864025882878378470">"कोई गड़बड़ी हुई, फिर से कोशिश की जा रही है…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"कंट्रोल नहीं है"</string> @@ -1110,7 +1115,7 @@ <string name="select_conversation_title" msgid="6716364118095089519">"बातचीत विजेट"</string> <string name="select_conversation_text" msgid="3376048251434956013">"किसी बातचीत को होम स्क्रीन पर जोड़ने के लिए, उस बातचीत पर टैप करें"</string> <string name="no_conversations_text" msgid="7362374212649891057">"नए मैसेज आने पर यहां देखें"</string> - <string name="priority_conversations" msgid="3967482288896653039">"अहम बातचीत"</string> + <string name="priority_conversations" msgid="3967482288896653039">"प्राथमिकता वाली बातचीत"</string> <string name="recent_conversations" msgid="8531874684782574622">"हाल ही में की गई बातचीत"</string> <string name="okay" msgid="6490552955618608554">"ठीक है"</string> <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> दिन पहले"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index fd1592d13d18..14250a774349 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -63,7 +63,7 @@ <string name="usb_debugging_allow" msgid="1722643858015321328">"Dopusti"</string> <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Otklanjanje pogrešaka putem USB-a nije dopušteno"</string> <string name="usb_debugging_secondary_user_message" msgid="3740347841470403244">"Korisnik koji je trenutačno prijavljen na ovaj uređaj ne može uključiti otklanjanje pogrešaka putem USB-a. Da biste upotrebljavali tu značajku, prijeđite na primarnog korisnika."</string> - <string name="wifi_debugging_title" msgid="7300007687492186076">"Želite li dopustiti bežično otklanjanje pogrešaka na ovoj mreži?"</string> + <string name="wifi_debugging_title" msgid="7300007687492186076">"Dopustiti bežično otklanjanje pogrešaka na ovoj mreži?"</string> <string name="wifi_debugging_message" msgid="5461204211731802995">"Naziv mreže (SSID)\n<xliff:g id="SSID_0">%1$s</xliff:g>\n\nAdresa Wi‑Fija (BSSID)\n<xliff:g id="BSSID_1">%2$s</xliff:g>"</string> <string name="wifi_debugging_always" msgid="2968383799517975155">"Uvijek dopusti na ovoj mreži"</string> <string name="wifi_debugging_allow" msgid="4573224609684957886">"Dopusti"</string> @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Novčanik"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Postavite aplikaciju za bržu i sigurniju kupnju telefonom"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Prikaži sve"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Otključajte da biste platili"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nije postavljeno"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Odbaci"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Nastavi"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> reproducira se putem aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reprodukcija"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otvori <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Pustite <xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> putem aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Pustite <xliff:g id="SONG_NAME">%1$s</xliff:g> putem aplikacije <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, provjerite aplik."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Pogreška, pokušavamo ponovo…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nije pronađeno"</string> @@ -1109,7 +1114,7 @@ <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Odabrano uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="media_output_dialog_disconnected" msgid="1834473104836986046">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (nije povezano)"</string> <string name="media_output_dialog_connect_failed" msgid="3225190634236259010">"Povezivanje nije bilo moguće. Pokušajte ponovo."</string> - <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Upari novi uređaj"</string> + <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uparite novi uređaj"</string> <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> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 0fe63af5fa2a..42c522771b7f 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ébresztés"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Összes mutatása"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Feloldás a fizetéshez"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nincs beállítva"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Elvetés"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Folytatás"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Beállítások"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> <xliff:g id="SONG_NAME">%1$s</xliff:g> című száma hallható itt: <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Játék"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> megnyitása"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> <xliff:g id="SONG_NAME">%1$s</xliff:g> című számának lejátszása innen: <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> lejátszása innen: <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktív, ellenőrizze az appot"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Hiba, újrapróbálkozás…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nem található"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 1b48c098360c..e5ffbd3f0689 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -536,7 +536,7 @@ <string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Այս սարքը պատկանում է «<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>» կազմակերպությանը և միացված է վիրտուալ մասնավոր ցանցերի"</string> <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ձեր կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string> <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string> - <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Աշխատանքային պրոֆիլով կատարված գործողությունները տեսանելի են ձեր ՏՏ ադմինիստրատորին"</string> + <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Աշխատանքային պրոֆիլով կատարված գործողությունները տեսանելի են ՏՏ ադմինիստրատորին"</string> <string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Ցանցը կարող է վերահսկվել"</string> <string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Այս սարքը միացված է վիրտուալ մասնավոր ցանցերի"</string> <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ձեր աշխատանքային պրոֆիլը միացված է <xliff:g id="VPN_APP">%1$s</xliff:g> ցանցին"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Զարթուցիչ"</string> <string name="wallet_title" msgid="5369767670735827105">"Դրամապանակ"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Վճարեք հեռախոսով՝ ավելի արագ և ապահով"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Ցույց տալ բոլորը"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ապակողպել՝ վճարելու համար"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Կարգավորված չէ"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Փակել"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Շարունակել"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Կարգավորումներ"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Այժմ նվագարկվում է <xliff:g id="SONG_NAME">%1$s</xliff:g> երգը <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-ի կատարմամբ <xliff:g id="APP_LABEL">%3$s</xliff:g> հավելվածից"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Նվագարկել"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Բացեք <xliff:g id="APP_LABEL">%1$s</xliff:g> հավելվածը"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Նվագարկել <xliff:g id="SONG_NAME">%1$s</xliff:g> երգը <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-ի կատարմամբ <xliff:g id="APP_LABEL">%3$s</xliff:g> հավելվածից"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Նվագարկել <xliff:g id="SONG_NAME">%1$s</xliff:g> երգը <xliff:g id="APP_LABEL">%2$s</xliff:g> հավելվածից"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Ակտիվ չէ, ստուգեք հավելվածը"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Սխալ. նորից ենք փորձում…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Չի գտնվել"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 1bae009986f7..7e4ba76c340c 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Siapkan metode pembayaran untuk melakukan pembelian dengan lebih cepat dan aman menggunakan ponsel Anda"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Tampilkan semua"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Buka kunci untuk membayar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Belum disiapkan"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Tutup"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Lanjutkan"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Setelan"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sedang diputar dari <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Putar"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Buka <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Putar <xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> dari <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Putar <xliff:g id="SONG_NAME">%1$s</xliff:g> dari <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nonaktif, periksa aplikasi"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Error, mencoba lagi..."</string> <string name="controls_error_removed" msgid="6675638069846014366">"Tidak ditemukan"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 719c16dd8d14..229bcbb344bd 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Vekjari"</string> <string name="wallet_title" msgid="5369767670735827105">"Veski"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Stilltu hlutina þannig að þú getir verslað með símanum á hraðari og öruggari hátt"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Sýna allt"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Taka úr lás til að greiða"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ekki uppsett"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Hunsa"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Halda áfram"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Stillingar"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> með <xliff:g id="ARTIST_NAME">%2$s</xliff:g> er í spilun á <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Spila"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Opna <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Spila <xliff:g id="SONG_NAME">%1$s</xliff:g> með <xliff:g id="ARTIST_NAME">%2$s</xliff:g> í <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Spila <xliff:g id="SONG_NAME">%1$s</xliff:g> í <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Óvirkt, athugaðu forrit"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Villa, reynir aftur…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Fannst ekki"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index c838ca08a6f5..d5dbf4f9b622 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Sveglia"</string> <string name="wallet_title" msgid="5369767670735827105">"Portafoglio"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Imposta un metodo di pagamento per effettuare acquisti in modo più rapido e sicuro con il telefono"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Espandi"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Sblocca per pagare"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nessuna configurazione"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ignora"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Riprendi"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Impostazioni"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> di <xliff:g id="ARTIST_NAME">%2$s</xliff:g> è in riproduzione da <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Riproduci"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Apri <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Riproduci <xliff:g id="SONG_NAME">%1$s</xliff:g> di <xliff:g id="ARTIST_NAME">%2$s</xliff:g> da <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Riproduci <xliff:g id="SONG_NAME">%1$s</xliff:g> da <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inattivo, controlla l\'app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Errore. Nuovo tentativo…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Controllo non trovato"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index a7cdfc1b1d73..aae58cbbce87 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"אתרנט"</string> <string name="status_bar_alarm" msgid="87160847643623352">"התראה"</string> <string name="wallet_title" msgid="5369767670735827105">"ארנק"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"מגדירים אמצעי תשלום ונהנים מביצוע מהיר ומאובטח יותר של רכישות באמצעות הטלפון"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"הצגת הכול"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"לביטול הנעילה ולתשלום"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"לא מוגדר"</string> @@ -747,11 +748,11 @@ <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>הסטטוס:</b> דורג גבוה יותר"</string> <string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>הסטטוס:</b> דורג נמוך יותר"</string> <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"מוצגת בחלק העליון של קטע ההתראות וכתמונת פרופיל במסך הנעילה"</string> - <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"מוצגת בחלק העליון של קטע התראות השיחה וכתמונת פרופיל במסך הנעילה, מופיעה בבועה הצפה"</string> + <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"מוצגת בחלק העליון של קטע התראות השיחה וכתמונת פרופיל במסך הנעילה, מופיעה בבועה"</string> <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"מוצגת בחלק העליון של קטע התראות השיחה וכתמונת פרופיל במסך הנעילה, מפריעה במצב \'נא לא להפריע\'"</string> <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"מוצגת בחלק העליון של קטע התראות השיחה וכתמונת פרופיל במסך הנעילה, מופיעה בבועה הצפה ומפריעה במצב \'נא לא להפריע\'"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"הגדרות"</string> - <string name="notification_priority_title" msgid="2079708866333537093">"עדיפות"</string> + <string name="notification_priority_title" msgid="2079708866333537093">"בעדיפות גבוהה"</string> <string name="no_shortcut" msgid="8257177117568230126">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> לא תומכת בתכונות השיחה"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"לא ניתן לשנות את ההתראות האלה."</string> <string name="notification_multichannel_desc" msgid="7414593090056236179">"לא ניתן להגדיר כאן את קבוצת ההתראות הזו"</string> @@ -899,8 +900,8 @@ <string name="right_keycode" msgid="2480715509844798438">"קוד מפתח ימני"</string> <string name="left_icon" msgid="5036278531966897006">"סמל שמאלי"</string> <string name="right_icon" msgid="1103955040645237425">"סמל ימני"</string> - <string name="drag_to_add_tiles" msgid="8933270127508303672">"יש ללחוץ ולגרור כדי להוסיף אריחים"</string> - <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"יש ללחוץ ולגרור כדי לסדר מחדש את האריחים"</string> + <string name="drag_to_add_tiles" msgid="8933270127508303672">"יש ללחוץ ולגרור כדי להוסיף כרטיסי מידע"</string> + <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"יש ללחוץ ולגרור כדי לסדר מחדש את כרטיסי המידע"</string> <string name="drag_to_remove_tiles" msgid="4682194717573850385">"אפשר לגרור לכאן כדי להסיר"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"יש צורך ב-<xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> אריחים לפחות"</string> <string name="qs_edit" msgid="5583565172803472437">"עריכה"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"סגירה"</string> <string name="controls_media_resume" msgid="1933520684481586053">"המשך"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"הגדרות"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> של <xliff:g id="ARTIST_NAME">%2$s</xliff:g> מופעל מ-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"הפעלה"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"פתיחה של <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"הפעלת <xliff:g id="SONG_NAME">%1$s</xliff:g> של <xliff:g id="ARTIST_NAME">%2$s</xliff:g> מ-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"הפעלת <xliff:g id="SONG_NAME">%1$s</xliff:g> מ-<xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"לא פעיל, יש לבדוק את האפליקציה"</string> <string name="controls_error_retryable" msgid="864025882878378470">"שגיאה, מתבצע ניסיון חוזר…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"לא נמצא"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index ad553988eb42..acfaef68350d 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"イーサネット"</string> <string name="status_bar_alarm" msgid="87160847643623352">"アラーム"</string> <string name="wallet_title" msgid="5369767670735827105">"ウォレット"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"スマートフォンを使ってよりすばやく安全に購入できるように設定しましょう"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"すべて表示"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ロックを解除して支払う"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"未設定"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"閉じる"</string> <string name="controls_media_resume" msgid="1933520684481586053">"再開"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>(アーティスト名: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>)が <xliff:g id="APP_LABEL">%3$s</xliff:g> で再生中"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"再生"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> を開く"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g>(アーティスト名: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>)を <xliff:g id="APP_LABEL">%3$s</xliff:g> で再生"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> を <xliff:g id="APP_LABEL">%2$s</xliff:g> で再生"</string> <string name="controls_error_timeout" msgid="794197289772728958">"無効: アプリをご確認ください"</string> <string name="controls_error_retryable" msgid="864025882878378470">"エラー。再試行しています…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"見つかりませんでした"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index fae5977ddf29..1f071a209377 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ეთერნეტი"</string> <string name="status_bar_alarm" msgid="87160847643623352">"მაღვიძარა"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"დააყენეთ შესყიდვების თქვენი ტელეფონით უფრო სწრაფად და უსაფრთხოდ შესასრულებლად"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"ყველას ჩვენება"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"გადასახდელად განბლოკვა"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"არ არის დაყენებული"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"დახურვა"</string> <string name="controls_media_resume" msgid="1933520684481586053">"გაგრძელება"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"პარამეტრები"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, უკრავს <xliff:g id="APP_LABEL">%3$s</xliff:g>-დან"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"დაკვრა"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"გახსენით <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"დაუკარით <xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, <xliff:g id="APP_LABEL">%3$s</xliff:g>-დან"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"დაუკარით <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%2$s</xliff:g>-დან"</string> <string name="controls_error_timeout" msgid="794197289772728958">"არააქტიურია, გადაამოწმეთ აპი"</string> <string name="controls_error_retryable" msgid="864025882878378470">"შეცდომა, ხელახალი მცდელობა…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ვერ მოიძებნა"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index bbd4ff23c7d7..935bcacef383 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Дабыл"</string> <string name="wallet_title" msgid="5369767670735827105">"Әмиян"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Телефоныңызбен бұрынғыдан да жылдам әрі қауіпсіз сатып алу үшін параметрлерді орнатыңыз."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Барлығын көрсету"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Төлеу үшін құлыпты ашу"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Реттелмеген"</string> @@ -741,9 +742,9 @@ <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>Күйі:</b> маңыздылық деңгейі көтерілген"</string> <string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Күйі:</b> маңыздылық деңгейі төмендетілген"</string> <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті ретінде көрсетіледі."</string> - <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті ретінде көрсетіледі, қалқымалы анықтама ретінде шығады."</string> + <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті болып көрсетіледі, қалқыма хабар түрінде шығады."</string> <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті ретінде көрсетіледі, \"Мазаламау\" режимін тоқтатады."</string> - <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті ретінде көрсетіледі, қалқымалы анықтама ретінде шығады, \"Мазаламау\" режимін тоқтатады."</string> + <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті болып көрсетіледі, қалқыма хабар түрінде шығады, Мазаламау режимін тоқтатады."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Параметрлер"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Маңызды"</string> <string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> әңгіме функцияларын қолдамайды."</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Жабу"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Жалғастыру"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Параметрлер"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> қолданбасында <xliff:g id="ARTIST_NAME">%2$s</xliff:g> орындайтын \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" әні ойнатылуда."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Ойнату"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> қолданбасын ашу"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g> қолданбасында <xliff:g id="ARTIST_NAME">%2$s</xliff:g> орындайтын \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" әнін ойнату"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g> қолданбасында \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" әнін ойнату"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Өшірулі. Қолданба тексеріңіз."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Қате, әрекет қайталануда…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Табылмады"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 8aeab28abf3e..4d8d4063f196 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"អ៊ីសឺរណិត"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ម៉ោងរោទ៍"</string> <string name="wallet_title" msgid="5369767670735827105">"កាបូប"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ធ្វើការរៀបចំ ដើម្បីធ្វើការទិញកាន់តែលឿនជាងមុន សុវត្ថិភាពជាងមុន ដោយប្រើទូរសព្ទរបស់អ្នក"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"បង្ហាញទាំងអស់"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ដោះសោដើម្បីបង់ប្រាក់"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"មិនបានរៀបចំទេ"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ច្រានចោល"</string> <string name="controls_media_resume" msgid="1933520684481586053">"បន្ត"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ការកំណត់"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ច្រៀងដោយ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> កំពុងចាក់ពី <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ចាក់"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"បើក <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"ចាក់ <xliff:g id="SONG_NAME">%1$s</xliff:g> ច្រៀងដោយ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ពី <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"ចាក់ <xliff:g id="SONG_NAME">%1$s</xliff:g> ពី <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"អសកម្ម ពិនិត្យមើលកម្មវិធី"</string> <string name="controls_error_retryable" msgid="864025882878378470">"បញ្ហា កំពុងព្យាយាមម្ដងទៀត…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"រកមិនឃើញទេ"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 5ab4fe7e5d0e..a47271af0ea4 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ಇಥರ್ನೆಟ್"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ಅಲಾರಮ್"</string> <string name="wallet_title" msgid="5369767670735827105">"ವಾಲೆಟ್"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ವೇಗವಾದ, ಹೆಚ್ಚು ಸುರಕ್ಷಿತ ಖರೀದಿಗಳನ್ನು ಮಾಡಲು ಸೆಟಪ್ ಮಾಡಿಕೊಳ್ಳಿ"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"ಎಲ್ಲವನ್ನೂ ತೋರಿಸಿ"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ಪಾವತಿಸಲು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ಇನ್ನೂ ಸೆಟಪ್ ಮಾಡಿಲ್ಲ"</string> @@ -1084,7 +1085,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ವಜಾಗೊಳಿಸಿ"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ಪುನರಾರಂಭಿಸಿ"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ಪ್ಲೇ ಮಾಡಿ"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"ನಿಷ್ಕ್ರಿಯ, ಆ್ಯಪ್ ಪರಿಶೀಲಿಸಿ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ದೋಷ, ಮರುಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ಕಂಡುಬಂದಿಲ್ಲ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 908eaf5cf4a8..819250c47cc0 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -412,7 +412,7 @@ <string name="quick_settings_night_display_label" msgid="8180030659141778180">"야간 조명"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"일몰에"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"일출까지"</string> - <string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g>에"</string> + <string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g>에 켜짐"</string> <string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"<xliff:g id="TIME">%s</xliff:g>에 꺼짐"</string> <string name="quick_settings_ui_mode_night_label" msgid="1398928270610780470">"어두운 테마"</string> <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"절전 모드"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"이더넷"</string> <string name="status_bar_alarm" msgid="87160847643623352">"알람"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"설정하여 휴대전화로 더욱 빠르고 안전하게 구매하세요."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"모두 표시"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"잠금 해제하여 결제"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"설정되지 않음"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"닫기"</string> <string name="controls_media_resume" msgid="1933520684481586053">"다시 시작"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"설정"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>에서 <xliff:g id="ARTIST_NAME">%2$s</xliff:g>의 <xliff:g id="SONG_NAME">%1$s</xliff:g> 재생 중"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"재생"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> 열기"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g>에서 <xliff:g id="ARTIST_NAME">%2$s</xliff:g>의 <xliff:g id="SONG_NAME">%1$s</xliff:g> 재생"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g>에서 <xliff:g id="SONG_NAME">%1$s</xliff:g> 재생"</string> <string name="controls_error_timeout" msgid="794197289772728958">"비활성. 앱을 확인하세요."</string> <string name="controls_error_retryable" msgid="864025882878378470">"오류 발생, 다시 시도 중…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"찾을 수 없음"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index ab53dd3c1337..b5bbf2163352 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -102,10 +102,10 @@ <string name="screenrecord_start_label" msgid="1750350278888217473">"Жаздырып баштайсызбы?"</string> <string name="screenrecord_description" msgid="1123231719680353736">"Жаздыруу учурунда Android системасы экраныңызда көрүнүп турган жана түзмөктө ойноп жаткан бардык купуя маалыматты жаздырып алат. Буга сырсөздөр, төлөм маалыматы, сүрөттөр, билдирүүлөр жана аудио файлдар кирет."</string> <string name="screenrecord_audio_label" msgid="6183558856175159629">"Аудио жаздыруу"</string> - <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Түзмөктүн аудиосу"</string> + <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Түзмөктөгү аудиолор"</string> <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Музыка, чалуулар жана шыңгырлар сыяктуу түзмөгүңүздөгү добуштар"</string> <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string> - <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Түзмөктүн аудиосу жана микрофон"</string> + <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Түзмөктөгү аудиолор жана микрофон"</string> <string name="screenrecord_start" msgid="330991441575775004">"Баштадык"</string> <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Экран жаздырылууда"</string> <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Экран жана аудио жаздырылууда"</string> @@ -131,7 +131,7 @@ <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string> <string name="accessibility_accessibility_button" msgid="4089042473497107709">"Атайын мүмкүнчүлүктөр"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"Экранды буруу"</string> - <string name="accessibility_recent" msgid="901641734769533575">"Көз жүгүртүү"</string> + <string name="accessibility_recent" msgid="901641734769533575">"Назар"</string> <string name="accessibility_search_light" msgid="524741790416076988">"Издөө"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"Камера"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"Телефон"</string> @@ -248,7 +248,7 @@ <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Тез тууралоолор."</string> <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Кулпуланган экран."</string> <string name="accessibility_desc_settings" msgid="6728577365389151969">"Жөндөөлөр"</string> - <string name="accessibility_desc_recent_apps" msgid="1748675199348914194">"Көз жүгүртүү."</string> + <string name="accessibility_desc_recent_apps" msgid="1748675199348914194">"Назар"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Жумуштун кулпуланган экраны"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Жабуу"</string> <string name="accessibility_quick_settings_wifi" msgid="167707325133803052">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string> @@ -435,7 +435,7 @@ <string name="media_seamless_remote_device" msgid="177033467332920464">"Түзмөк"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Башка колдонмого которулуу үчүн өйдө сүрүңүз"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Колдонмолорду тез которуштуруу үчүн, оңго сүйрөңүз"</string> - <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Сереп салууну өчүрүү/күйгүзүү"</string> + <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Назар режимин өчүрүү/күйгүзүү"</string> <string name="expanded_header_battery_charged" msgid="5307907517976548448">"Кубатталды"</string> <string name="expanded_header_battery_charging" msgid="1717522253171025549">"Кубатталууда"</string> <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"<xliff:g id="CHARGING_TIME">%s</xliff:g> толгонго чейин"</string> @@ -604,10 +604,10 @@ <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"өчүрүү"</string> <string name="accessibility_output_chooser" msgid="7807898688967194183">"Аудио түзмөктү которуштуруу"</string> <string name="screen_pinning_title" msgid="9058007390337841305">"Колдонмо кадалды"</string> - <string name="screen_pinning_description" msgid="8699395373875667743">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Артка\" жана \"Карап чыгуу\" баскычтарын басып, кармап туруңуз."</string> + <string name="screen_pinning_description" msgid="8699395373875667743">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн \"Артка\" жана \"Назар\" баскычтарын басып, кармап туруңуз."</string> <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Артка\" жана \"Башкы бет\" баскычтарын басып, кармап туруңуз."</string> <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн өйдө сүрүп, коё бербей басып туруңуз."</string> - <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Карап чыгуу\" баскычын басып, кармап туруңуз."</string> + <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн \"Назар\" баскычын басып, кармап туруңуз."</string> <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Башкы бет\" баскычын басып, кармап туруңуз."</string> <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"Жеке маалыматтар көрүнүп калышы мүмкүн (байланыштар жана электрондук каттардын мазмуну сыяктуу)."</string> <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"Кадалган колдонмо башка колдонмолорду ача алат."</string> @@ -659,13 +659,14 @@ <string name="show_battery_percentage_summary" msgid="9053024758304102915">"Түзмөк кубатталбай турганда, батареянын деңгээли статус тилкесинде көрүнүп турат"</string> <string name="quick_settings" msgid="6211774484997470203">"Ыкчам жөндөөлөр"</string> <string name="status_bar" msgid="4357390266055077437">"Абал тилкеси"</string> - <string name="overview" msgid="3522318590458536816">"Көз жүгүртүү"</string> + <string name="overview" msgid="3522318590458536816">"Назар"</string> <string name="demo_mode" msgid="263484519766901593">"Тутум интерфейсинин демо режими"</string> <string name="enable_demo_mode" msgid="3180345364745966431">"Демо режимин иштетүү"</string> <string name="show_demo_mode" msgid="3677956462273059726">"Демо режимин көрсөтүү"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ойготкуч"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Телефонуңуз менен тез жана коопсуз сатып алуу үчүн жөндөңүз"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Баарын көрсөтүү"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Төлөө үчүн кулпусун ачыңыз"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Жөндөлгөн эмес"</string> @@ -740,7 +741,7 @@ <string name="notification_channel_summary_automatic_silenced" msgid="7403004439649872047">"<b>Абалы:</b> Үнсүз абалга төмөндөдү"</string> <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>Абалы:</b> Жогорулады"</string> <string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Абалы:</b> Төмөндөдү"</string> - <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Сүйлөшүүлөр тууралуу билдирмелердин жогору жагында жана кулпуланган экранда профилдин сүрөтү катары көрсөтүлөт"</string> + <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Сүйлөшүүлөр тууралуу билдирмелердин жогору жагында, ошондой эле кулпуланган экранда профилдин сүрөтү түрүндө көрүнөт"</string> <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Cүйлөшүүлөр тууралуу билдирмелердин жогору жагында жана кулпуланган экранда профилдин сүрөтү, ошондой эле калкып чыкма билдирме катары көрсөтүлөт"</string> <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Cүйлөшүүлөр тууралуу билдирмелердин жогору жагында жана кулпуланган экранда профилдин сүрөтү катары көрсөтүлүп, \"Тынчымды алба\" режимин үзгүлтүккө учуратат"</string> <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Cүйлөшүүлөр тууралуу билдирмелердин жогору жагында жана кулпуланган экранда профилдин сүрөтү, ошондой эле калкып чыкма билдирме катары көрсөтүлүп, \"Тынчымды алба\" режимин үзгүлтүккө учуратат"</string> @@ -768,8 +769,8 @@ <string name="feedback_prompt" msgid="3656728972307896379">"Иштеп чыгуучуга пикириңизди билдириңиз. Бул туурабы?"</string> <string name="feedback_response" msgid="4671729244976641339">"Пикириңиз үчүн рахмат!"</string> <string name="feedback_ok" msgid="6481426753298857144">"Жарайт"</string> - <string name="notification_channel_controls_opened_accessibility" msgid="6111817750774381094">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени көзөмөлдөө функциялары ачылды"</string> - <string name="notification_channel_controls_closed_accessibility" msgid="1561909368876911701">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени көзөмөлдөө функциялары жабылды"</string> + <string name="notification_channel_controls_opened_accessibility" msgid="6111817750774381094">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени башкаруу элементтери ачылды"</string> + <string name="notification_channel_controls_closed_accessibility" msgid="1561909368876911701">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн эскертмени башкаруу элементтери жабылды"</string> <string name="notification_channel_switch_accessibility" msgid="8979885820432540252">"Бул каналдан келген эскертмелерге уруксат берүү"</string> <string name="notification_more_settings" msgid="4936228656989201793">"Дагы жөндөөлөр"</string> <string name="notification_app_settings" msgid="8963648463858039377">"Ыңгайлаштыруу"</string> @@ -1041,11 +1042,11 @@ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Ичине жылдырып, көрсөтүңүз"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Сыртка жылдырып, көрсөтүңүз"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"өчүрүү/күйгүзүү"</string> - <string name="quick_controls_title" msgid="7095074621086860062">"Үйдү көзөмөлдөө каражаттары"</string> + <string name="quick_controls_title" msgid="7095074621086860062">"Үйдү башкаруу элементтери"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Башкаруу элементтери кошула турган колдонмону тандоо"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> - <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> көзөмөл кошулду.</item> - <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> көзөмөл кошулду.</item> + <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> башкаруу элементи кошулду.</item> + <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> башкаруу элементи кошулду.</item> </plurals> <string name="controls_removed" msgid="3731789252222856959">"Өчүрүлдү"</string> <string name="accessibility_control_favorite" msgid="8694362691985545985">"Сүйүктүүлөргө кошулду"</string> @@ -1055,13 +1056,13 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"сүйүктүүлөрдөн чыгаруу"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-позицияга жылдыруу"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"Башкаруу элементтери"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Ыкчам жөндөөлөрдөн кирүү үчүн көзөмөлдөө каражаттарын тандаңыз"</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Ыкчам жөндөөлөрдө жеткиликтүү боло турган башкаруу элементтерин тандаңыз"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Башкаруу элементтеринин иретин өзгөртүү үчүн кармап туруп, сүйрөңүз"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Бардык башкаруу элементтери өчүрүлдү"</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өзгөртүүлөр сакталган жок"</string> <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Башка колдонмолорду көрүү"</string> - <string name="controls_favorite_load_error" msgid="5126216176144877419">"Көзөмөлдөр жүктөлгөн жок. <xliff:g id="APP">%s</xliff:g> колдонмосуна өтүп, колдонмонун жөндөөлөрү өзгөрбөгөнүн текшериңиз."</string> - <string name="controls_favorite_load_none" msgid="7687593026725357775">"Шайкеш көзөмөлдөр жеткиликсиз"</string> + <string name="controls_favorite_load_error" msgid="5126216176144877419">"Башкаруу элементтери жүктөлгөн жок. <xliff:g id="APP">%s</xliff:g> колдонмосуна өтүп, колдонмонун жөндөөлөрү өзгөрбөгөнүн текшериңиз."</string> + <string name="controls_favorite_load_none" msgid="7687593026725357775">"Шайкеш башкаруу элементтери жеткиликсиз"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Башка"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Түзмөктү башкаруу элементтерине кошуу"</string> <string name="controls_dialog_ok" msgid="2770230012857881822">"Кошуу"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Жабуу"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Улантуу"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Жөндөөлөр"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ыры (аткаруучу: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) <xliff:g id="APP_LABEL">%3$s</xliff:g> колдонмосунан ойнотулуп жатат"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Ойнотуу"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> колдонмосун ачуу"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ырын (аткаруучу: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) <xliff:g id="APP_LABEL">%3$s</xliff:g> колдонмосунан ойнотуу"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ырын <xliff:g id="APP_LABEL">%2$s</xliff:g> колдонмосунан ойнотуу"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Жигерсиз. Колдонмону текшериңиз"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Ката, дагы аракет жасалууда…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Табылган жок"</string> @@ -1094,7 +1099,7 @@ <string name="controls_error_generic" msgid="352500456918362905">"Абалы жүктөлгөн жок"</string> <string name="controls_error_failed" msgid="960228639198558525">"Ката, кайталап көрүңүз"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Аткарылууда"</string> - <string name="controls_added_tooltip" msgid="5866098408470111984">"Жаңы көзөмөлдөө каражаттарын көрүү үчүн Ыкчам жөндөөлөрдү ачыңыз"</string> + <string name="controls_added_tooltip" msgid="5866098408470111984">"Жаңы башкаруу элементтерин көрүү үчүн Ыкчам жөндөөлөрдү ачыңыз"</string> <string name="controls_menu_add" msgid="4447246119229920050">"Башкаруу элементтерин кошуу"</string> <string name="controls_menu_edit" msgid="890623986951347062">"Башкаруу элементтерин түзөтүү"</string> <string name="media_output_dialog_add_output" msgid="5642703238877329518">"Медиа түзмөктөрдү кошуу"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 2c42d8f76992..ca4122ee02fd 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ອີເທເນັດ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ໂມງປຸກ"</string> <string name="wallet_title" msgid="5369767670735827105">"ກະເປົາ"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ຕັ້ງຄ່າເພື່ອຊື້ດ້ວຍໂທລະສັບຂອງທ່ານໄດ້ໄວຂຶ້ນ ແລະ ປອດໄພຂຶ້ນ"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"ສະແດງທັງໝົດ"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ປົດລັອກເພື່ອຈ່າຍ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ບໍ່ໄດ້ຕັ້ງຄ່າ"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ປິດໄວ້"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ສືບຕໍ່"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ການຕັ້ງຄ່າ"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ໂດຍ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ກຳລັງຫຼິ້ນຈາກ <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ຫຼິ້ນ"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"ເປີດ <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"ຫຼິ້ນ <xliff:g id="SONG_NAME">%1$s</xliff:g> ໂດຍ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ຈາກ <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"ຫຼິ້ນ <xliff:g id="SONG_NAME">%1$s</xliff:g> ຈາກ <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ບໍ່ເຮັດວຽກ, ກະລຸນາກວດສອບແອັບ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ຜິດພາດ, ກໍາລັງລອງໃໝ່…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ບໍ່ພົບ"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 6447a3fef7a2..5016fb68761a 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Eternetas"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signalas"</string> <string name="wallet_title" msgid="5369767670735827105">"Piniginė"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Nustatykite, kad galėtumėte greičiau ir saugiau pirkti telefonu"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Rodyti viską"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Atrakinti, kad būtų galima mokėti"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nenustatyta"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Atsisakyti"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Tęsti"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Nustatymai"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> – „<xliff:g id="SONG_NAME">%1$s</xliff:g>“ leidžiama iš „<xliff:g id="APP_LABEL">%3$s</xliff:g>“"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Leisti"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Atidaryti „<xliff:g id="APP_LABEL">%1$s</xliff:g>“"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Leisti <xliff:g id="ARTIST_NAME">%2$s</xliff:g> – „<xliff:g id="SONG_NAME">%1$s</xliff:g>“ iš „<xliff:g id="APP_LABEL">%3$s</xliff:g>“"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Leisti „<xliff:g id="SONG_NAME">%1$s</xliff:g>“ iš „<xliff:g id="APP_LABEL">%2$s</xliff:g>“"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktyvu, patikrinkite progr."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Klaida, bandoma iš naujo…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nerasta"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4157862b9655..13de03623ab2 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Tīkls Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signāls"</string> <string name="wallet_title" msgid="5369767670735827105">"Maks"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Iestatiet, lai ātrāk un drošāk veiktu pirkumus, izmantojot tālruni"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Rādīt visu"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Lai maksātu, atbloķējiet ekrānu"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nav iestatīts"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Nerādīt"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Atsākt"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Iestatījumi"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tiek atskaņots fails “<xliff:g id="SONG_NAME">%1$s</xliff:g>” (izpildītājs: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) no lietotnes <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Atskaņot"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Atveriet lietotni <xliff:g id="APP_LABEL">%1$s</xliff:g>."</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Atskaņojiet failu “<xliff:g id="SONG_NAME">%1$s</xliff:g>” (izpildītājs: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) no lietotnes <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Atskaņojiet failu “<xliff:g id="SONG_NAME">%1$s</xliff:g>” no lietotnes <xliff:g id="APP_LABEL">%2$s</xliff:g>."</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktīva, pārbaudiet lietotni"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Radās kļūda. Mēģina vēlreiz…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Netika atrasta"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index b7862d9887f5..b70e2e56761d 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Етернет"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Аларм"</string> <string name="wallet_title" msgid="5369767670735827105">"Паричник"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Поставете за да купувате побрзо и побезбедно преку вашиот телефон"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Прикажи ги сите"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Отклучете за да платите"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Не е поставено"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Отфрли"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Продолжи"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Поставки"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> од <xliff:g id="ARTIST_NAME">%2$s</xliff:g> е пуштено на <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Пушти"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Отворете <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Пуштете <xliff:g id="SONG_NAME">%1$s</xliff:g> од <xliff:g id="ARTIST_NAME">%2$s</xliff:g> на <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Пуштете <xliff:g id="SONG_NAME">%1$s</xliff:g> на <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивна, провери апликација"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Грешка, повторен обид…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Не е најдено"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 871061031aec..746d6f45accd 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ഇതർനെറ്റ്"</string> <string name="status_bar_alarm" msgid="87160847643623352">"അലാറം"</string> <string name="wallet_title" msgid="5369767670735827105">"വാലറ്റ്"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"നിങ്ങളുടെ ഫോൺ ഉപയോഗിച്ച് വാങ്ങലുകൾ വേഗത്തിലും സുരക്ഷിതമായും നടത്താനുള്ള സജ്ജീകരണം നടത്തുക"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"എല്ലാം കാണിക്കുക"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"പണമടയ്ക്കാൻ അൺലോക്ക് ചെയ്യുക"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"സജ്ജീകരിച്ചിട്ടില്ല"</string> @@ -733,7 +734,7 @@ <string name="notification_channel_summary_low" msgid="4860617986908931158">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല, സംഭാഷണ വിഭാഗത്തിന് താഴെയായി ദൃശ്യമാകും"</string> <string name="notification_channel_summary_default" msgid="3282930979307248890">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ്/വൈബ്രേറ്റ് ചെയ്യും"</string> - <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്തേക്കാം. <xliff:g id="APP_NAME">%1$s</xliff:g>-ൽ നിന്നുള്ള സംഭാഷണങ്ങൾ ഡിഫോൾട്ടായി ബബ്ൾ ആവുന്നു."</string> + <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്തേക്കാം. <xliff:g id="APP_NAME">%1$s</xliff:g>-ൽ നിന്നുള്ള സംഭാഷണങ്ങൾ ഡിഫോൾട്ടായി ബബിൾ ആവുന്നു."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ഈ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഫ്ലോട്ടിംഗ് കുറുക്കുവഴി ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ നിലനിർത്തുന്നു."</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"ഈ അറിയിപ്പ് വരുമ്പോൾ ശബ്ദിക്കുകയാണോ വൈബ്രേറ്റ് ചെയ്യുകയാണോ വേണ്ടതെന്ന് നിർണ്ണയിക്കാൻ സിസ്റ്റത്തെ അനുവദിക്കുക"</string> <string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"<b>നില:</b> ഡിഫോൾട്ടാക്കി പ്രമോട്ട് ചെയ്തു"</string> @@ -780,7 +781,7 @@ <string name="notification_conversation_unfavorite" msgid="181383708304763807">"പ്രധാനപ്പെട്ട സംഭാഷണമല്ല"</string> <string name="notification_conversation_mute" msgid="268951550222925548">"നിശബ്ദമാക്കി"</string> <string name="notification_conversation_unmute" msgid="2692255619510896710">"മുന്നറിയിപ്പ് നൽകൽ"</string> - <string name="notification_conversation_bubble" msgid="2242180995373949022">"ബബ്ൾ ആയി കാണിക്കുക"</string> + <string name="notification_conversation_bubble" msgid="2242180995373949022">"ബബിൾ ആയി കാണിക്കുക"</string> <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ബബിളുകൾ നീക്കം ചെയ്യുക"</string> <string name="notification_conversation_home_screen" msgid="8347136037958438935">"ഹോം സ്ക്രീനിലേക്ക് ചേർക്കുക"</string> <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ഡിസ്മിസ് ചെയ്യുക"</string> <string name="controls_media_resume" msgid="1933520684481586053">"പുനരാരംഭിക്കുക"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ക്രമീകരണം"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> എന്ന ആർട്ടിസ്റ്റിന്റെ <xliff:g id="SONG_NAME">%1$s</xliff:g> എന്ന ഗാനം <xliff:g id="APP_LABEL">%3$s</xliff:g> ആപ്പിൽ പ്ലേ ചെയ്യുന്നു"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"പ്ലേ ചെയ്യുക"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> തുറക്കുക"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> എന്ന ആർട്ടിസ്റ്റിന്റെ <xliff:g id="SONG_NAME">%1$s</xliff:g> എന്ന ഗാനം <xliff:g id="APP_LABEL">%3$s</xliff:g> ആപ്പിൽ പ്ലേ ചെയ്യുക"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> എന്ന ഗാനം <xliff:g id="APP_LABEL">%2$s</xliff:g> ആപ്പിൽ പ്ലേ ചെയ്യുക"</string> <string name="controls_error_timeout" msgid="794197289772728958">"നിഷ്ക്രിയം, ആപ്പ് പരിശോധിക്കൂ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"പിശക്, വീണ്ടും ശ്രമിക്കുന്നു…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"കണ്ടെത്തിയില്ല"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index c9b8495d25d1..9732fbd27470 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -606,18 +606,18 @@ <string name="screen_pinning_title" msgid="9058007390337841305">"Аппыг бэхэлсэн"</string> <string name="screen_pinning_description" msgid="8699395373875667743">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулна. Тогтоосныг болиулахын тулд Буцах, Тоймыг дараад хүлээнэ үү."</string> <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулсан хэвээр байна. Тогтоосныг болиулахын тулд Буцах, Нүүр хуудас товчлуурыг дараад хүлээнэ үү."</string> - <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"Та тогтоосныг болиулах хүртэл үүнийг харуулсан хэвээр байна. Тогтоосныг болиулахын тулд дээш удаан шударна уу."</string> + <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"Та бэхэлснийг болиулах хүртэл үүнийг харуулсан хэвээр байна. Бэхэлснийг болиулахын тулд дээш удаан шударна уу."</string> <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"Таныг тогтоосныг болиулах хүртэл харагдах болно. Тогтоосныг болиулахын тулд Буцах товчлуурыг дараад, хүлээнэ үү."</string> <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулсан хэвээр байна. Тогтоосныг болиулахын тулд Нүүр хуудас товчлуурыг дараад хүлээнэ үү."</string> <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"Хувийн мэдээлэлд хандах боломжтой байж магадгүй (харилцагчид, имэйлийн контент зэрэг)."</string> - <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"Тогтоосон апп бусад аппыг нээж магадгүй."</string> + <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"Бэхэлсэн апп бусад аппыг нээж магадгүй."</string> <string name="screen_pinning_toast" msgid="8177286912533744328">"Энэ аппыг тогтоосныг болиулахын тулд Буцах, Тойм товчлуурыг дараад хүлээнэ үү"</string> <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"Энэ аппыг тогтоосныг болиулахын тулд Буцах, Нүүр хуудасны товчлуурыг дараад хүлээнэ үү"</string> - <string name="screen_pinning_toast_gesture_nav" msgid="170699893395336705">"Энэ аппыг тогтоосныг болиулахын тулд дээш шударч барина уу"</string> + <string name="screen_pinning_toast_gesture_nav" msgid="170699893395336705">"Энэ аппыг бэхэлснийг болиулахын тулд дээш шударч барина уу"</string> <string name="screen_pinning_positive" msgid="3285785989665266984">"Ойлголоо"</string> <string name="screen_pinning_negative" msgid="6882816864569211666">"Үгүй"</string> <string name="screen_pinning_start" msgid="7483998671383371313">"Аппыг бэхэлсэн"</string> - <string name="screen_pinning_exit" msgid="4553787518387346893">"Аппыг тогтоосныг болиулсан"</string> + <string name="screen_pinning_exit" msgid="4553787518387346893">"Аппыг бэхэлснийг болиулсан"</string> <string name="quick_settings_reset_confirmation_title" msgid="463533331480997595">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>-ийг нуух уу?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2320586180785674186">"Тохируулгын хэсэгт үүнийг асаахад энэ дахин харагдана."</string> <string name="quick_settings_reset_confirmation_button" msgid="3341477479055016776">"Нуух"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Этернет"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Сэрүүлэг"</string> <string name="wallet_title" msgid="5369767670735827105">"Түрийвч"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Утсаараа илүү хурдан, аюулгүй худалдан авалт хийхийн тулд тохируулгыг авна уу"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Бүгдийг харуулах"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Төлөхийн тулд түгжээг тайлна уу"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Тохируулаагүй"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Хаах"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Үргэлжлүүлэх"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Тохиргоо"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> дээр тоглуулж буй <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-н <xliff:g id="SONG_NAME">%1$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Тоглуулах"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g>-г нээх"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>-н <xliff:g id="SONG_NAME">%1$s</xliff:g>-г <xliff:g id="APP_LABEL">%3$s</xliff:g> дээр тоглуулах"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g>-г <xliff:g id="APP_LABEL">%2$s</xliff:g> дээр тоглуулах"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Идэвхгүй байна, аппыг шалгана уу"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Алдаа, дахин оролдож байна…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Олдсонгүй"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 09de767c2078..b11c85c2c3ce 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"इथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"तुमचा फोन वापरून जलदरीत्या, अधिक सुरक्षित खरेदी करण्यासाठी सेट करा"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"सर्व दाखवा"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"पैसे देण्यासाठी अनलॉक करा"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"सेट केलेले नाही"</string> @@ -1084,7 +1085,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"डिसमिस करा"</string> <string name="controls_media_resume" msgid="1933520684481586053">"पुन्हा सुरू करा"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग्ज"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"प्ले करणे"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"निष्क्रिय, ॲप तपासा"</string> <string name="controls_error_retryable" msgid="864025882878378470">"एरर, पुन्हा प्रयत्न करत आहे…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"आढळले नाही"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 165d8c033556..1f97ef6ea74d 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Penggera"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Buat persediaan untuk membuat pembelian yang lebih pantas dan selamat dengan telefon anda"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Tunjukkan semua"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Buka kunci untuk membayar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Tidak disediakan"</string> @@ -889,7 +890,7 @@ <string name="right_keycode" msgid="2480715509844798438">"Kod kunci kanan"</string> <string name="left_icon" msgid="5036278531966897006">"Ikon kiri"</string> <string name="right_icon" msgid="1103955040645237425">"Ikon kanan"</string> - <string name="drag_to_add_tiles" msgid="8933270127508303672">"Tahan dan seret untuk menambah jubin"</string> + <string name="drag_to_add_tiles" msgid="8933270127508303672">"Tahan dan seret untuk menambahkan jubin"</string> <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Tahan dan seret untuk mengatur semula jubin"</string> <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Seret ke sini untuk mengalih keluar"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Anda memerlukan sekurang-kurangnya <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> jubin"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Tolak"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Sambung semula"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Tetapan"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> dimainkan daripada <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Main"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Buka <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Mainkan <xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> daripada <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Mainkan <xliff:g id="SONG_NAME">%1$s</xliff:g> daripada <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Tidak aktif, semak apl"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Ralat, mencuba semula…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Tidak ditemukan"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index ba63fc334149..78bc9918331c 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -19,7 +19,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4811759950673118541">"စနစ်၏UI"</string> + <string name="app_label" msgid="4811759950673118541">"စနစ်၏ UI"</string> <string name="status_bar_clear_all_button" msgid="2491321682873657397">"ရှင်းရန်"</string> <string name="status_bar_no_notifications_title" msgid="7812479124981107507">"အကြောင်းကြားချက်များ မရှိ"</string> <string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"လက်ရှိအသုံးပြုမှု"</string> @@ -117,7 +117,7 @@ <string name="screenrecord_cancel_label" msgid="7850926573274483294">"မလုပ်တော့"</string> <string name="screenrecord_share_label" msgid="5025590804030086930">"မျှဝေရန်"</string> <string name="screenrecord_cancel_success" msgid="1775448688137393901">"ဖန်သားပြင် ရိုက်ကူးမှု ပယ်ဖျက်လိုက်ပါပြီ"</string> - <string name="screenrecord_save_title" msgid="1886652605520893850">"ဖန်သားပြင် ရိုက်ကူးမှုကို သိမ်းပြီးပါပြီ"</string> + <string name="screenrecord_save_title" msgid="1886652605520893850">"စကရင်ရိုက်ကူးမှု သိမ်းပြီးပြီ"</string> <string name="screenrecord_save_text" msgid="3008973099800840163">"ကြည့်ရှုရန် တို့ပါ"</string> <string name="screenrecord_delete_error" msgid="2870506119743013588">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်"</string> <string name="screenrecord_permission_error" msgid="7856841237023137686">"ခွင့်ပြုချက် မရယူနိုင်ပါ"</string> @@ -423,7 +423,7 @@ <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ကို ပိတ်ထားသည်"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ကို ဖွင့်ထားသည်"</string> - <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"ဖန်သားပြင် ရိုက်ကူးရန်"</string> + <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"စကရင် ရိုက်ကူးရန်"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"စတင်ရန်"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ရပ်ရန်"</string> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"စက်၏မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်မလား။"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"အီသာနက်"</string> <string name="status_bar_alarm" msgid="87160847643623352">"နှိုးစက်"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"သင့်ဖုန်းဖြင့် ပိုမိုမြန်ဆန်၊ ပိုမိုစိတ်ချရသော ဝယ်ယူမှုများ ပြုလုပ်ရန် စတင်သတ်မှတ်ပါ"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"အားလုံးပြရန်"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ငွေပေးချေရန် လော့ခ်ဖွင့်ပါ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"စနစ် ထည့်သွင်းမထားပါ"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ပယ်ရန်"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ဆက်လုပ်ရန်"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ဆက်တင်များ"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ၏ <xliff:g id="SONG_NAME">%1$s</xliff:g> ကို <xliff:g id="APP_LABEL">%3$s</xliff:g> တွင် ဖွင့်ထားသည်"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ဖွင့်ခြင်း"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> ကို ဖွင့်ပါ"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ၏ <xliff:g id="SONG_NAME">%1$s</xliff:g> ကို <xliff:g id="APP_LABEL">%3$s</xliff:g> တွင် ဖွင့်ပါ"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ကို <xliff:g id="APP_LABEL">%2$s</xliff:g> တွင် ဖွင့်ပါ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ရပ်နေသည်၊ အက်ပ်ကို စစ်ဆေးပါ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"မှားသွားသည်၊ ပြန်စမ်းနေသည်…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"မတွေ့ပါ"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 28bd4031f6bb..c181089321de 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Legg til en betalingsmåte for å gjennomføre kjøp raskere og sikrere med telefonen"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Vis alle"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Lås opp for å betale"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ikke konfigurert"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Lukk"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Gjenoppta"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Innstillinger"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> av <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spilles av fra <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Spill av"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Åpne <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Spill av <xliff:g id="SONG_NAME">%1$s</xliff:g> av <xliff:g id="ARTIST_NAME">%2$s</xliff:g> fra <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Spill av <xliff:g id="SONG_NAME">%1$s</xliff:g> fra <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv. Sjekk appen"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Feil. Prøver igjen …"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ikke funnet"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index ea74b72ed9e9..283bc40d6ec8 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"इथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> <string name="wallet_title" msgid="5369767670735827105">"वालेट"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"सबै देखाइयोस्"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"भुक्तानी गर्न अनलक गर्नुहोस्"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"सेटअप गरिएको छैन"</string> @@ -1042,7 +1044,7 @@ <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"किनाराबाट सार्नुहोस् र देखिने पार्नु…"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टगल गर्नुहोस्"</string> <string name="quick_controls_title" msgid="7095074621086860062">"घरायसी उपकरणका नियन्त्रणहरू"</string> - <string name="controls_providers_title" msgid="6879775889857085056">"नियन्त्रणहरू थप्नु पर्ने एप छान्नुहोस्"</string> + <string name="controls_providers_title" msgid="6879775889857085056">"कन्ट्रोल थप्नु पर्ने एप छान्नुहोस्"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> वटा नियन्त्र थपियो।</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> नियन्त्र थपियो</item> @@ -1055,9 +1057,9 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"मन पर्ने कुराहरूको सूचीमा नराख्नुहोस्"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>ले निर्देश गर्ने ठाउँमा सार्नुहोस्"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"नियन्त्रणहरू"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"आफूले द्रुत सेटिङबाट प्रयोग गर्न चाहेका नियन्त्रणहरू छान्नुहोस्"</string> - <string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियन्त्रणहरूको क्रम मिलाउन तिनलाई थिचेर ड्र्याग गर्नुहोस्"</string> - <string name="controls_favorite_removed" msgid="5276978408529217272">"सबै नियन्त्रणहरू हटाइए"</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"आफूले द्रुत सेटिङबाट प्रयोग गर्न चाहेका कन्ट्रोल छान्नुहोस्"</string> + <string name="controls_favorite_rearrange" msgid="5616952398043063519">"कन्ट्रोललाई होल्ड एण्ड ड्र्याग गरी कन्ट्रोलको क्रम मिलाउनुहोस्"</string> + <string name="controls_favorite_removed" msgid="5276978408529217272">"सबै कन्ट्रोल हटाइए"</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"परिवर्तनहरू सुरक्षित गरिएका छैनन्"</string> <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"अन्य एपहरू हेर्नुहोस्"</string> <string name="controls_favorite_load_error" msgid="5126216176144877419">"नियन्त्रण सुविधाहरू लोड गर्न सकिएन। <xliff:g id="APP">%s</xliff:g> एपका सेटिङ परिवर्तन गरिएका छैनन् भन्ने कुरा सुनिश्चित गर्न उक्त एप जाँच्नुहोस्।"</string> @@ -1084,7 +1086,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"हटाउनुहोस्"</string> <string name="controls_media_resume" msgid="1933520684481586053">"सुचारु गर्नुहोस्"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिङ"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"प्ले गर्नुहोस्"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"निष्क्रिय छ, एप जाँच गर्नु…"</string> <string name="controls_error_retryable" msgid="864025882878378470">"त्रुटि भयो, फेरि प्रयास गर्दै…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"फेला परेन"</string> @@ -1095,8 +1105,8 @@ <string name="controls_error_failed" msgid="960228639198558525">"त्रुटि भयो, फेरि प्रयास गर्नु…"</string> <string name="controls_in_progress" msgid="4421080500238215939">"कार्य हुँदै छ"</string> <string name="controls_added_tooltip" msgid="5866098408470111984">"नयाँ नियन्त्रणहरू हेर्न द्रुत सेटिङ खोल्नुहोस्"</string> - <string name="controls_menu_add" msgid="4447246119229920050">"नियन्त्रण सुविधाहरू थप्नुहोस्"</string> - <string name="controls_menu_edit" msgid="890623986951347062">"नियन्त्रण सुविधाहरू सम्पादन गर्नु…"</string> + <string name="controls_menu_add" msgid="4447246119229920050">"कन्ट्रोल थप्नुहोस्"</string> + <string name="controls_menu_edit" msgid="890623986951347062">"कन्ट्रोल सम्पादन गर्नुहोस्"</string> <string name="media_output_dialog_add_output" msgid="5642703238877329518">"आउटपुट यन्त्रहरू थप्नुहोस्"</string> <string name="media_output_dialog_group" msgid="5571251347877452212">"समूह"</string> <string name="media_output_dialog_single_device" msgid="3102758980643351058">"१ यन्त्र चयन गरियो"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 37c365742d08..e91f0a034842 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Wekker"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Zorg dat je sneller en beter beveiligd aankopen kunt doen met je telefoon"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Alles tonen"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ontgrendelen om te betalen"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Niet ingesteld"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Sluiten"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Hervatten"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellingen"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> van <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wordt afgespeeld via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Afspelen"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> openen"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="SONG_NAME">%1$s</xliff:g> van <xliff:g id="ARTIST_NAME">%2$s</xliff:g> afspelen via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> afspelen via <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactief, check de app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Fout. Opnieuw proberen…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Niet gevonden"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 722cdc9e768d..bbec6ddf2291 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -211,7 +211,7 @@ <string name="accessibility_two_bars" msgid="1335676987274417121">"ଦୁଇଟି ବାର୍ ଅଛି।"</string> <string name="accessibility_three_bars" msgid="819417766606501295">"ତିନୋଟି ବାର୍ ଅଛି।"</string> <string name="accessibility_signal_full" msgid="5920148525598637311">"ସିଗ୍ନାଲ୍ ଫୁଲ୍ ଅଛି।"</string> - <string name="accessibility_desc_on" msgid="2899626845061427845">"ଚାଲୁ।"</string> + <string name="accessibility_desc_on" msgid="2899626845061427845">"ଚାଲୁ ଅଛି।"</string> <string name="accessibility_desc_off" msgid="8055389500285421408">"ବନ୍ଦ।"</string> <string name="accessibility_desc_connected" msgid="3082590384032624233">"ସଂଯୁକ୍ତ।"</string> <string name="accessibility_desc_connecting" msgid="8011433412112903614">"ସଂଯୋଗ କରୁଛି।"</string> @@ -220,7 +220,7 @@ <string name="accessibility_data_connection_wifi" msgid="4422160347472742434">"ୱାଇ-ଫାଇ"</string> <string name="accessibility_no_sim" msgid="1140839832913084973">"କୌଣସି SIM ନାହିଁ।"</string> <string name="accessibility_cell_data" msgid="172950885786007392">"ମୋବାଇଲ୍ ଡାଟା"</string> - <string name="accessibility_cell_data_on" msgid="691666434519443162">"ମୋବାଇଲ୍ ଡାଟା ଅନ୍"</string> + <string name="accessibility_cell_data_on" msgid="691666434519443162">"ମୋବାଇଲ୍ ଡାଟା ଚାଲୁ ଅଛି"</string> <string name="cell_data_off" msgid="4886198950247099526">"ବନ୍ଦ"</string> <string name="accessibility_bluetooth_tether" msgid="6327291292208790599">"ବ୍ଲୁଟୁଥ ଟିଥରିଂ।"</string> <string name="accessibility_airplane_mode" msgid="1899529214045998505">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍।"</string> @@ -253,11 +253,11 @@ <string name="accessibility_desc_close" msgid="8293708213442107755">"ବନ୍ଦ କରନ୍ତୁ"</string> <string name="accessibility_quick_settings_wifi" msgid="167707325133803052">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string> <string name="accessibility_quick_settings_wifi_changed_off" msgid="2230487165558877262">"ୱାଇ-ଫାଇ ବନ୍ଦ ଅଛି।"</string> - <string name="accessibility_quick_settings_wifi_changed_on" msgid="1490362586009027611">"ୱାଇ-ଫାଇ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_wifi_changed_on" msgid="1490362586009027611">"ୱାଇ-ଫାଇ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_mobile" msgid="1817825313718492906">"ମୋବାଇଲ୍ <xliff:g id="SIGNAL">%1$s</xliff:g>। <xliff:g id="TYPE">%2$s</xliff:g>। <xliff:g id="NETWORK">%3$s</xliff:g>।"</string> <string name="accessibility_quick_settings_battery" msgid="533594896310663853">"<xliff:g id="STATE">%s</xliff:g> ବ୍ୟାଟେରୀ ଅଛି।"</string> <string name="accessibility_quick_settings_airplane_off" msgid="1275658769368793228">"ଏୟାର୍ପ୍ଲେନ୍ ମୋଡ୍ ଅଫ୍ ଅଛି।"</string> - <string name="accessibility_quick_settings_airplane_on" msgid="8106176561295294255">"ଏୟାର୍ପ୍ଲେନ୍ ମୋଡ୍ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_airplane_on" msgid="8106176561295294255">"ଏୟାର୍ପ୍ଲେନ୍ ମୋଡ୍ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="8880183481476943754">"ଏୟାର୍ପ୍ଲେନ୍ ମୋଡ୍କୁ ବନ୍ଦ କରାଯାଇଛି।"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="6327378061894076288">"ଏୟାର୍ପ୍ଲେନ୍ ମୋଡ୍କୁ ଚାଲୁ କରାଯାଇଛି।"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ସମ୍ପୂର୍ଣ୍ଣ ନୀରବତା"</string> @@ -267,13 +267,13 @@ <string name="accessibility_quick_settings_dnd_changed_on" msgid="186315911607486129">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ବ୍ଲୁଟୁଥ।"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="3795983516942423240">"ବ୍ଲୁଟୂଥ୍ ଅଫ୍ ଅଛି।"</string> - <string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"ବ୍ଲୁଟୂଥ୍ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"ବ୍ଲୁଟୂଥ୍ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="7362294657419149294">"ବ୍ଲୁଟୂଥ୍ ସଂଯୋଗ ହେଉଛି।"</string> <string name="accessibility_quick_settings_bluetooth_connected" msgid="5237625393869747261">"ବ୍ଲୁ-ଟୁଥ୍କୁ ସଂଯୋଗ କରାଯାଇଛି।"</string> <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="3344226652293797283">"ବ୍ଲୁ-ଟୁଥ୍କୁ ବନ୍ଦ କରିଦିଆଯାଇଛି।"</string> <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="1263282011749437549">"ବ୍ଲୁ-ଟୁଥ୍କୁ ଚାଲୁ କରାଯାଇଛି।"</string> <string name="accessibility_quick_settings_location_off" msgid="6122523378294740598">"ଲୋକେଶନ୍ର ତଥ୍ୟ ବନ୍ଦ ଅଛି।"</string> - <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"ଲୋକେଶନ୍ର ତଥ୍ୟ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"ଲୋକେସନର ରିପୋର୍ଟିଂ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_location_changed_off" msgid="5132776369388699133">"ଲୋକେଶନ୍ର ରିପୋର୍ଟ ବନ୍ଦ କରାଗଲା।"</string> <string name="accessibility_quick_settings_location_changed_on" msgid="7159115433070112154">"ଲୋକେଶନ୍ର ରିପୋର୍ଟ ଅନ୍ କରାଗଲା।"</string> <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"<xliff:g id="TIME">%s</xliff:g>ରେ ଆଲାର୍ମ ସେଟ୍ କରାଯାଇଛି।"</string> @@ -284,11 +284,11 @@ <string name="accessibility_quick_settings_flashlight_unavailable" msgid="7458591827288347635">"ଟର୍ଚ୍ଚ ଲାଇଟ୍ ଅନୁପଲବ୍ଧ।"</string> <string name="accessibility_quick_settings_flashlight_on" msgid="3785616827729850766">"ଫ୍ଲାସ୍ଲାଇଟ୍ ଚାଲୁଅଛି।"</string> <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3782375441381402599">"ଟର୍ଚ୍ଚ ଲାଇଟ୍ ବନ୍ଦ ଅଛି।"</string> - <string name="accessibility_quick_settings_flashlight_changed_on" msgid="4747870681508334200">"ଟର୍ଚ୍ଚ ଲାଇଟ୍ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_flashlight_changed_on" msgid="4747870681508334200">"ଟର୍ଚ୍ଚ ଲାଇଟ୍ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="7548045840282925393">"ରଙ୍ଗ ବିପରୀତିକରଣକୁ ବନ୍ଦ କରିଦିଆଗଲା।"</string> <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="4711141858364404084">"ରଙ୍ଗ ବିପରୀତିକରଣକୁ ଚାଲୁ କରିଦିଆଗଲା।"</string> <string name="accessibility_quick_settings_hotspot_changed_off" msgid="7002061268910095176">"ମୋବାଇଲ୍ ହଟସ୍ପଟ୍ ବନ୍ଦ ଅଛି।"</string> - <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2576895346762408840">"ମୋବାଇଲ୍ ହଟସ୍ପଟ୍ ଅନ୍ ଅଛି।"</string> + <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2576895346762408840">"ମୋବାଇଲ୍ ହଟସ୍ପଟ୍ ଚାଲୁ ଅଛି।"</string> <string name="accessibility_casting_turned_off" msgid="1387906158563374962">"ସ୍କ୍ରୀନ୍ କାଷ୍ଟ କରିବା ରହିଯାଇଛି।"</string> <string name="accessibility_quick_settings_work_mode_changed_off" msgid="6422896967647049692">"ୱାର୍କ ମୋଡକୁ ବିରତ କରାଯାଇଛି।"</string> <string name="accessibility_quick_settings_work_mode_changed_on" msgid="1105258550138313384">"ୱର୍କ ମୋଡ୍କୁ ଅନ୍ କରାଯାଇଛି।"</string> @@ -392,7 +392,7 @@ <string name="quick_settings_connecting" msgid="2381969772953268809">"ସଂଯୋଗ କରୁଛି..."</string> <string name="quick_settings_tethering_label" msgid="5257299852322475780">"ଟିଥରିଂ"</string> <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ହଟସ୍ପଟ୍"</string> - <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ଅନ୍ ହେଉଛି…"</string> + <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ଚାଲୁ ହେଉଛି…"</string> <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ଡାଟା ସେଭର୍ ଅନ୍ ଅଛି"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> <item quantity="other">%d ଡିଭାଇସ୍ଗୁଡ଼ିକ</item> @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ଇଥରନେଟ୍"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ଆଲାର୍ମ"</string> <string name="wallet_title" msgid="5369767670735827105">"ୱାଲେଟ୍"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"ସବୁ ଦେଖାନ୍ତୁ"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ପେମେଣ୍ଟ କରିବାକୁ ଅନଲକ୍ କରନ୍ତୁ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ସେଟ୍ ଅପ୍ କରାଯାଇନାହିଁ"</string> @@ -696,7 +698,7 @@ <string name="qs_rearrange" msgid="484816665478662911">"ଦ୍ରୁତ ସେଟିଙ୍ଗକୁ ପୁଣି ସଜାନ୍ତୁ"</string> <string name="show_brightness" msgid="6700267491672470007">"ଦ୍ରୁତ ସେଟିଙ୍ଗରେ ବ୍ରାଇଟନେସ୍ ଦେଖାନ୍ତୁ"</string> <string name="experimental" msgid="3549865454812314826">"ପରୀକ୍ଷାମୂଳକ"</string> - <string name="enable_bluetooth_title" msgid="866883307336662596">"ବ୍ଲୁଟୂଥ୍ ଅନ୍ କରିବେ?"</string> + <string name="enable_bluetooth_title" msgid="866883307336662596">"ବ୍ଲୁଟୂଥ୍ ଚାଲୁ କରିବେ?"</string> <string name="enable_bluetooth_message" msgid="6740938333772779717">"ଆପଣଙ୍କ ଟାବଲେଟ୍ରେ କୀ’ବୋର୍ଡ ସଂଯୋଗ କରିବା ପାଇଁ ଆପଣଙ୍କୁ ପ୍ରଥମେ ବ୍ଲୁଟୂଥ୍ ଅନ୍ କରିବାକୁ ହେବ।"</string> <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"ଚାଲୁ କରନ୍ତୁ"</string> <string name="show_silently" msgid="5629369640872236299">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ନିରବରେ ଦେଖାନ୍ତୁ"</string> @@ -704,7 +706,7 @@ <string name="do_not_silence" msgid="4982217934250511227">"ନିରବ କରନ୍ତୁ ନାହିଁ"</string> <string name="do_not_silence_block" msgid="4361847809775811849">"ନିରବ କିମ୍ବା ବ୍ଲକ୍ କରନ୍ତୁ ନାହିଁ"</string> <string name="tuner_full_importance_settings" msgid="1388025816553459059">"ପାୱାର୍ ବିଜ୍ଞପ୍ତି କଣ୍ଟ୍ରୋଲ୍"</string> - <string name="tuner_full_importance_settings_on" msgid="917981436602311547">"ଚାଲୁ"</string> + <string name="tuner_full_importance_settings_on" msgid="917981436602311547">"ଚାଲୁ ଅଛି"</string> <string name="tuner_full_importance_settings_off" msgid="5580102038749680829">"ବନ୍ଦ"</string> <string name="power_notification_controls_description" msgid="1334963837572708952">"ପାୱାର୍ ବିଜ୍ଞପ୍ତି କଣ୍ଟ୍ରୋଲ୍ରେ, ଆପଣ ଏକ ଆପ୍ ବିଜ୍ଞପ୍ତି ପାଇଁ 0 ରୁ 5 ଗୁରୁତ୍ୱ ସ୍ତର ସେଟ୍ କରିହେବେ। \n\n"<b>"ସ୍ତର 5"</b>" \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ଶୀର୍ଷରେ ଦେଖାନ୍ତୁ \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ \n- ସର୍ବଦା ପିକ୍ କରନ୍ତୁ \n\n"<b>"ସ୍ତର 4"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍ କରନ୍ତୁ \n- ସର୍ବଦା ପିକ୍ କରନ୍ତୁ \n\n"<b>"ସ୍ତର 3"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍ କରନ୍ତୁ \n- କଦାପି ପିକ୍ କରନ୍ତୁ ନାହିଁ \n\n"<b>"ସ୍ତର 2"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍ କରନ୍ତୁ \n- କଦାପି ପିକ୍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍ କରନ୍ତୁ ନାହିଁ \n\n"<b>"ସ୍ତର 1"</b>" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍ କରନ୍ତୁ \n- କଦାପି ପିକ୍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍ କରନ୍ତୁ ନାହିଁ \n- ଲକ୍ ସ୍କ୍ରୀନ୍ ଓ ଷ୍ଟାଟସ୍ ବାର୍ରୁ ଲୁଚାନ୍ତୁ \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ନିମ୍ନରେ ଦେଖାନ୍ତୁ \n\n"<b>"ସ୍ତର 0"</b>" \n- ଆପରୁ ସମସ୍ତ ବିଜ୍ଞପ୍ତି ବ୍ଲକ୍ କରନ୍ତୁ"</string> <string name="notification_header_default_channel" msgid="225454696914642444">"ବିଜ୍ଞପ୍ତି"</string> @@ -822,7 +824,7 @@ <string name="keyboard_key_media_fast_forward" msgid="3572444327046911822">"ଫାଷ୍ଟ ଫର୍ୱାର୍ଡ"</string> <string name="keyboard_key_page_up" msgid="173914303254199845">"ଉପର ପୃଷ୍ଠା"</string> <string name="keyboard_key_page_down" msgid="9035902490071829731">"ତଳ ପୃଷ୍ଠା"</string> - <string name="keyboard_key_forward_del" msgid="5325501825762733459">"ଡିଲିଟ୍"</string> + <string name="keyboard_key_forward_del" msgid="5325501825762733459">"ଡିଲିଟ୍ କରନ୍ତୁ"</string> <string name="keyboard_key_move_home" msgid="3496502501803911971">"ହୋମ୍"</string> <string name="keyboard_key_move_end" msgid="99190401463834854">"ସମାପ୍ତ"</string> <string name="keyboard_key_insert" msgid="4621692715704410493">"ଇନ୍ସର୍ଟ"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ଖାରଜ କରନ୍ତୁ"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ପୁଣି ଆରମ୍ଭ କରନ୍ତୁ"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ସେଟିଂସ୍"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ରୁ <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ଙ୍କ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚାଲୁଛି"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ଚଲାନ୍ତୁ"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> ଖୋଲନ୍ତୁ"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ରୁ <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ଙ୍କ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚଲାନ୍ତୁ"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g>ରୁ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚଲାନ୍ତୁ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ନିଷ୍କ୍ରିୟ ଅଛି, ଆପ ଯାଞ୍ଚ କରନ୍ତୁ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ତ୍ରୁଟି, ପୁଣି ଚେଷ୍ଟା କରୁଛି…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ମିଳିଲା ନାହିଁ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 456cb8ff1ae2..16dce8b2ebea 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -110,7 +110,7 @@ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ਸਕ੍ਰੀਨ ਨੂੰ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ਸਕ੍ਰੀਨ ਅਤੇ ਆਡੀਓ ਨੂੰ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> <string name="screenrecord_taps_label" msgid="1595690528298857649">"ਸਕ੍ਰੀਨ \'ਤੇ ਸਪਰਸ਼ਾਂ ਨੂੰ ਦਿਖਾਓ"</string> - <string name="screenrecord_stop_text" msgid="6549288689506057686">"ਰੋਕਣ ਲਈ ਟੈਪ ਕਰੋ"</string> + <string name="screenrecord_stop_text" msgid="6549288689506057686">"ਬੰਦ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="screenrecord_stop_label" msgid="72699670052087989">"ਬੰਦ ਕਰੋ"</string> <string name="screenrecord_pause_label" msgid="6004054907104549857">"ਰੋਕੋ"</string> <string name="screenrecord_resume_label" msgid="4972223043729555575">"ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string> @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ਈਥਰਨੈਟ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ਅਲਾਰਮ"</string> <string name="wallet_title" msgid="5369767670735827105">"ਵਾਲੇਟ"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"ਸਭ ਦਿਖਾਓ"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ਭੁਗਤਾਨ ਕਰਨ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string> @@ -1084,7 +1086,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ਖਾਰਜ ਕਰੋ"</string> <string name="controls_media_resume" msgid="1933520684481586053">"ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ਸੈਟਿੰਗਾਂ"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ਚਲਾਓ"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"ਅਕਿਰਿਆਸ਼ੀਲ, ਐਪ ਦੀ ਜਾਂਚ ਕਰੋ"</string> <string name="controls_error_retryable" msgid="864025882878378470">"ਗੜਬੜ, ਮੁੜ ਕੋਸ਼ਿਸ਼ ਹੋ ਰਹੀ ਹੈ…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ਨਹੀਂ ਮਿਲਿਆ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 9eae3d4a9498..1461fa64c582 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Portfel"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Skonfiguruj formę płatności, aby szybciej i bezpieczniej płacić telefonem za zakupy"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Pokaż wszystko"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Odblokuj, aby zapłacić"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nie skonfigurowano"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Odrzuć"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Wznów"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ustawienia"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Aplikacja <xliff:g id="APP_LABEL">%3$s</xliff:g> odtwarza utwór <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Odtwórz"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otwórz aplikację <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Odtwórz utwór <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) w aplikacji <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Odtwórz utwór <xliff:g id="SONG_NAME">%1$s</xliff:g> w aplikacji <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nieaktywny, sprawdź aplikację"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Błąd, próbuję jeszcze raz…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nie znaleziono"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 1945c5d3ee77..6077c54a8e78 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -19,7 +19,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4811759950673118541">"Interf sist"</string> + <string name="app_label" msgid="4811759950673118541">"Interface do sistema"</string> <string name="status_bar_clear_all_button" msgid="2491321682873657397">"Limpar"</string> <string name="status_bar_no_notifications_title" msgid="7812479124981107507">"Sem notificações"</string> <string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"Em andamento"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> <string name="wallet_title" msgid="5369767670735827105">"Carteira"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Prepare tudo para fazer compras mais rápidas e seguras com seu smartphone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostrar tudo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloqueie para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Dispositivos não configurados"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dispensar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Retomar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Iniciar"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abrir <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Tocar <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Tocar <xliff:g id="SONG_NAME">%1$s</xliff:g> no app <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativo, verifique o app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando novamente…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Não encontrado"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index b75085f11e96..666b595e1a46 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> <string name="wallet_title" msgid="5369767670735827105">"Carteira"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Configure para efetuar pagamentos mais rápidos e seguros com o seu telemóvel"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostrar tudo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloquear para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Não configurado"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ignorar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Retomar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Definições"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> em reprodução a partir da app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reproduzir"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abrir <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Reproduzir <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> a partir da app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Reproduzir <xliff:g id="SONG_NAME">%1$s</xliff:g> a partir da app <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativa. Consulte a app."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erro. A tentar novamente…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Não encontrado."</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 1945c5d3ee77..6077c54a8e78 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -19,7 +19,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4811759950673118541">"Interf sist"</string> + <string name="app_label" msgid="4811759950673118541">"Interface do sistema"</string> <string name="status_bar_clear_all_button" msgid="2491321682873657397">"Limpar"</string> <string name="status_bar_no_notifications_title" msgid="7812479124981107507">"Sem notificações"</string> <string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"Em andamento"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> <string name="wallet_title" msgid="5369767670735827105">"Carteira"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Prepare tudo para fazer compras mais rápidas e seguras com seu smartphone"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Mostrar tudo"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Desbloqueie para pagar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Dispositivos não configurados"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Dispensar"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Retomar"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Iniciar"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Abrir <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Tocar <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Tocar <xliff:g id="SONG_NAME">%1$s</xliff:g> no app <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativo, verifique o app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando novamente…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Não encontrado"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 0abe4a009439..d6c3756b52c7 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarmă"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Configurați pentru a face achiziții mai rapide și mai sigure cu telefonul dvs."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Afișați-le pe toate"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Deblocați pentru a plăti"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Neconfigurat"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Închideți"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Reia"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Setări"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de la <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se redă în <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Redați"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Deschideți <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Redați <xliff:g id="SONG_NAME">%1$s</xliff:g> de la <xliff:g id="ARTIST_NAME">%2$s</xliff:g> în <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Redați <xliff:g id="SONG_NAME">%1$s</xliff:g> în <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactiv, verificați aplicația"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Eroare, se încearcă din nou…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nu s-a găsit"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 6d41d9eb4d2c..0c67115be325 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будильник"</string> <string name="wallet_title" msgid="5369767670735827105">"Кошелек"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Расплачивайтесь через телефон быстро и безопасно."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Показать все"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Разблокировать для оплаты"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Не настроено"</string> @@ -1067,7 +1068,7 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"удалить из избранного"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"Переместить на позицию <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"Элементы управления"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Выберите элементы управления, которые будут доступны в меню \"Быстрые настройки\""</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Выберите виджеты управления, которые будут доступны в меню \"Быстрые настройки\"."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Чтобы изменить порядок виджетов, перетащите их."</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Все виджеты управления удалены."</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Изменения не сохранены."</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Скрыть"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Возобновить"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Воспроизводится медиафайл \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" (исполнитель: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) из приложения \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\"."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Воспроизведение"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Открыть приложение \"<xliff:g id="APP_LABEL">%1$s</xliff:g>\""</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Воспроизвести медиафайл \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" (исполнитель: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) из приложения \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\""</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Воспроизвести медиафайл \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" из приложения \"<xliff:g id="APP_LABEL">%2$s</xliff:g>\""</string> <string name="controls_error_timeout" msgid="794197289772728958">"Нет ответа. Проверьте приложение."</string> <string name="controls_error_retryable" msgid="864025882878378470">"Ошибка. Повторная попытка…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Не найдено."</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index a719c920eb6f..cc27dfb7b1b2 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"එලාමය"</string> <string name="wallet_title" msgid="5369767670735827105">"පසුම්බිය"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ඔබගේ දුරකථනය සමඟ වඩා වේගවත්, වඩා සුරක්ෂිත මිලදී ගැනීම් සිදු කිරීමට සූදානම් වන්න"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"සියල්ල පෙන්වන්න"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ගෙවීමට අගුලු හරින්න"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"පිහිටුවා නැත"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ඉවත ලන්න"</string> <string name="controls_media_resume" msgid="1933520684481586053">"නැවත පටන් ගන්න"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"සැකසීම්"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>ගේ <xliff:g id="SONG_NAME">%1$s</xliff:g> ගීතය <xliff:g id="APP_LABEL">%3$s</xliff:g> වෙතින් ධාවනය වෙමින් පවතී"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"වාදනය කරන්න"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> විවෘත කරන්න"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>ගේ <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> වෙතින් වාදනය කරන්න"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%2$s</xliff:g> වෙතින් වාදනය කරන්න"</string> <string name="controls_error_timeout" msgid="794197289772728958">"අක්රියයි, යෙදුම පරීක්ෂා කරන්න"</string> <string name="controls_error_retryable" msgid="864025882878378470">"දෝෂයකි, නැවත උත්සාහ කරමින්…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"හමු නොවිණි"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index ad33b0d3b730..63b1e0bb0d94 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Budík"</string> <string name="wallet_title" msgid="5369767670735827105">"Peňaženka"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Nastavte si všetko potrebné na rýchlejšie a bezpečnejšie nákupy telefónom"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Zobraziť všetko"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Odomknúť a zaplatiť"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nenastavené"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Zavrieť"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Pokračovať"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavenia"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sa prehráva z aplikácie <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Prehrať"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Otvoriť <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Prehrať skladbu <xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> z aplikácie <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Prehrať skladbu <xliff:g id="SONG_NAME">%1$s</xliff:g> z aplikácie <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktívne, preverte aplikáciu"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Chyba, skúša sa znova…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nenájdené"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 4aea246b1254..d229aae9019b 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Opozorilo"</string> <string name="wallet_title" msgid="5369767670735827105">"Denarnica"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Nastavite možnost hitrejšega in varnejšega plačevanja s telefonom."</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Prikaži vse"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Odklenite za plačevanje"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ni nastavljeno"</string> @@ -736,7 +737,7 @@ <string name="notification_silence_title" msgid="8608090968400832335">"Tiho"</string> <string name="notification_alert_title" msgid="3656229781017543655">"Privzeto"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"Samodejno"</string> - <string name="notification_channel_summary_low" msgid="4860617986908931158">"Brez zvočnega opozarjanja ali vibriranja"</string> + <string name="notification_channel_summary_low" msgid="4860617986908931158">"Brez zvočnega opozarjanja ali vibriranja."</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"Brez zvočnega opozarjanja ali vibriranja, prikaz nižje v razdelku Pogovor."</string> <string name="notification_channel_summary_default" msgid="3282930979307248890">"Zvonjenje ali vibriranje je omogočeno na podlagi nastavitev telefona."</string> <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Zvonjenje ali vibriranje je omogočeno na podlagi nastavitev telefona. Pogovori v aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> so privzeto prikazani v oblačkih."</string> @@ -747,7 +748,7 @@ <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>Stanje:</b> Uvrščeno višje"</string> <string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Stanje:</b> Uvrščeno nižje"</string> <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Prikaz na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu"</string> - <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Prikaz v obliki oblačka na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu"</string> + <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Prikaz v obliki oblačka na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu."</string> <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Prikaz na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu, preglasitev načina Ne moti"</string> <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikaz v obliki oblačka na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu, preglasitev načina Ne moti"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nastavitve"</string> @@ -1067,7 +1068,7 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odstranitev iz priljubljenih"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"Premakni na položaj <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolniki"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Izbira kontrolnikov, dostopnih v hitrih nastavitvah"</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Izberite kontrolnike, do katerih želite imeti dostop v hitrih nastavitvah."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite in povlecite, da prerazporedite kontrolnike."</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Vsi kontrolniki so bili odstranjeni."</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Spremembe niso shranjene"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Opusti"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Nadaljuj"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavitve"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> izvajalca <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se predvaja iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Predvajaj"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Odpri aplikacijo <xliff:g id="APP_LABEL">%1$s</xliff:g>."</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Predvajaj skladbo <xliff:g id="SONG_NAME">%1$s</xliff:g> izvajalca <xliff:g id="ARTIST_NAME">%2$s</xliff:g> iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Predvajaj skladbo <xliff:g id="SONG_NAME">%1$s</xliff:g> iz aplikacije <xliff:g id="APP_LABEL">%2$s</xliff:g>."</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, poglejte aplikacijo"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Napaka, vnovični poskus …"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ni mogoče najti"</string> @@ -1107,8 +1112,8 @@ <string name="controls_error_failed" msgid="960228639198558525">"Napaka, poskusite znova"</string> <string name="controls_in_progress" msgid="4421080500238215939">"V teku"</string> <string name="controls_added_tooltip" msgid="5866098408470111984">"Za ogled novih kontrolnikov odprite hitre nastavitve."</string> - <string name="controls_menu_add" msgid="4447246119229920050">"Dodaj kontrolnike"</string> - <string name="controls_menu_edit" msgid="890623986951347062">"Uredi kontrolnike"</string> + <string name="controls_menu_add" msgid="4447246119229920050">"Dodajte kontrolnike"</string> + <string name="controls_menu_edit" msgid="890623986951347062">"Uredite kontrolnike"</string> <string name="media_output_dialog_add_output" msgid="5642703238877329518">"Dodajanje izhodov"</string> <string name="media_output_dialog_group" msgid="5571251347877452212">"Skupina"</string> <string name="media_output_dialog_single_device" msgid="3102758980643351058">"Izbrana je ena naprava"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index d7a5efa0f4bf..a42e1262bc70 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Eternet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarmi"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Shfaqi të gjitha"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Shkyçe për të paguar"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Nuk është konfiguruar"</string> @@ -745,7 +747,7 @@ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Shfaqet në krye të njoftimeve të bisedës, shfaqet si fotografia e profilit në ekranin e kyçjes dhe ndërpret modalitetin \"Mos shqetëso\""</string> <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shfaqet në krye të njoftimeve të bisedës dhe si fotografia e profilit në ekranin e kyçjes, shfaqet si flluskë dhe ndërpret modalitetin \"Mos shqetëso\""</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cilësimet"</string> - <string name="notification_priority_title" msgid="2079708866333537093">"Përparësia"</string> + <string name="notification_priority_title" msgid="2079708866333537093">"Me përparësi"</string> <string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mbështet veçoritë e bisedës"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string> <string name="notification_multichannel_desc" msgid="7414593090056236179">"Ky grup njoftimesh nuk mund të konfigurohet këtu"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Hiq"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Vazhdo"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Cilësimet"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> nga <xliff:g id="ARTIST_NAME">%2$s</xliff:g> po luhet nga <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Luaj"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Hap <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Luaj <xliff:g id="SONG_NAME">%1$s</xliff:g> nga <xliff:g id="ARTIST_NAME">%2$s</xliff:g> nga <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Luaj <xliff:g id="SONG_NAME">%1$s</xliff:g> nga <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Joaktive, kontrollo aplikacionin"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Gabim, po provohet përsëri"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Nuk u gjet"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 9409e706b5c4..70fcb263ea6b 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -669,6 +669,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Етернет"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Аларм"</string> <string name="wallet_title" msgid="5369767670735827105">"Новчаник"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Обавите конфигурисање да бисте могли брже и сигурније да купујете помоћу телефона"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Прикажи све"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Откључај ради плаћања"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Није подешено"</string> @@ -1011,7 +1012,7 @@ <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">", "</string> <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" и "</string> <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"Користи <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> - <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Недавно користио <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"Недавно користио/ла <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>"</string> <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(посао)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"Телефонски позив"</string> <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(преко: <xliff:g id="APPLICATION_NAME_S_">%s</xliff:g>)"</string> @@ -1090,7 +1091,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Одбаци"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Настави"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Подешавања"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> извођача <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се пушта из апликације <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Пусти"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Отворите <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Пустите <xliff:g id="SONG_NAME">%1$s</xliff:g> извођача <xliff:g id="ARTIST_NAME">%2$s</xliff:g> из апликације <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Пустите <xliff:g id="SONG_NAME">%1$s</xliff:g> из апликације <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно. Видите апликацију"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Грешка, покушава се поново…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Није пронађено"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 598dccbb6cec..623337079e3f 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -117,7 +117,7 @@ <string name="screenrecord_cancel_label" msgid="7850926573274483294">"Avbryt"</string> <string name="screenrecord_share_label" msgid="5025590804030086930">"Dela"</string> <string name="screenrecord_cancel_success" msgid="1775448688137393901">"Skärminspelningen har avbrutits"</string> - <string name="screenrecord_save_title" msgid="1886652605520893850">"Skärminspelningen har sparats"</string> + <string name="screenrecord_save_title" msgid="1886652605520893850">"Skärminspelning sparad"</string> <string name="screenrecord_save_text" msgid="3008973099800840163">"Tryck för att visa"</string> <string name="screenrecord_delete_error" msgid="2870506119743013588">"Det gick inte att radera skärminspelningen"</string> <string name="screenrecord_permission_error" msgid="7856841237023137686">"Behörighet saknas"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Lägg till en betalningsmetod för att betala snabbare och säkrare med telefonen"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Visa alla"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Lås upp för att betala"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Har inte konfigurerats"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Stäng"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Återuppta"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Inställningar"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> med <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spelas upp från <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Spela upp"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Öppna <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Spela upp <xliff:g id="SONG_NAME">%1$s</xliff:g> med <xliff:g id="ARTIST_NAME">%2$s</xliff:g> från <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Spela upp <xliff:g id="SONG_NAME">%1$s</xliff:g> från <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv, kolla appen"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Fel, försöker igen …"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Hittades inte"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index ac8c44f27b6d..f7e50effb982 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethaneti"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Kengele"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Weka njia ya kulipa ili uweze kununua kwa njia salama na haraka zaidi ukitumia simu yako"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Onyesha zote"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Fungua ili ulipe"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Haijawekwa"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Ondoa"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Endelea"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Mipangilio"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ulioimbwa na <xliff:g id="ARTIST_NAME">%2$s</xliff:g> unacheza katika <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Cheza"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Fungua <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Cheza <xliff:g id="SONG_NAME">%1$s</xliff:g> ulioimbwa na <xliff:g id="ARTIST_NAME">%2$s</xliff:g> katika <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Cheza <xliff:g id="SONG_NAME">%1$s</xliff:g> katika <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Haitumiki, angalia programu"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Hitilafu, inajaribu tena…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Hakipatikani"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index c93bdd6f43b1..df52b0ed9fc1 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ஈதர்நெட்"</string> <string name="status_bar_alarm" msgid="87160847643623352">"அலாரம்"</string> <string name="wallet_title" msgid="5369767670735827105">"வாலட்"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"மொபைல் மூலம் விரைவாகவும் பாதுகாப்பாகவும் பர்ச்சேஸ்கள் செய்ய பேமெண்ட் முறையை அமைக்கவும்"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"அனைத்தையும் காட்டு"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"பணம் செலுத்த அன்லாக் செய்க"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"அமைக்கப்படவில்லை"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"மூடுக"</string> <string name="controls_media_resume" msgid="1933520684481586053">"தொடர்க"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"அமைப்புகள்"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> இன் <xliff:g id="SONG_NAME">%1$s</xliff:g> பாடல் <xliff:g id="APP_LABEL">%3$s</xliff:g> ஆப்ஸில் பிளேயாகிறது"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"இயக்குதல்"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> ஆப்ஸைத் திறங்கள்"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> இன் <xliff:g id="SONG_NAME">%1$s</xliff:g> பாடலை <xliff:g id="APP_LABEL">%3$s</xliff:g> ஆப்ஸில் பிளேசெய்"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> பாடலை <xliff:g id="APP_LABEL">%2$s</xliff:g> ஆப்ஸில் பிளேசெய்"</string> <string name="controls_error_timeout" msgid="794197289772728958">"செயலில் இல்லை , சரிபார்க்கவும்"</string> <string name="controls_error_retryable" msgid="864025882878378470">"பிழை, மீண்டும் முயல்கிறது…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"இல்லை"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index ea22e5ba94b7..6a8ffe2a9dbe 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ఈథర్నెట్"</string> <string name="status_bar_alarm" msgid="87160847643623352">"అలారం"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"అన్నింటినీ చూపు"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"పే చేయడానికి అన్లాక్ చేయండి"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"సెటప్ చేయలేదు"</string> @@ -1084,7 +1086,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"విస్మరించు"</string> <string name="controls_media_resume" msgid="1933520684481586053">"కొనసాగించండి"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"సెట్టింగ్లు"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"ప్లే చేయండి"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"ఇన్యాక్టివ్, యాప్ చెక్ చేయండి"</string> <string name="controls_error_retryable" msgid="864025882878378470">"లోపం, మళ్లీ ప్రయత్నిస్తోంది..."</string> <string name="controls_error_removed" msgid="6675638069846014366">"కనుగొనబడలేదు"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index b7a0cc95cbc1..68777123e53b 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -19,7 +19,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4811759950673118541">"ส่วนติดต่อผู้ใช้ของระบบ"</string> + <string name="app_label" msgid="4811759950673118541">"อินเทอร์เฟซผู้ใช้ของระบบ"</string> <string name="status_bar_clear_all_button" msgid="2491321682873657397">"ล้างข้อมูล"</string> <string name="status_bar_no_notifications_title" msgid="7812479124981107507">"ไม่มีการแจ้งเตือน"</string> <string name="status_bar_ongoing_events_title" msgid="3986169317496615446">"ดำเนินอยู่"</string> @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"อีเทอร์เน็ต"</string> <string name="status_bar_alarm" msgid="87160847643623352">"การปลุก"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"ตั้งค่าเพื่อซื้อสินค้าและบริการด้วยโทรศัพท์ได้อย่างรวดเร็วและปลอดภัยยิ่งขึ้น"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"แสดงทั้งหมด"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ปลดล็อกเพื่อชำระเงิน"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"ไม่ได้ตั้งค่า"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"ปิด"</string> <string name="controls_media_resume" msgid="1933520684481586053">"เล่นต่อ"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"การตั้งค่า"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"กำลังเปิดเพลง <xliff:g id="SONG_NAME">%1$s</xliff:g> ของ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> จาก <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"เล่น"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"เปิด <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"เปิดเพลง <xliff:g id="SONG_NAME">%1$s</xliff:g> ของ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> จาก <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"เปิดเพลง <xliff:g id="SONG_NAME">%1$s</xliff:g> จาก <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ไม่มีการใช้งาน โปรดตรวจสอบแอป"</string> <string name="controls_error_retryable" msgid="864025882878378470">"มีข้อผิดพลาด กำลังลองอีกครั้ง…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"ไม่พบ"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index f15e377491c5..8db4e9e76f2a 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"I-set up para makapagsagawa ng mas mabibilis, mas secure na pagbili gamit ang telepono mo"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Ipakita lahat"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"I-unlock para magbayad"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Hindi naka-set up"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"I-dismiss"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Ituloy"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Mga Setting"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Nagpe-play ang <xliff:g id="SONG_NAME">%1$s</xliff:g> ni/ng <xliff:g id="ARTIST_NAME">%2$s</xliff:g> mula sa <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"I-play"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Buksan ang <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"I-play ang <xliff:g id="SONG_NAME">%1$s</xliff:g> ni/ng <xliff:g id="ARTIST_NAME">%2$s</xliff:g> mula sa <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"I-play ang <xliff:g id="SONG_NAME">%1$s</xliff:g> mula sa <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Hindi aktibo, tingnan ang app"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Nagka-error, sinusubukan ulit…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Hindi nahanap"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index ae3d16b8f919..c145645d8712 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> <string name="wallet_title" msgid="5369767670735827105">"Cüzdan"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Telefonunuzla daha hızlı ve güvenli satın alma işlemleri gerçekleştirmek için gerekli ayarları yapın"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Tümünü göster"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Ödeme için kilidi aç"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Ayarlanmadı"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Kapat"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Devam ettir"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> uygulamasından <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, <xliff:g id="SONG_NAME">%1$s</xliff:g> şarkısı çalıyor"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Oynat"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> uygulamasını aç"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g> uygulamasından <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, <xliff:g id="SONG_NAME">%1$s</xliff:g> şarkısını çal"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g> uygulamasından <xliff:g id="SONG_NAME">%1$s</xliff:g> şarkısını çal"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Devre dışı, uygulamaya bakın"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Hata, yeniden deneniyor…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Bulunamadı"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index f1bd9b4347a4..cfba196f37fb 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -672,6 +672,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Сигнал"</string> <string name="wallet_title" msgid="5369767670735827105">"Гаманець"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Швидше й безпечніше сплачуйте за покупки за допомогою телефона"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Показати все"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Розблокувати, щоб сплатити"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Не налаштовано"</string> @@ -1096,7 +1097,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Закрити"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Відновити"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Налаштування"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Пісня \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", яку виконує <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, грає в додатку <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Відтворення"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Відкрити додаток <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Увімкнути пісню \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", яку виконує <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, у додатку <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Увімкнути пісню \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" у додатку <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно, перейдіть у додаток"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Помилка. Повторна спроба…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Не знайдено"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index cf66b91ccd16..35adbd2079a5 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"ایتھرنیٹ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"الارم"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"اپنے فون سے تیز تر مزید محفوظ خریداریاں کرنے کے لیے، سیٹ اپ مکمل کریں"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"سبھی دکھائیں"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"ادائیگی کرنے کے لیے غیر مقفل کریں"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"سیٹ اپ نہیں کیا گیا"</string> @@ -1084,7 +1085,15 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"برخاست کریں"</string> <string name="controls_media_resume" msgid="1933520684481586053">"دوبارہ شروع کریں"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"ترتیبات"</string> + <!-- no translation found for controls_media_playing_item_description (4531853311504359098) --> + <skip /> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"چلائیں"</string> + <!-- no translation found for controls_media_smartspace_rec_description (4136242327044070732) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_description (2189271793070870883) --> + <skip /> + <!-- no translation found for controls_media_smartspace_rec_item_no_artist_description (8703614798636591077) --> + <skip /> <string name="controls_error_timeout" msgid="794197289772728958">"غیر فعال، ایپ چیک کریں"</string> <string name="controls_error_retryable" msgid="864025882878378470">"خرابی، دوبارہ کوشش کی جا رہی ہے…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"نہیں ملا"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 2cd285917b9d..97530bbdbff3 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -666,6 +666,8 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signal"</string> <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <!-- no translation found for wallet_empty_state_label (7776761245237530394) --> + <skip /> <string name="wallet_app_button_label" msgid="7123784239111190992">"Hammasi"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Toʻlov uchun qulfdan chiqarish"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Sozlanmagan"</string> @@ -1084,7 +1086,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Yopish"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Davom etish"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Sozlamalar"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ilovasida ijro etilmoqda: <xliff:g id="SONG_NAME">%1$s</xliff:g> – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Ijro"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> ilovasini ochish"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ilovasida ijro etish: <xliff:g id="SONG_NAME">%1$s</xliff:g> – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g> ilovasida ijro etilmoqda: <xliff:g id="SONG_NAME">%1$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nofaol. Ilovani tekshiring"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Xato, qayta urinilmoqda…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Topilmadi"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 8d90382d702d..88bc5be975df 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Báo thức"</string> <string name="wallet_title" msgid="5369767670735827105">"Ví"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Thiết lập để mua hàng nhanh hơn và an toàn hơn bằng điện thoại"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Hiện tất cả"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Mở khóa để thanh toán"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Chưa thiết lập"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Đóng"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Tiếp tục"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Cài đặt"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Đang phát <xliff:g id="SONG_NAME">%1$s</xliff:g> của <xliff:g id="ARTIST_NAME">%2$s</xliff:g> trên <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Phát"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Mở <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Phát <xliff:g id="SONG_NAME">%1$s</xliff:g> của <xliff:g id="ARTIST_NAME">%2$s</xliff:g> trên <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Phát <xliff:g id="SONG_NAME">%1$s</xliff:g> trên <xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Không hoạt động, hãy kiểm tra ứng dụng"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Lỗi, đang thử lại…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Không tìm thấy"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 19eeb8a97ae9..9272b8adb2c4 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"以太网"</string> <string name="status_bar_alarm" msgid="87160847643623352">"闹钟"</string> <string name="wallet_title" msgid="5369767670735827105">"电子钱包"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"开始设置,享受更加快捷安全的手机购物体验"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"全部显示"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"解锁设备才能付款"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"未设置"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"关闭"</string> <string name="controls_media_resume" msgid="1933520684481586053">"继续播放"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"设置"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在通过<xliff:g id="APP_LABEL">%3$s</xliff:g>播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"播放"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"打开<xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"通过<xliff:g id="APP_LABEL">%3$s</xliff:g>播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"通过<xliff:g id="APP_LABEL">%2$s</xliff:g>播放《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_error_timeout" msgid="794197289772728958">"无效,请检查应用"</string> <string name="controls_error_retryable" msgid="864025882878378470">"出现错误,正在重试…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"未找到"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 481b92c130ca..fff99e4b876f 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"以太網"</string> <string name="status_bar_alarm" msgid="87160847643623352">"鬧鐘"</string> <string name="wallet_title" msgid="5369767670735827105">"電子錢包"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"完成設定後即可透過手機更快速安全地購物"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"顯示全部"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"解鎖裝置才能付款"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"未設定"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"關閉"</string> <string name="controls_media_resume" msgid="1933520684481586053">"繼續播放"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在透過 <xliff:g id="APP_LABEL">%3$s</xliff:g> 播放 <xliff:g id="ARTIST_NAME">%2$s</xliff:g> 的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"播放"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"開啟 <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"在 <xliff:g id="APP_LABEL">%3$s</xliff:g> 播放 <xliff:g id="ARTIST_NAME">%2$s</xliff:g> 的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"在 <xliff:g id="APP_LABEL">%2$s</xliff:g> 播放《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_error_timeout" msgid="794197289772728958">"已停用,請檢查應用程式"</string> <string name="controls_error_retryable" msgid="864025882878378470">"發生錯誤,正在重試…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"找不到"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 58d9231ba96a..8f0a197109cd 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"乙太網路"</string> <string name="status_bar_alarm" msgid="87160847643623352">"鬧鐘"</string> <string name="wallet_title" msgid="5369767670735827105">"電子錢包"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"完成相關設定之後,就能以更快速安全的方式透過手機消費"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"顯示全部"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"解鎖裝置才能付款"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"未設定"</string> @@ -1055,7 +1056,7 @@ <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"從收藏中移除"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"移到位置 <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string> - <string name="controls_favorite_subtitle" msgid="6481675111056961083">"選擇要透過快速設定存取的控制項"</string> + <string name="controls_favorite_subtitle" msgid="6481675111056961083">"選擇要顯示在「快速設定」選單中的控制項"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳即可重新排列控制項"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"所有控制項都已移除"</string> <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未儲存變更"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"關閉"</string> <string name="controls_media_resume" msgid="1933520684481586053">"繼續播放"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"系統正透過「<xliff:g id="APP_LABEL">%3$s</xliff:g>」播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的〈<xliff:g id="SONG_NAME">%1$s</xliff:g>〉"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"播放"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"開啟「<xliff:g id="APP_LABEL">%1$s</xliff:g>」"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"透過「<xliff:g id="APP_LABEL">%3$s</xliff:g>」播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的〈<xliff:g id="SONG_NAME">%1$s</xliff:g>〉"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"透過「<xliff:g id="APP_LABEL">%2$s</xliff:g>」播放〈<xliff:g id="SONG_NAME">%1$s</xliff:g>〉"</string> <string name="controls_error_timeout" msgid="794197289772728958">"無效,請查看應用程式"</string> <string name="controls_error_retryable" msgid="864025882878378470">"發生錯誤,正在重試…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"找不到控制項"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index e4ac66a98b2f..a11c5a82a9a0 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -666,6 +666,7 @@ <string name="status_bar_ethernet" msgid="5690979758988647484">"I-Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"I-alamu"</string> <string name="wallet_title" msgid="5369767670735827105">"I-wallet"</string> + <string name="wallet_empty_state_label" msgid="7776761245237530394">"Lungela ukuthenga ngokushesha, ngokuphepha ngefoni yakho"</string> <string name="wallet_app_button_label" msgid="7123784239111190992">"Bonisa konke"</string> <string name="wallet_action_button_label_unlock" msgid="8663239748726774487">"Vula ukuze ukhokhele"</string> <string name="wallet_secondary_label_no_card" msgid="1282609666895946317">"Akusethiwe"</string> @@ -1084,7 +1085,11 @@ <string name="controls_media_dismiss_button" msgid="9081375542265132213">"Cashisa"</string> <string name="controls_media_resume" msgid="1933520684481586053">"Qalisa kabusha"</string> <string name="controls_media_settings_button" msgid="5815790345117172504">"Izilungiselelo"</string> + <string name="controls_media_playing_item_description" msgid="4531853311504359098">"I-<xliff:g id="SONG_NAME">%1$s</xliff:g> ka-<xliff:g id="ARTIST_NAME">%2$s</xliff:g> idlala kusuka ku-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Dlala"</string> + <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"Vula i-<xliff:g id="APP_LABEL">%1$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"Dlala i-<xliff:g id="SONG_NAME">%1$s</xliff:g> ka-<xliff:g id="ARTIST_NAME">%2$s</xliff:g> kusuka ku-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> + <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"Dlala i-<xliff:g id="SONG_NAME">%1$s</xliff:g> kusuka ku-<xliff:g id="APP_LABEL">%2$s</xliff:g>"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Akusebenzi, hlola uhlelo lokusebenza"</string> <string name="controls_error_retryable" msgid="864025882878378470">"Iphutha, iyazama futhi…"</string> <string name="controls_error_removed" msgid="6675638069846014366">"Ayitholakali"</string> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 1524df25368f..040725e135fd 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1282,7 +1282,7 @@ <dimen name="qs_media_action_spacing">4dp</dimen> <dimen name="qs_media_action_top">8dp</dimen> <dimen name="qs_seamless_height">24dp</dimen> - <dimen name="qs_seamless_icon_size">16dp</dimen> + <dimen name="qs_seamless_icon_size">12dp</dimen> <dimen name="qs_seamless_fallback_icon_size">@dimen/qs_seamless_icon_size</dimen> <dimen name="qs_seamless_fallback_margin">20dp</dimen> <dimen name="qs_footer_horizontal_margin">22dp</dimen> @@ -1292,7 +1292,7 @@ <dimen name="qs_media_disabled_seekbar_vertical_padding">36dp</dimen> <!-- Size of Smartspace media recommendations cards in the QSPanel carousel --> - <dimen name="qs_aa_media_rec_album_size_collapsed">66dp</dimen> + <dimen name="qs_aa_media_rec_album_size_collapsed">72dp</dimen> <dimen name="qs_aa_media_rec_album_size_expanded">80dp</dimen> <dimen name="qs_aa_media_rec_album_margin">8dp</dimen> <dimen name="qq_aa_media_rec_header_text_size">16sp</dimen> diff --git a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java index 92af58eb9af4..08076c17dc3a 100644 --- a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +++ b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java @@ -127,8 +127,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie @Override public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, boolean isStrongBiometric) { + // Strong auth will force the bouncer regardless of a successful face auth if (biometricSourceType == BiometricSourceType.FACE - && mBypassController.canBypass()) { + && mBypassController.canBypass() + && !mKeyguardUpdateMonitor.userNeedsStrongAuth()) { mView.animateDisappear(); } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 92ffb42d7921..ef052c4b81ac 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -288,20 +288,6 @@ public class KeyguardClockSwitch extends RelativeLayout { } /** - * Returns the preferred Y position of the clock. - * - * @param totalHeight Height of the parent container. - * @return preferred Y position. - */ - int getPreferredY(int totalHeight) { - if (mClockPlugin != null) { - return mClockPlugin.getPreferredY(totalHeight); - } else { - return totalHeight / 2; - } - } - - /** * Refresh the time of the clock, due to either time tick broadcast or doze time tick alarm. */ public void refresh() { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index a7239cabcae5..ef6212d4f354 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -257,16 +257,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } /** - * Returns the preferred Y position of the clock. - * - * @param totalHeight The height available to position the clock. - * @return Y position of clock. - */ - public int getClockPreferredY(int totalHeight) { - return mView.getPreferredY(totalHeight); - } - - /** * Refresh clock. Called in response to TIME_TICK broadcasts. */ void refresh() { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java index 32935c293715..123c0e63d7d1 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java @@ -76,7 +76,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mDozeParameters = dozeParameters; mKeyguardStateController = keyguardStateController; mKeyguardVisibilityHelper = new KeyguardVisibilityHelper(mView, keyguardStateController, - dozeParameters, unlockedScreenOffAnimationController); + dozeParameters, unlockedScreenOffAnimationController, /* animateYPos= */ true); mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; mSmartspaceTransitionController = smartspaceTransitionController; @@ -187,16 +187,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV } /** - * Returns the preferred Y position of the clock. - * - * @param totalHeight The height available to position the clock. - * @return Y position of clock. - */ - public int getClockPreferredY(int totalHeight) { - return mKeyguardClockSwitchController.getClockPreferredY(totalHeight); - } - - /** * Get the height of the keyguard status view. */ public int getHeight() { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java index 7edecc80a27e..28a54d56b071 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java @@ -19,6 +19,7 @@ package com.android.keyguard; import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import android.view.View; +import android.view.ViewPropertyAnimator; import com.android.systemui.animation.Interpolators; import com.android.systemui.statusbar.StatusBarState; @@ -40,6 +41,7 @@ public class KeyguardVisibilityHelper { private final KeyguardStateController mKeyguardStateController; private final DozeParameters mDozeParameters; private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; + private boolean mAnimateYPos; private boolean mKeyguardViewVisibilityAnimating; private boolean mLastOccludedState = false; private final AnimationProperties mAnimationProperties = new AnimationProperties(); @@ -47,11 +49,13 @@ public class KeyguardVisibilityHelper { public KeyguardVisibilityHelper(View view, KeyguardStateController keyguardStateController, DozeParameters dozeParameters, - UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) { + UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, + boolean animateYPos) { mView = view; mKeyguardStateController = keyguardStateController; mDozeParameters = dozeParameters; mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; + mAnimateYPos = animateYPos; } public boolean isVisibilityAnimating() { @@ -98,23 +102,25 @@ public class KeyguardVisibilityHelper { } else if (statusBarState == KEYGUARD) { if (keyguardFadingAway) { mKeyguardViewVisibilityAnimating = true; - float target = mView.getY() - mView.getHeight() * 0.05f; - int delay = 0; - int duration = 125; - // We animate the Y properly separately using the PropertyAnimator, as the panel - // view als needs to update the end position. - mAnimationProperties.setDuration(duration).setDelay(delay); - PropertyAnimator.cancelAnimation(mView, AnimatableProperty.Y); - PropertyAnimator.setProperty(mView, AnimatableProperty.Y, target, - mAnimationProperties, - true /* animate */); - mView.animate() + ViewPropertyAnimator animator = mView.animate() .alpha(0) .setInterpolator(Interpolators.FAST_OUT_LINEAR_IN) - .setDuration(duration) - .setStartDelay(delay) - .withEndAction(mAnimateKeyguardStatusViewInvisibleEndRunnable) - .start(); + .withEndAction(mAnimateKeyguardStatusViewInvisibleEndRunnable); + if (mAnimateYPos) { + float target = mView.getY() - mView.getHeight() * 0.05f; + int delay = 0; + int duration = 125; + // We animate the Y property separately using the PropertyAnimator, as the panel + // view also needs to update the end position. + mAnimationProperties.setDuration(duration).setDelay(delay); + PropertyAnimator.cancelAnimation(mView, AnimatableProperty.Y); + PropertyAnimator.setProperty(mView, AnimatableProperty.Y, target, + mAnimationProperties, + true /* animate */); + animator.setDuration(duration) + .setStartDelay(delay); + } + animator.start(); } else if (mLastOccludedState && !isOccluded) { // An activity was displayed over the lock screen, and has now gone away mView.setVisibility(View.VISIBLE); diff --git a/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt b/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt index cdb39ef216bc..5e874ae6f44e 100644 --- a/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt +++ b/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt @@ -21,7 +21,9 @@ import android.animation.AnimatorListenerAdapter import android.animation.TimeInterpolator import android.animation.ValueAnimator import android.graphics.Canvas +import android.graphics.Typeface import android.text.Layout +import android.util.SparseArray private const val TAG_WGHT = "wght" private const val DEFAULT_ANIMATION_DURATION: Long = 300 @@ -72,6 +74,8 @@ class TextAnimator( }) } + private val typefaceCache = SparseArray<Typeface?>() + fun updateLayout(layout: Layout) { textInterpolator.layout = layout } @@ -120,7 +124,12 @@ class TextAnimator( textInterpolator.targetPaint.textSize = textSize } if (weight >= 0) { - textInterpolator.targetPaint.fontVariationSettings = "'$TAG_WGHT' $weight" + // Paint#setFontVariationSettings creates Typeface instance from scratch. To reduce the + // memory impact, cache the typeface result. + textInterpolator.targetPaint.typeface = typefaceCache.getOrElse(weight) { + textInterpolator.targetPaint.fontVariationSettings = "'$TAG_WGHT' $weight" + textInterpolator.targetPaint.typeface + } } if (color != null) { textInterpolator.targetPaint.color = color @@ -155,3 +164,12 @@ class TextAnimator( } } } + +private fun <V> SparseArray<V>.getOrElse(key: Int, defaultValue: () -> V): V { + var v = get(key) + if (v == null) { + v = defaultValue() + put(key, v) + } + return v +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java index 750d42c0a848..980bb12d390c 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java @@ -358,7 +358,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); if (!mIsBouncerVisible) { mInputBouncerHiddenAmount = 1f; + } else if (mKeyguardViewManager.isBouncerShowing()) { + mInputBouncerHiddenAmount = 0f; } + updateAlpha(); updatePauseAuth(); } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 3e5e14095929..da09793580bb 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -512,6 +512,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, lp.windowAnimations = 0; lp.setTitle("NavigationBar" + mContext.getDisplayId()); lp.setFitInsetsTypes(0 /* types */); + lp.setTrustedOverlay(); NavigationBarFrame frame = (NavigationBarFrame) LayoutInflater.from(mContext).inflate( R.layout.navigation_bar_window, null); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 8838d7e5e87a..032f9c4e7581 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -533,16 +533,16 @@ public class EdgeBackGestureHandler extends CurrentUserTracker resources.getDimensionPixelSize(R.dimen.navigation_edge_panel_height), WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); + layoutParams.accessibilityTitle = mContext.getString(R.string.nav_bar_edge_panel); + layoutParams.windowAnimations = 0; layoutParams.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS; layoutParams.setTitle(TAG + mContext.getDisplayId()); - layoutParams.accessibilityTitle = mContext.getString(R.string.nav_bar_edge_panel); - layoutParams.windowAnimations = 0; layoutParams.setFitInsetsTypes(0 /* types */); + layoutParams.setTrustedOverlay(); return layoutParams; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java index f56a2bbefaf7..49d18e62346a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java @@ -20,9 +20,11 @@ import static com.android.systemui.qs.customize.QSCustomizer.EXTRA_QS_CUSTOMIZIN import static com.android.systemui.qs.customize.QSCustomizer.MENU_RESET; import android.content.res.Configuration; +import android.graphics.Rect; import android.os.Bundle; import android.view.MenuItem; import android.view.View; +import android.widget.TextView; import android.widget.Toolbar; import android.widget.Toolbar.OnMenuItemClickListener; @@ -139,6 +141,20 @@ public class QSCustomizerController extends ViewController<QSCustomizer> { RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) { // Do not read row and column every time it changes. } + + public void calculateItemDecorationsForChild(View child, Rect outRect) { + // There's only a single item decoration that cares about the itemOffsets, so + // we just call it manually so they are never cached. This way, it's updated as the + // tiles are moved around. + // It only sets the left and right margin and only cares about tiles (not TextView). + if (!(child instanceof TextView)) { + outRect.setEmpty(); + mTileAdapter.getMarginItemDecoration().getItemOffsets(outRect, child, + recyclerView, new RecyclerView.State()); + ((LayoutParams) child.getLayoutParams()).leftMargin = outRect.left; + ((LayoutParams) child.getLayoutParams()).rightMargin = outRect.right; + } + } }; layout.setSpanSizeLookup(mTileAdapter.getSizeLookup()); recyclerView.setLayoutManager(layout); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index ba65d5163881..5a60d2624a43 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -690,9 +690,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta if (parent.getLayoutManager() == null) return; GridLayoutManager lm = ((GridLayoutManager) parent.getLayoutManager()); - SpanSizeLookup span = lm.getSpanSizeLookup(); - ViewHolder holder = parent.getChildViewHolder(view); - int column = span.getSpanIndex(holder.getBindingAdapterPosition(), lm.getSpanCount()); + int column = ((GridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex(); if (view instanceof TextView) { super.getItemOffsets(outRect, view, parent, state); @@ -702,14 +700,30 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta // columns). outRect.left = mHalfMargin; outRect.right = mHalfMargin; - } else if (column == 0) { - // Leftmost column when not using side margins. Should only have margin on the - // right. - outRect.right = mHalfMargin; } else { - // Rightmost column when not using side margins. Should only have margin on the - // left. - outRect.left = mHalfMargin; + // Leftmost or rightmost column + if (parent.isLayoutRtl()) { + if (column == 0) { + // Rightmost column + outRect.left = mHalfMargin; + outRect.right = 0; + } else { + // Leftmost column + outRect.left = 0; + outRect.right = mHalfMargin; + } + } else { + // Non RTL + if (column == 0) { + // Leftmost column + outRect.left = 0; + outRect.right = mHalfMargin; + } else { + // Rightmost column + outRect.left = mHalfMargin; + outRect.right = 0; + } + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index 30c9b44536e1..d5b4032b1c0f 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -22,6 +22,7 @@ import android.content.ComponentName; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.HardwareRenderer; +import android.graphics.Matrix; import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RenderNode; @@ -31,9 +32,12 @@ import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.text.TextUtils; +import android.transition.Transition; +import android.transition.TransitionListenerAdapter; import android.util.Log; import android.view.ScrollCaptureResponse; import android.view.View; +import android.view.ViewTreeObserver; import android.widget.ImageView; import androidx.constraintlayout.widget.ConstraintLayout; @@ -74,6 +78,7 @@ public class LongScreenshotActivity extends Activity { private ImageView mPreview; private ImageView mTransitionView; + private ImageView mEnterTransitionView; private View mSave; private View mEdit; private View mShare; @@ -111,7 +116,7 @@ public class LongScreenshotActivity extends Activity { public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate(savedInstanceState = " + savedInstanceState + ")"); super.onCreate(savedInstanceState); - + postponeEnterTransition(); setContentView(R.layout.long_screenshot); mPreview = requireViewById(R.id.preview); @@ -122,6 +127,7 @@ public class LongScreenshotActivity extends Activity { mMagnifierView = requireViewById(R.id.magnifier); mCropView.setCropInteractionListener(mMagnifierView); mTransitionView = requireViewById(R.id.transition); + mEnterTransitionView = requireViewById(R.id.enter_transition); mSave.setOnClickListener(this::onClicked); mEdit.setOnClickListener(this::onClicked); @@ -184,8 +190,8 @@ public class LongScreenshotActivity extends Activity { private void onLongScreenshotReceived(LongScreenshot longScreenshot) { Log.d(TAG, "onLongScreenshotReceived(longScreenshot=" + longScreenshot + ")"); mLongScreenshot = longScreenshot; - mPreview.setImageDrawable(mLongScreenshot.getDrawable()); - updateImageDimensions(); + Drawable drawable = mLongScreenshot.getDrawable(); + mPreview.setImageDrawable(drawable); mCropView.setVisibility(View.VISIBLE); mMagnifierView.setDrawable(mLongScreenshot.getDrawable(), mLongScreenshot.getWidth(), mLongScreenshot.getHeight()); @@ -196,9 +202,35 @@ public class LongScreenshotActivity extends Activity { float bottomFraction = Math.min(1f, 1 - (mLongScreenshot.getBottom() - mLongScreenshot.getPageHeight()) / (float) mLongScreenshot.getHeight()); - mCropView.animateBoundaryTo(CropView.CropBoundary.TOP, topFraction); - mCropView.animateBoundaryTo(CropView.CropBoundary.BOTTOM, bottomFraction); - setButtonsEnabled(true); + + mEnterTransitionView.setImageDrawable(drawable); + + mEnterTransitionView.getViewTreeObserver().addOnPreDrawListener( + new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + mEnterTransitionView.getViewTreeObserver().removeOnPreDrawListener(this); + updateImageDimensions(); + startPostponedEnterTransition(); + if (isActivityTransitionRunning()) { + getWindow().getSharedElementEnterTransition().addListener( + new TransitionListenerAdapter() { + @Override + public void onTransitionEnd(Transition transition) { + super.onTransitionEnd(transition); + mPreview.animate().alpha(1f); + mCropView.animateBoundaryTo( + CropView.CropBoundary.TOP, topFraction); + mCropView.animateBoundaryTo( + CropView.CropBoundary.BOTTOM, bottomFraction); + setButtonsEnabled(true); + mEnterTransitionView.setVisibility(View.GONE); + } + }); + } + return true; + } + }); // Immediately export to temp image file for saved state mCacheSaveFuture = mImageExporter.exportAsTempFile(mBackgroundExecutor, @@ -412,22 +444,26 @@ public class LongScreenshotActivity extends Activity { // The image width and height on screen int imageHeight = previewHeight; int imageWidth = previewWidth; + float scale; + int extraPadding = 0; if (imageRatio > viewRatio) { // Image is full width and height is constrained, compute extra padding to inform // CropView imageHeight = (int) (previewHeight * viewRatio / imageRatio); - int extraPadding = (previewHeight - imageHeight) / 2; + extraPadding = (previewHeight - imageHeight) / 2; mCropView.setExtraPadding(extraPadding + mPreview.getPaddingTop(), extraPadding + mPreview.getPaddingBottom()); imageTop += (previewHeight - imageHeight) / 2; mCropView.setExtraPadding(extraPadding, extraPadding); mCropView.setImageWidth(previewWidth); + scale = previewWidth / (float) mPreview.getDrawable().getIntrinsicWidth(); } else { imageWidth = (int) (previewWidth * imageRatio / viewRatio); imageLeft += (previewWidth - imageWidth) / 2; // Image is full height mCropView.setExtraPadding(mPreview.getPaddingTop(), mPreview.getPaddingBottom()); mCropView.setImageWidth((int) (previewHeight * imageRatio)); + scale = previewHeight / (float) mPreview.getDrawable().getIntrinsicHeight(); } // Update transition view's position and scale. @@ -439,5 +475,20 @@ public class LongScreenshotActivity extends Activity { params.width = boundaries.width(); params.height = boundaries.height(); mTransitionView.setLayoutParams(params); + + ConstraintLayout.LayoutParams enterTransitionParams = + (ConstraintLayout.LayoutParams) mEnterTransitionView.getLayoutParams(); + float topFraction = Math.max(0, + -mLongScreenshot.getTop() / (float) mLongScreenshot.getHeight()); + enterTransitionParams.width = (int) (scale * drawable.getIntrinsicWidth()); + enterTransitionParams.height = (int) (scale * mLongScreenshot.getPageHeight()); + mEnterTransitionView.setLayoutParams(enterTransitionParams); + + Matrix matrix = new Matrix(); + matrix.setScale(scale, scale); + matrix.postTranslate(0, -scale * drawable.getIntrinsicHeight() * topFraction); + mEnterTransitionView.setImageMatrix(matrix); + mEnterTransitionView.setTranslationY( + topFraction * previewHeight + mPreview.getPaddingTop() + extraPadding); } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index eaa6659790fa..b1e589f274a4 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -16,7 +16,6 @@ package com.android.systemui.screenshot; -import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; @@ -289,6 +288,7 @@ public class ScreenshotController { mWindowLayoutParams.setTitle("ScreenshotAnimation"); mWindowLayoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + mWindowLayoutParams.setFitInsetsTypes(0); // This is needed to let touches pass through outside the touchable areas mWindowLayoutParams.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY; @@ -402,11 +402,6 @@ public class ScreenshotController { Log.d(TAG, "reloadAssets()"); } - // respect the display cutout in landscape (since we'd otherwise overlap) but not portrait - int orientation = mContext.getResources().getConfiguration().orientation; - mWindowLayoutParams.setFitInsetsTypes( - orientation == ORIENTATION_PORTRAIT ? 0 : WindowInsets.Type.displayCutout()); - // Inflate the screenshot layout mScreenshotView = (ScreenshotView) LayoutInflater.from(mContext).inflate(R.layout.global_screenshot, null); @@ -494,17 +489,6 @@ public class ScreenshotController { saveScreenshot(screenshot, finisher, screenRect, Insets.NONE, true); } - private void updateDisplayCutout() { - // respect the display cutout in landscape (since we'd otherwise overlap) but not portrait - int orientation = mContext.getResources().getConfiguration().orientation; - mWindowLayoutParams.setFitInsetsTypes( - orientation == ORIENTATION_PORTRAIT ? 0 : WindowInsets.Type.displayCutout()); - final View decorView = mWindow.peekDecorView(); - if (decorView != null && decorView.isAttachedToWindow()) { - mWindowManager.updateViewLayout(decorView, mWindowLayoutParams); - } - } - private void saveScreenshot(Bitmap screenshot, Consumer<Uri> finisher, Rect screenRect, Insets screenInsets, boolean showFlash) { if (mAccessibilityManager.isEnabled()) { @@ -528,8 +512,8 @@ public class ScreenshotController { mScreenshotView.reset(); } - int orientation = mContext.getResources().getConfiguration().orientation; - mScreenshotView.updateOrientation(orientation == ORIENTATION_PORTRAIT); + mScreenshotView.updateOrientation(mWindowManager.getCurrentWindowMetrics() + .getWindowInsets().getDisplayCutout()); mScreenBitmap = screenshot; @@ -563,7 +547,9 @@ public class ScreenshotController { // Delay scroll capture eval a bit to allow the underlying activity // to set up in the new orientation. mScreenshotHandler.postDelayed(this::requestScrollCapture, 150); - updateDisplayCutout(); + mScreenshotView.updateDisplayCutoutMargins( + mWindowManager.getCurrentWindowMetrics().getWindowInsets() + .getDisplayCutout()); } }); }); @@ -612,7 +598,7 @@ public class ScreenshotController { // No connection means that the target window wasn't found // or that it cannot support scroll capture. Log.d(TAG, "ScrollCapture: " + mLastScrollCaptureResponse.getDescription() + " [" - + mLastScrollCaptureResponse.getWindowTitle() + "]"); + + mLastScrollCaptureResponse.getWindowTitle() + "]"); return; } Log.d(TAG, "ScrollCapture: connected to window [" @@ -620,6 +606,7 @@ public class ScreenshotController { final ScrollCaptureResponse response = mLastScrollCaptureResponse; mScreenshotView.showScrollChip(/* onClick */ () -> { + mScreenshotView.prepareScrollingTransition(response, mScreenBitmap); // Clear the reference to prevent close() in dismissScreenshot mLastScrollCaptureResponse = null; final ListenableFuture<ScrollCaptureController.LongScreenshot> future = @@ -637,9 +624,14 @@ public class ScreenshotController { final Intent intent = new Intent(mContext, LongScreenshotActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - mContext.startActivity(intent); - dismissScreenshot(false); + Pair<ActivityOptions, ExitTransitionCoordinator> transition = + ActivityOptions.startSharedElementAnimation( + mWindow, new ScreenshotExitTransitionCallbacks(), null, + Pair.create(mScreenshotView.getScrollablePreview(), + ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME)); + transition.second.startExit(); + mContext.startActivity(intent, transition.first.toBundle()); }, mMainExecutor); }); } catch (CancellationException e) { @@ -663,7 +655,8 @@ public class ScreenshotController { } @Override - public void onWindowDetached() { } + public void onWindowDetached() { + } }); } @@ -861,24 +854,9 @@ public class ScreenshotController { */ private Supplier<ActionTransition> getActionTransitionSupplier() { return () -> { - ExitTransitionCallbacks cb = new ExitTransitionCallbacks() { - @Override - public boolean isReturnTransitionAllowed() { - return false; - } - - @Override - public void hideSharedElements() { - finishDismiss(); - } - - @Override - public void onFinish() { - } - }; - Pair<ActivityOptions, ExitTransitionCoordinator> transition = - ActivityOptions.startSharedElementAnimation(mWindow, cb, null, + ActivityOptions.startSharedElementAnimation( + mWindow, new ScreenshotExitTransitionCallbacks(), null, Pair.create(mScreenshotView.getScreenshotPreview(), ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME)); transition.second.startExit(); @@ -964,4 +942,20 @@ public class ScreenshotController { } return matchWithinTolerance; } + + private class ScreenshotExitTransitionCallbacks implements ExitTransitionCallbacks { + @Override + public boolean isReturnTransitionAllowed() { + return false; + } + + @Override + public void hideSharedElements() { + finishDismiss(); + } + + @Override + public void onFinish() { + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index 77e1d154f3ac..c33c2dbc16a0 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -40,6 +40,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Insets; +import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region; @@ -54,9 +55,11 @@ import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.util.MathUtils; +import android.view.DisplayCutout; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; +import android.view.ScrollCaptureResponse; import android.view.TouchDelegate; import android.view.View; import android.view.ViewGroup; @@ -71,6 +74,8 @@ import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; +import androidx.constraintlayout.widget.ConstraintLayout; + import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; import com.android.systemui.screenshot.ScreenshotController.SavedImageData.ActionTransition; @@ -125,9 +130,11 @@ public class ScreenshotView extends FrameLayout implements private boolean mDirectionLTR; private ScreenshotSelectorView mScreenshotSelectorView; + private ImageView mScrollingScrim; private View mScreenshotStatic; private ImageView mScreenshotPreview; private View mScreenshotPreviewBorder; + private ImageView mScrollablePreview; private ImageView mScreenshotFlash; private ImageView mActionsContainerBackground; private HorizontalScrollView mActionsContainer; @@ -266,6 +273,7 @@ public class ScreenshotView extends FrameLayout implements @Override // View protected void onFinishInflate() { + mScrollingScrim = requireNonNull(findViewById(R.id.screenshot_scrolling_scrim)); mScreenshotStatic = requireNonNull(findViewById(R.id.global_screenshot_static)); mScreenshotPreview = requireNonNull(findViewById(R.id.global_screenshot_preview)); mScreenshotPreviewBorder = requireNonNull( @@ -279,6 +287,7 @@ public class ScreenshotView extends FrameLayout implements mBackgroundProtection = requireNonNull( findViewById(R.id.global_screenshot_actions_background)); mDismissButton = requireNonNull(findViewById(R.id.global_screenshot_dismiss_button)); + mScrollablePreview = requireNonNull(findViewById(R.id.screenshot_scrollable_preview)); mScreenshotFlash = requireNonNull(findViewById(R.id.global_screenshot_flash)); mScreenshotSelectorView = requireNonNull(findViewById(R.id.global_screenshot_selector)); mShareChip = requireNonNull(mActionsContainer.findViewById(R.id.screenshot_share_chip)); @@ -327,6 +336,10 @@ public class ScreenshotView extends FrameLayout implements return mScreenshotPreview; } + View getScrollablePreview() { + return mScrollablePreview; + } + /** * Set up the logger and callback on dismissal. * @@ -348,12 +361,35 @@ public class ScreenshotView extends FrameLayout implements mScreenshotPreview.setImageDrawable(createScreenDrawable(mResources, bitmap, screenInsets)); } - void updateOrientation(boolean portrait) { - mOrientationPortrait = portrait; + void updateDisplayCutoutMargins(DisplayCutout cutout) { + int orientation = mContext.getResources().getConfiguration().orientation; + mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT); + FrameLayout.LayoutParams p = + (FrameLayout.LayoutParams) mScreenshotStatic.getLayoutParams(); + if (cutout == null) { + p.setMargins(0, 0, 0, 0); + } else { + Insets waterfall = cutout.getWaterfallInsets(); + if (mOrientationPortrait) { + p.setMargins(waterfall.left, Math.max(cutout.getSafeInsetTop(), waterfall.top), + waterfall.right, Math.max(cutout.getSafeInsetBottom(), waterfall.bottom)); + } else { + p.setMargins(Math.max(cutout.getSafeInsetLeft(), waterfall.left), waterfall.top, + Math.max(cutout.getSafeInsetRight(), waterfall.right), waterfall.bottom); + } + } + mScreenshotStatic.setLayoutParams(p); + mScreenshotStatic.requestLayout(); + } + + void updateOrientation(DisplayCutout cutout) { + int orientation = mContext.getResources().getConfiguration().orientation; + mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT); + updateDisplayCutoutMargins(cutout); int screenshotFixedSize = mContext.getResources().getDimensionPixelSize(R.dimen.global_screenshot_x_scale); ViewGroup.LayoutParams params = mScreenshotPreview.getLayoutParams(); - if (portrait) { + if (mOrientationPortrait) { params.width = screenshotFixedSize; params.height = LayoutParams.WRAP_CONTENT; mScreenshotPreview.setScaleType(ImageView.ScaleType.FIT_START); @@ -362,6 +398,7 @@ public class ScreenshotView extends FrameLayout implements params.height = screenshotFixedSize; mScreenshotPreview.setScaleType(ImageView.ScaleType.FIT_END); } + mScreenshotPreview.setLayoutParams(params); } @@ -676,6 +713,38 @@ public class ScreenshotView extends FrameLayout implements } } + private Rect scrollableAreaOnScreen(ScrollCaptureResponse response) { + Rect r = new Rect(response.getBoundsInWindow()); + Rect windowInScreen = response.getWindowBounds(); + r.offset(windowInScreen.left, windowInScreen.top); + r.intersect(new Rect(0, 0, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels)); + return r; + } + + void prepareScrollingTransition(ScrollCaptureResponse response, Bitmap screenBitmap) { + Rect scrollableArea = scrollableAreaOnScreen(response); + float scale = mCornerSizeX + / (mOrientationPortrait ? screenBitmap.getWidth() : screenBitmap.getHeight()); + ConstraintLayout.LayoutParams params = + (ConstraintLayout.LayoutParams) mScrollablePreview.getLayoutParams(); + + params.width = (int) (scale * scrollableArea.width()); + params.height = (int) (scale * scrollableArea.height()); + Matrix matrix = new Matrix(); + matrix.setScale(scale, scale); + matrix.postTranslate(0, -scrollableArea.top * scale); + + mScrollablePreview.setTranslationX(scale * scrollableArea.left); + mScrollablePreview.setTranslationY(scale * scrollableArea.top); + mScrollablePreview.setImageMatrix(matrix); + + mScrollingScrim.setImageBitmap(screenBitmap); + mScrollingScrim.setVisibility(View.VISIBLE); + mScrollablePreview.setImageBitmap(screenBitmap); + mScrollablePreview.setVisibility(View.VISIBLE); + createScreenshotFadeDismissAnimation(true).start(); + } + boolean isDismissing() { return (mDismissAnimation != null && mDismissAnimation.isRunning()); } @@ -776,7 +845,7 @@ public class ScreenshotView extends FrameLayout implements transition.action.actionIntent.send(); // fade out non-preview UI - createScreenshotFadeDismissAnimation().start(); + createScreenshotFadeDismissAnimation(false).start(); } catch (PendingIntent.CanceledException e) { mPendingSharedTransition = false; if (transition.onCancelRunnable != null) { @@ -814,7 +883,7 @@ public class ScreenshotView extends FrameLayout implements return animSet; } - private ValueAnimator createScreenshotFadeDismissAnimation() { + ValueAnimator createScreenshotFadeDismissAnimation(boolean fadePreview) { ValueAnimator alphaAnim = ValueAnimator.ofFloat(0, 1); alphaAnim.addUpdateListener(animation -> { float alpha = 1 - animation.getAnimatedFraction(); @@ -822,6 +891,10 @@ public class ScreenshotView extends FrameLayout implements mActionsContainerBackground.setAlpha(alpha); mActionsContainer.setAlpha(alpha); mBackgroundProtection.setAlpha(alpha); + mScreenshotPreviewBorder.setAlpha(alpha); + if (fadePreview) { + mScreenshotPreview.setAlpha(alpha); + } }); alphaAnim.setDuration(600); return alphaAnim; diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java index 2863074bee0a..94e314948779 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java @@ -405,6 +405,10 @@ public class ScrollCaptureClient { return new Rect(mWindowBounds); } + public Rect getBoundsInWindow() { + return new Rect(mBoundsInWindow); + } + @Override public int getMaxTiles() { return mMaxTiles; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java index ca81a7b43df6..0b67e7eeb132 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java @@ -221,12 +221,10 @@ public class NotificationRemoteInputManager implements Dumpable { buttonIndex = actionGroup.indexOfChild(view); } final int count = mEntryManager.getActiveNotificationsCount(); - final int rank = mEntryManager - .getActiveNotificationUnfiltered(key).getRanking().getRank(); + final int rank = entry.getRanking().getRank(); NotificationVisibility.NotificationLocation location = - NotificationLogger.getNotificationLocation( - mEntryManager.getActiveNotificationUnfiltered(key)); + NotificationLogger.getNotificationLocation(entry); final NotificationVisibility nv = NotificationVisibility.obtain(key, rank, count, true, location); mClickNotifier.onNotificationActionClick(key, buttonIndex, action, nv, false); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java index 3190927dc24a..763d197847c3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java @@ -488,7 +488,8 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { @Override public void setLayerType(int layerType, Paint paint) { - if (hasOverlappingRendering()) { + // Allow resetting the layerType to NONE regardless of overlappingRendering + if (layerType == LAYER_TYPE_NONE || hasOverlappingRendering()) { super.setLayerType(layerType, paint); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java index 7c2723d724ce..3e4177d32a34 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java @@ -24,7 +24,6 @@ import android.content.res.Resources; import android.util.MathUtils; import com.android.keyguard.KeyguardStatusView; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherListView; @@ -64,11 +63,6 @@ public class KeyguardClockPositionAlgorithm { private int mUserSwitchHeight; /** - * Preferred Y position of clock. - */ - private int mClockPreferredY; - - /** * Preferred Y position of user avatar used by the multi-user switcher. */ private int mUserSwitchPreferredY; @@ -153,8 +147,6 @@ public class KeyguardClockPositionAlgorithm { */ private int mUnlockedStackScrollerPadding; - private int mLockScreenMode; - private boolean mIsSplitShade; /** @@ -179,8 +171,8 @@ public class KeyguardClockPositionAlgorithm { */ public void setup(int keyguardStatusBarHeaderHeight, int maxShadeBottom, int notificationStackHeight, float panelExpansion, int parentHeight, - int keyguardStatusHeight, int userSwitchHeight, int clockPreferredY, - int userSwitchPreferredY, boolean hasCustomClock, boolean hasVisibleNotifs, float dark, + int keyguardStatusHeight, int userSwitchHeight, int userSwitchPreferredY, + boolean hasCustomClock, boolean hasVisibleNotifs, float dark, float overStrechAmount, boolean bypassEnabled, int unlockedStackScrollerPadding, float qsExpansion, int cutoutTopInset, boolean isSplitShade) { mMinTopMargin = keyguardStatusBarHeaderHeight + Math.max(mContainerTopPadding, @@ -191,7 +183,6 @@ public class KeyguardClockPositionAlgorithm { mHeight = parentHeight; mKeyguardStatusHeight = keyguardStatusHeight; mUserSwitchHeight = userSwitchHeight; - mClockPreferredY = clockPreferredY; mUserSwitchPreferredY = userSwitchPreferredY; mHasCustomClock = hasCustomClock; mHasVisibleNotifs = hasVisibleNotifs; @@ -228,13 +219,6 @@ public class KeyguardClockPositionAlgorithm { } } - /** - * Update lock screen mode for testing different layouts - */ - public void onLockScreenModeChanged(int mode) { - mLockScreenMode = mode; - } - public float getMinStackScrollerPadding() { return mBypassEnabled ? mUnlockedStackScrollerPadding : mMinTopMargin + mKeyguardStatusHeight + mClockNotificationsMargin; @@ -245,11 +229,7 @@ public class KeyguardClockPositionAlgorithm { } private int getExpandedPreferredClockY() { - if (mLockScreenMode != KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL) { - return mMinTopMargin + mUserSwitchHeight; - } - return (mHasCustomClock && (!mHasVisibleNotifs || mBypassEnabled)) ? mClockPreferredY - : getExpandedClockPosition(); + return mMinTopMargin + mUserSwitchHeight; } /** @@ -278,29 +258,20 @@ public class KeyguardClockPositionAlgorithm { } private int getClockY(float panelExpansion, float darkAmount) { - // Dark: Align the bottom edge of the clock at about half of the screen: - float clockYDark = (mHasCustomClock ? mClockPreferredY : getMaxClockY()) - + burnInPreventionOffsetY(); - clockYDark = MathUtils.max(0, clockYDark); - float clockYRegular = getExpandedPreferredClockY(); float clockYBouncer = -mKeyguardStatusHeight; // Move clock up while collapsing the shade float shadeExpansion = Interpolators.FAST_OUT_LINEAR_IN.getInterpolation(panelExpansion); float clockY = MathUtils.lerp(clockYBouncer, clockYRegular, shadeExpansion); - clockYDark = MathUtils.lerp(clockYBouncer, clockYDark, shadeExpansion); - - darkAmount = mBypassEnabled && !mHasCustomClock ? 1.0f : darkAmount; - if (mLockScreenMode != KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL) { - // This will keep the clock at the top but out of the cutout area - float shift = 0; - if (clockY - mBurnInPreventionOffsetYLargeClock < mCutoutTopInset) { - shift = mCutoutTopInset - (clockY - mBurnInPreventionOffsetYLargeClock); - } - clockYDark = clockY + burnInPreventionOffsetY() + shift; + // This will keep the clock at the top but out of the cutout area + float shift = 0; + if (clockY - mBurnInPreventionOffsetYLargeClock < mCutoutTopInset) { + shift = mCutoutTopInset - (clockY - mBurnInPreventionOffsetYLargeClock); } + float clockYDark = clockY + burnInPreventionOffsetY() + shift; + return (int) (MathUtils.lerp(clockY, clockYDark, darkAmount) + mOverStretchAmount); } @@ -333,19 +304,12 @@ public class KeyguardClockPositionAlgorithm { } private float burnInPreventionOffsetY() { - int offset = mBurnInPreventionOffsetY; - if (mLockScreenMode != KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL) { - offset = mBurnInPreventionOffsetYLargeClock; - } + int offset = mBurnInPreventionOffsetYLargeClock; return getBurnInOffset(offset * 2, false /* xAxis */) - offset; } private float burnInPreventionOffsetX() { - if (mLockScreenMode == KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL) { - return getBurnInOffset(mBurnInPreventionOffsetX * 2, true /* xAxis */) - - mBurnInPreventionOffsetX; - } return getBurnInOffset(mBurnInPreventionOffsetX, true /* xAxis */); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 20f3fc955ba5..32e3eb0d2bbd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -254,12 +254,6 @@ public class NotificationPanelViewController extends PanelViewController { new KeyguardUpdateMonitorCallback() { @Override - public void onLockScreenModeChanged(int mode) { - mLockScreenMode = mode; - mClockPositionAlgorithm.onLockScreenModeChanged(mode); - } - - @Override public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, boolean isStrongBiometric) { @@ -594,7 +588,6 @@ public class NotificationPanelViewController extends PanelViewController { private final Executor mUiExecutor; private final SecureSettings mSecureSettings; - private int mLockScreenMode = KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL; private KeyguardMediaController mKeyguardMediaController; private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() { @@ -1235,7 +1228,6 @@ public class NotificationPanelViewController extends PanelViewController { private void updateClockAppearance() { int totalHeight = mView.getHeight(); int bottomPadding = Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding); - int clockPreferredY = mKeyguardStatusViewController.getClockPreferredY(totalHeight); int userSwitcherPreferredY = mStatusBarHeaderHeightKeyguard; boolean bypassEnabled = mKeyguardBypassController.getBypassEnabled(); final boolean hasVisibleNotifications = mNotificationStackScrollLayoutController @@ -1254,12 +1246,9 @@ public class NotificationPanelViewController extends PanelViewController { mNotificationStackScrollLayoutController.getIntrinsicContentHeight(), expandedFraction, totalHeight, - mLockScreenMode == KeyguardUpdateMonitor.LOCK_SCREEN_MODE_LAYOUT_1 - ? mKeyguardStatusViewController.getHeight() - : (int) (mKeyguardStatusViewController.getHeight() - - mShelfHeight / 2.0f - mDarkIconSize / 2.0f), + mKeyguardStatusViewController.getHeight(), userIconHeight, - clockPreferredY, userSwitcherPreferredY, hasCustomClock(), + userSwitcherPreferredY, hasCustomClock(), hasVisibleNotifications, darkamount, mOverStretchAmount, bypassEnabled, getUnlockedStackScrollerPadding(), computeQsExpansionFraction(), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index c34eadfb5a3c..ed3564879eae 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3521,10 +3521,10 @@ public class StatusBar extends SystemUI implements DemoMode, public void fadeKeyguardWhilePulsing() { mNotificationPanelViewController.fadeOut(0, FADE_KEYGUARD_DURATION_PULSING, ()-> { - hideKeyguard(); if (shouldShowCircleReveal()) { startCircleReveal(); } + hideKeyguard(); mStatusBarKeyguardViewManager.onKeyguardFadedAway(); }).start(); } @@ -3882,9 +3882,7 @@ public class StatusBar extends SystemUI implements DemoMode, updateQsExpansionEnabled(); mKeyguardViewMediator.setDozing(mDozing); - if (!isDozing && shouldShowCircleReveal()) { - startCircleReveal(); - } else if ((isDozing && mWakefulnessLifecycle.getLastSleepReason() + if ((isDozing && mWakefulnessLifecycle.getLastSleepReason() == PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON) || (!isDozing && mWakefulnessLifecycle.getLastWakeReason() == PowerManager.WAKE_REASON_POWER_BUTTON)) { @@ -4460,7 +4458,6 @@ public class StatusBar extends SystemUI implements DemoMode, } else { mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); } - updateLightRevealScrimVisibility(); Trace.endSection(); } @@ -4895,15 +4892,9 @@ public class StatusBar extends SystemUI implements DemoMode, return; } - if (mDozeServiceHost.isPulsing()) { - mLightRevealScrim.setVisibility(View.GONE); - return; - } - if (mFeatureFlags.useNewLockscreenAnimations() && (mDozeParameters.getAlwaysOn() || mDozeParameters.isQuickPickupEnabled())) { mLightRevealScrim.setVisibility(View.VISIBLE); - mLightRevealScrim.setRevealEffect(LiftReveal.INSTANCE); } else { mLightRevealScrim.setVisibility(View.GONE); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java index 2ecd4b3db5a1..1f1817cd29f0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java @@ -137,7 +137,8 @@ public class KeyguardQsUserSwitchController extends ViewController<UserAvatarVie mConfigurationController = configurationController; mStatusBarStateController = statusBarStateController; mKeyguardVisibilityHelper = new KeyguardVisibilityHelper(mView, - keyguardStateController, dozeParameters, unlockedScreenOffAnimationController); + keyguardStateController, dozeParameters, + unlockedScreenOffAnimationController, /* animateYPos= */ false); mUserDetailAdapter = new KeyguardUserDetailAdapter(context, userDetailViewAdapterProvider); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java index 68f2a62a4fec..43b2061ecd32 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java @@ -173,7 +173,8 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS mAdapter = new KeyguardUserAdapter(mContext, resources, layoutInflater, mUserSwitcherController, this); mKeyguardVisibilityHelper = new KeyguardVisibilityHelper(mView, - keyguardStateController, dozeParameters, unlockedScreenOffAnimationController); + keyguardStateController, dozeParameters, + unlockedScreenOffAnimationController, /* animateYPos= */ false); mBackground = new KeyguardUserSwitcherScrim(context); } diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index 428921ee34ec..ca1f55e95ff4 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java @@ -240,11 +240,14 @@ public class ThemeOverlayController extends SystemUI implements Dumpable { private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (Intent.ACTION_USER_STARTED.equals(intent.getAction()) - || Intent.ACTION_MANAGED_PROFILE_ADDED.equals(intent.getAction())) { - if (!mDeviceProvisionedController.isCurrentUserSetup()) { + boolean newWorkProfile = Intent.ACTION_MANAGED_PROFILE_ADDED.equals(intent.getAction()); + boolean userStarted = Intent.ACTION_USER_STARTED.equals(intent.getAction()); + boolean isManagedProfile = mUserManager.isManagedProfile( + intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0)); + if (userStarted || newWorkProfile) { + if (!mDeviceProvisionedController.isCurrentUserSetup() && isManagedProfile) { Log.i(TAG, "User setup not finished when " + intent.getAction() - + " was received. Deferring..."); + + " was received. Deferring... Managed profile? " + isManagedProfile); return; } if (DEBUG) Log.d(TAG, "Updating overlays for user switch / profile added."); @@ -326,17 +329,22 @@ public class ThemeOverlayController extends SystemUI implements Dumpable { Runnable updateColors = () -> { WallpaperColors systemColor = mWallpaperManager.getWallpaperColors( getLatestWallpaperType()); - mMainExecutor.execute(() -> { + Runnable applyColors = () -> { if (DEBUG) Log.d(TAG, "Boot colors: " + systemColor); mCurrentColors = systemColor; reevaluateSystemTheme(false /* forceReload */); - }); + }; + if (mDeviceProvisionedController.isCurrentUserSetup()) { + mMainExecutor.execute(applyColors); + } else { + applyColors.run(); + } }; // Whenever we're going directly to setup wizard, we need to process colors synchronously, // otherwise we'll see some jank when the activity is recreated. if (!mDeviceProvisionedController.isCurrentUserSetup()) { - mMainExecutor.execute(updateColors); + updateColors.run(); } else { mBgExecutor.execute(updateColors); } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 961822a598e7..228b9c3da319 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -932,6 +932,13 @@ public class VolumeDialogImpl implements VolumeDialog, .start(); } + // When the ringer drawer is open, tapping the currently selected ringer will set the ringer + // to the current ringer mode. Change the content description to that, instead of the 'tap + // to change ringer mode' default. + mSelectedRingerContainer.setContentDescription( + mContext.getString(getStringDescriptionResourceForRingerMode( + mState.ringerModeInternal))); + mIsRingerDrawerOpen = true; } @@ -976,6 +983,11 @@ public class VolumeDialogImpl implements VolumeDialog, .translationY(0f) .start(); + // When the drawer is closed, tapping the selected ringer drawer will open it, allowing the + // user to change the ringer. + mSelectedRingerContainer.setContentDescription( + mContext.getString(R.string.volume_ringer_change)); + mIsRingerDrawerOpen = false; } @@ -1464,20 +1476,8 @@ public class VolumeDialogImpl implements VolumeDialog, } private void addAccessibilityDescription(View view, int currState, String hintLabel) { - int currStateResId; - switch (currState) { - case RINGER_MODE_SILENT: - currStateResId = R.string.volume_ringer_status_silent; - break; - case RINGER_MODE_VIBRATE: - currStateResId = R.string.volume_ringer_status_vibrate; - break; - case RINGER_MODE_NORMAL: - default: - currStateResId = R.string.volume_ringer_status_normal; - } - - view.setContentDescription(mContext.getString(currStateResId)); + view.setContentDescription( + mContext.getString(getStringDescriptionResourceForRingerMode(currState))); view.setAccessibilityDelegate(new AccessibilityDelegate() { public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); @@ -1487,6 +1487,18 @@ public class VolumeDialogImpl implements VolumeDialog, }); } + private int getStringDescriptionResourceForRingerMode(int mode) { + switch (mode) { + case RINGER_MODE_SILENT: + return R.string.volume_ringer_status_silent; + case RINGER_MODE_VIBRATE: + return R.string.volume_ringer_status_vibrate; + case RINGER_MODE_NORMAL: + default: + return R.string.volume_ringer_status_normal; + } + } + /** * Toggles enable state of views in a VolumeRow (not including seekbar or icon) * Hides/shows zen icon diff --git a/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt index ad7f0cbe1e3a..3322414e9e7a 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt @@ -18,12 +18,14 @@ package com.android.keyguard import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator +import android.graphics.Typeface import android.testing.AndroidTestingRunner import android.text.Layout import android.text.StaticLayout import android.text.TextPaint import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor @@ -140,4 +142,41 @@ class TextAnimatorTest : SysuiTestCase() { verify(animationEndCallback).run() verify(valueAnimator).removeListener(eq(captor.value)) } + + @Test + fun testCacheTypeface() { + val layout = makeLayout("Hello, World", PAINT) + val valueAnimator = mock(ValueAnimator::class.java) + val textInterpolator = mock(TextInterpolator::class.java) + val paint = TextPaint().apply { + typeface = Typeface.createFromFile("/system/fonts/Roboto-Regular.ttf") + } + `when`(textInterpolator.targetPaint).thenReturn(paint) + + val textAnimator = TextAnimator(layout, {}).apply { + this.textInterpolator = textInterpolator + this.animator = valueAnimator + } + + textAnimator.setTextStyle( + weight = 400, + animate = true + ) + + val prevTypeface = paint.typeface + + textAnimator.setTextStyle( + weight = 700, + animate = true + ) + + assertThat(paint.typeface).isNotSameInstanceAs(prevTypeface) + + textAnimator.setTextStyle( + weight = 400, + animate = true + ) + + assertThat(paint.typeface).isSameInstanceAs(prevTypeface) + } } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt index 149e179de5a6..e42d537596c5 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt @@ -18,6 +18,9 @@ package com.android.keyguard import android.graphics.Bitmap import android.graphics.Canvas +import android.graphics.Typeface +import android.graphics.fonts.Font +import android.graphics.fonts.FontFamily import android.testing.AndroidTestingRunner import android.text.Layout import android.text.StaticLayout @@ -29,6 +32,7 @@ import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith +import java.io.File import kotlin.math.ceil private const val TEXT = "Hello, World." @@ -36,16 +40,24 @@ private const val BIDI_TEXT = "abc\u05D0\u05D1\u05D2" private const val BMP_WIDTH = 400 private const val BMP_HEIGHT = 300 +// Due to b/189235998 the weight 400 of the default font is no longer variable font. To be able to +// test variable behavior, create the interpolatable typefaces with manually here. +private val VF_FONT = Font.Builder(File("/system/fonts/Roboto-Regular.ttf")).build() + +private fun Font.toTypeface() = + Typeface.CustomFallbackBuilder(FontFamily.Builder(this).build()).build() + private val PAINT = TextPaint().apply { + typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface() textSize = 32f } private val START_PAINT = TextPaint(PAINT).apply { - fontVariationSettings = "'wght' 400" + typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface() } private val END_PAINT = TextPaint(PAINT).apply { - fontVariationSettings = "'wght' 700" + typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 700").build().toTypeface() } @RunWith(AndroidTestingRunner::class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 152ba90858d6..226c4668ba55 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -33,7 +33,6 @@ import org.junit.runner.RunWith; public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { private static final int SCREEN_HEIGHT = 2000; - private static final int PREFERRED_CLOCK_Y = SCREEN_HEIGHT / 2; private static final int EMPTY_MARGIN = 0; private static final int EMPTY_HEIGHT = 0; private static final float ZERO_DRAG = 0.f; @@ -48,7 +47,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { private float mPanelExpansion; private int mKeyguardStatusHeight; private float mDark; - private int mPreferredClockY; private boolean mHasCustomClock; private boolean mHasVisibleNotifs; private float mQsExpansion; @@ -60,21 +58,36 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mClockPositionAlgorithm = new KeyguardClockPositionAlgorithm(); mClockPosition = new KeyguardClockPositionAlgorithm.Result(); - mPreferredClockY = PREFERRED_CLOCK_Y; mHasCustomClock = HAS_CUSTOM_CLOCK; mHasVisibleNotifs = HAS_VISIBLE_NOTIFS; } @Test - public void clockPositionMiddleOfScreenOnAOD() { + public void clockPositionTopOfScreenOnAOD() { // GIVEN on AOD and both stack scroll and clock have 0 height givenAOD(); mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the clock position algorithm is run positionClock(); - // THEN the clock Y position is the middle of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.clockY).isEqualTo(1000); + // THEN the clock Y position is the top of the screen + assertThat(mClockPosition.clockY).isEqualTo(0); + // AND the clock is opaque and positioned on the left. + assertThat(mClockPosition.clockX).isEqualTo(0); + assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); + } + + @Test + public void clockPositionBelowCutout() { + // GIVEN on AOD and both stack scroll and clock have 0 height + givenAOD(); + mNotificationStackHeight = EMPTY_HEIGHT; + mKeyguardStatusHeight = EMPTY_HEIGHT; + mCutoutTopInset = 300; + // WHEN the clock position algorithm is run + positionClock(); + // THEN the clock Y position is below the cutout + assertThat(mClockPosition.clockY).isEqualTo(300); // AND the clock is opaque and positioned on the left. assertThat(mClockPosition.clockX).isEqualTo(0); assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); @@ -88,8 +101,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = 100; // WHEN the clock position algorithm is run positionClock(); - // THEN the clock Y position adjusts for the clock height (SCREEN_HEIGHT / 2 - 100). - assertThat(mClockPosition.clockY).isEqualTo(900); + // THEN the clock Y position is at the top + assertThat(mClockPosition.clockY).isEqualTo(0); // AND the clock is opaque and positioned on the left. assertThat(mClockPosition.clockX).isEqualTo(0); assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); @@ -111,18 +124,17 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void clockPositionMiddleOfScreenOnLockScreen() { + public void clockPositionTopOfScreenOnLockScreen() { // GIVEN on lock screen with stack scroll and clock of 0 height givenLockScreen(); mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the clock position algorithm is run positionClock(); - // THEN the clock Y position is the middle of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.clockY).isEqualTo(1000); - // AND the clock is opaque and positioned on the left. + // THEN the clock Y position is the top of the screen + assertThat(mClockPosition.clockY).isEqualTo(0); + // AND the clock is positioned on the left. assertThat(mClockPosition.clockX).isEqualTo(0); - assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); } @Test @@ -133,11 +145,10 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the clock position algorithm is run positionClock(); - // THEN the clock Y position adjusts for stack scroll height ( (SCREEN_HEIGHT - 500 ) / 2). - assertThat(mClockPosition.clockY).isEqualTo(750); - // AND the clock is opaque and positioned on the left. + // THEN the clock Y position stays to the top + assertThat(mClockPosition.clockY).isEqualTo(0); + // AND the clock is positioned on the left. assertThat(mClockPosition.clockX).isEqualTo(0); - assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); } @Test @@ -182,15 +193,15 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void notifPositionMiddleOfScreenOnAOD() { + public void notifPositionTopOfScreenOnAOD() { // GIVEN on AOD and both stack scroll and clock have 0 height givenAOD(); mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding is half of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(1000); + // THEN the notif padding is 0 (top of screen) + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0); } @Test @@ -201,8 +212,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = 100; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding is half of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(1000); + // THEN the notif padding adjusts for keyguard status height + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(100); } @Test @@ -225,8 +236,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding is half of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(1000); + // THEN the notif are placed to the top of the screen + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0); } @Test @@ -237,8 +248,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding adjusts for the expanded notif stack. - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(750); + // THEN the notif padding adjusts for keyguard status height + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0); } @Test @@ -250,7 +261,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { // WHEN the position algorithm is run positionClock(); // THEN the notif padding adjusts for both clock and notif stack. - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(1000); + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(200); } @Test @@ -261,8 +272,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = 200; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding adjusts for both clock and notif stack. - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(810); + // THEN the notifs are placed below the statusview + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(200); } @Test @@ -270,12 +281,11 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { // GIVEN on lock screen and split shade mode givenLockScreen(); mIsSplitShade = true; - mPreferredClockY = 100; mHasCustomClock = true; // WHEN the position algorithm is run positionClock(); // THEN the notif padding DOESN'T adjust for keyguard status height. - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(mPreferredClockY); + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0); } @Test @@ -286,8 +296,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { mKeyguardStatusHeight = SCREEN_HEIGHT; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding is half of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(1000); + // THEN the notif padding is below keyguard status area + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(SCREEN_HEIGHT); } @Test @@ -317,58 +327,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void preferredCustomClockPositionNoNotifications() { - // GIVEN on the lock screen with a custom clock and no visible notifications - givenLockScreen(); - mPreferredClockY = 100; - mHasCustomClock = true; - mHasVisibleNotifs = false; - // AND given empty height for clock and stack scroller - mNotificationStackHeight = EMPTY_HEIGHT; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the clock position algorithm is run - positionClock(); - // THEN the clock Y position is the preferred Y position. - assertThat(mClockPosition.clockY).isEqualTo(100); - assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); - } - - @Test - public void preferredDefaultClockPositionNoNotifications() { - // GIVEN on the lock screen with a custom clock and no visible notifications - givenLockScreen(); - mPreferredClockY = 100; - mHasCustomClock = false; - mHasVisibleNotifs = false; - // AND given empty height for clock and stack scroller - mNotificationStackHeight = EMPTY_HEIGHT; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the clock position algorithm is run - positionClock(); - // THEN the clock Y position is the middle of the screen (SCREEN_HEIGHT / 2) and not - // preferred. - assertThat(mClockPosition.clockY).isEqualTo(1000); - assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); - } - - @Test - public void preferredCustomClockPositionWithVisibleNotifications() { - // GIVEN on the lock screen with a custom clock and visible notifications - givenLockScreen(); - mPreferredClockY = 100; - mHasCustomClock = true; - mHasVisibleNotifs = true; - // AND given empty height for clock and stack scroller - mNotificationStackHeight = EMPTY_HEIGHT; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the clock position algorithm is run - positionClock(); - // THEN the clock Y position is the middle of the screen (SCREEN_HEIGHT / 2). - assertThat(mClockPosition.clockY).isEqualTo(1000); - assertThat(mClockPosition.clockAlpha).isEqualTo(OPAQUE); - } - - @Test public void clockHiddenWhenQsIsExpanded() { // GIVEN on the lock screen with a custom clock and visible notifications givenLockScreen(); @@ -379,22 +337,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { assertThat(mClockPosition.clockAlpha).isEqualTo(TRANSPARENT); } - @Test - public void preferredCustomClockPositionWithVisibleNotificationsOnAod() { - // GIVEN on the lock screen with a custom clock and visible notifications - givenAOD(); - mPreferredClockY = 100; - mHasCustomClock = true; - mHasVisibleNotifs = true; - // AND given empty height for clock and stack scroller - mNotificationStackHeight = EMPTY_HEIGHT; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the clock position algorithm is run - positionClock(); - // THEN the clock Y position is the preferred Y position. - assertThat(mClockPosition.clockY).isEqualTo(100); - } - private void givenAOD() { mPanelExpansion = 1.f; mDark = 1.f; @@ -408,7 +350,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { private void positionClock() { mClockPositionAlgorithm.setup(EMPTY_MARGIN, SCREEN_HEIGHT, mNotificationStackHeight, mPanelExpansion, SCREEN_HEIGHT, mKeyguardStatusHeight, - 0 /* userSwitchHeight */, mPreferredClockY, 0 /* userSwitchPreferredY */, + 0 /* userSwitchHeight */, 0 /* userSwitchPreferredY */, mHasCustomClock, mHasVisibleNotifs, mDark, ZERO_DRAG, false /* bypassEnabled */, 0 /* unlockedStackScrollerPadding */, mQsExpansion, mCutoutTopInset, mIsSplitShade); diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java index 3cf92126c5c6..208790b24d8a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -429,8 +429,19 @@ public class ThemeOverlayControllerTest extends SysuiTestCase { } @Test + public void onUserAdded_appliesTheme_ifNotManagedProfile() { + reset(mDeviceProvisionedController); + when(mUserManager.isManagedProfile(anyInt())).thenReturn(false); + mBroadcastReceiver.getValue().onReceive(null, + new Intent(Intent.ACTION_MANAGED_PROFILE_ADDED)); + verify(mThemeOverlayApplier) + .applyCurrentUserOverlays(any(), any(), anyInt(), any()); + } + + @Test public void onProfileAdded_ignoresUntilSetupComplete() { reset(mDeviceProvisionedController); + when(mUserManager.isManagedProfile(anyInt())).thenReturn(true); mBroadcastReceiver.getValue().onReceive(null, new Intent(Intent.ACTION_MANAGED_PROFILE_ADDED)); verify(mThemeOverlayApplier, never()) diff --git a/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java index 9b177e1cd0e5..5efe05f6db46 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/toast/ToastUITest.java @@ -84,6 +84,7 @@ public class ToastUITest extends SysuiTestCase { private static final String PACKAGE_NAME_1 = "com.example1.test"; private static final Binder TOKEN_1 = new Binder(); private static final Binder WINDOW_TOKEN_1 = new Binder(); + private static final int USER_ID = 1; private static final int UID_2 = 10256; private static final String PACKAGE_NAME_2 = "com.example2.test"; @@ -227,6 +228,14 @@ public class ToastUITest extends SysuiTestCase { } @Test + public void testShowToast_accessibilityManagerClientIsRemoved() throws Exception { + when(mContextSpy.getUserId()).thenReturn(USER_ID); + mToastUI.showToast(UID_1, PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG, + null); + verify(mAccessibilityManager).removeClient(any(), eq(USER_ID)); + } + + @Test public void testHideToast_removesView() throws Exception { mToastUI.showToast(UID_1, PACKAGE_NAME_1, TOKEN_1, TEXT, WINDOW_TOKEN_1, Toast.LENGTH_LONG, mCallback); diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-af/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-af/strings.xml index 8c47bcc9cb26..adc308600ebb 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-af/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-af/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Versteek (vermy programme in uitsnede-area)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Lewer programme onder uitsnede-area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml index 0f1edf682d0a..648e1d4cf383 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ደብቅ (በተቆራረጠ ክልል ውስጥ መተግበሪያዎችን ያስወግዱ)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ከተቆረጠው አከባቢ በታች የመተግበሪያዎች ምስልን ስራ"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ar/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ar/strings.xml index 71f4f7cab57a..2d3b506d8cad 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ar/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ar/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"إخفاء (تجنّب التطبيقات في المناطق المقطوعة)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"عرض التطبيقات أسفل منطقة الصورة المقطوعة للشاشة"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-as/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-as/strings.xml index e462ec68ddd9..db2b15a142c3 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-as/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-as/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"লুকুৱাওক (কাটআউট অংশৰ এপ্ বাদ দিয়ক)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"এপ্সমূহ কাটআউট অঞ্চলৰ তলত দেখুৱাওক"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-az/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-az/strings.xml index fc7e546d8ede..a6b7c4346e7e 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-az/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-az/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Gizlədin (displey kəsiyində tətbiqlər görünməsin)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Tətbiqləri kəsilmə sahəsinin aşağısında göstərin"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-b+sr+Latn/strings.xml index c21fcda7e112..f80fa8d14054 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Sakrij (izbegavaj aplikacije u izrezanoj oblasti)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Prikazuj aplikacije ispod oblasti izreza"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-be/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-be/strings.xml index 8ef67a22cd45..0e5c8bcb55a2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-be/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-be/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Схаваць (не паказваць праграмы ў месце выраза)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Візуалізацыя праграм ніжэй месца выраза"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bg/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bg/strings.xml index 8b81d6ad9fe7..e97bb57068ca 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bg/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bg/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Скриване (избягване на приложенията в областта на прореза на екрана)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Изобразяване на приложенията под областта на прореза"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bn/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bn/strings.xml deleted file mode 100644 index 15b1fdc2b6fb..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bn/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"লুকান (কাটআউট অঞ্চলে অ্যাপটি দেখাবেন না)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bs/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bs/strings.xml index eb2b8d258bc6..9c9f43779b66 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bs/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-bs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Sakrij (izbjegavaj aplikacije u izrezanoj oblasti)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderovanje aplikacija ispod izrezanog područja"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ca/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ca/strings.xml index be3e093d42f9..e0a577e5290f 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ca/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ca/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Amaga (evita les aplicacions de la regió de retall)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderitza les aplicacions per sota de l\'àrea de retallada"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-cs/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-cs/strings.xml index 67ed6aff8661..0f64473c7260 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-cs/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-cs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Skrýt (nezobrazovat aplikace v oblasti výřezu)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Vykreslovat aplikace pod oblastí výseče"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-da/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-da/strings.xml index dcf70bf22125..d0cc43e8025f 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-da/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-da/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Skjul (undgå apps i cutout-område)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Gengiv apps under skærmhakkets område"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-de/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-de/strings.xml index 86e373263776..a7759ea6175a 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-de/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-de/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ausblenden (Apps im Bereich der Display-Aussparung vermeiden)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Apps unterhalb des Aussparungs-Bereichs darstellen"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-el/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-el/strings.xml index 9806966ffec7..b71679a1912f 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-el/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-el/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Απόκρυψη (αποφυγή εφαρμογών στην περιοχή εγκοπής)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Απόδοση εφαρμογών κάτω από την περιοχή εγκοπής"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rAU/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rAU/strings.xml index a7700b9abd34..8c85cbdebb92 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rAU/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Hide (avoid apps in cutout region)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render apps below cutout area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rCA/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rCA/strings.xml index a7700b9abd34..8c85cbdebb92 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rCA/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Hide (avoid apps in cutout region)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render apps below cutout area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rGB/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rGB/strings.xml index a7700b9abd34..8c85cbdebb92 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rGB/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Hide (avoid apps in cutout region)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render apps below cutout area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rIN/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rIN/strings.xml index a7700b9abd34..8c85cbdebb92 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rIN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Hide (avoid apps in cutout region)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render apps below cutout area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rXC/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rXC/strings.xml index e9b76fb8eb02..8b72d9f77c49 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rXC/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-en-rXC/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Hide (avoid apps in cutout region)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render apps below cutout area"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es-rUS/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es-rUS/strings.xml index ee5f8eabb343..359cdd0eab52 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es-rUS/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (evitar apps en la región excluida)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar apps debajo del área de recorte"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es/strings.xml index c244e49f3160..47f525ec1d28 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-es/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (evitar aplicaciones en la zona recortada)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar aplicaciones por debajo de la zona de recorte"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-et/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-et/strings.xml index cf84a24a46db..0cc5a25868c2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-et/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-et/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Peida (rakendusi ei kuvata ekraani väljalõikealal)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Väljalõikeala all olevate rakenduste renderdamine"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-eu/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-eu/strings.xml index f1a6fda82f97..15d7d6045361 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-eu/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-eu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ezkutatu (saihestu aplikazioak agertzea pantailaren mozketa-eremuan)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Errendatu mozketa-eremutik kanpo geratzen diren aplikazioak"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fa/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fa/strings.xml index f31fad1f83ab..0865f7559ef9 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fa/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"پنهان کردن (از برنامههای موجود در منطقه بریدهشده اجتناب میشود)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"پرداز زدن برنامهها در زیر ناحیه بریدهشده"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fi/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fi/strings.xml index 5e626eea210c..1a6bf7a16839 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fi/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Piilota (vältä lovialueella olevia sovelluksia)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderöi sovellukset lovialueen alle"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr-rCA/strings.xml index 5c9194e8e694..ea0a27b069da 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Masquer (éviter les applications dans la forme découpée)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Rendre les applications sous la zone de découpe"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr/strings.xml index 321ee66d7257..6d91a9d603f4 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-fr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Masquer (éviter les applis dans la zone de l\'encoche)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Afficher les applis sous la zone d\'encoche"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gl/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gl/strings.xml index a05a5fdc08d1..382497b1caf0 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gl/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (non mostrar as aplicacións que aparezan na zona recortada)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar aplicacións que aparezan na zona recortada"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gu/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gu/strings.xml deleted file mode 100644 index 557c7912166b..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-gu/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"છુપાવો (કટ આઉટ પ્રદેશમાં ઍપ બાકાત રાખો)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hi/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hi/strings.xml index c4ab1fe99bdc..e1f09f249bda 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hi/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"छिपाएं (कटआउट वाले हिस्से में ऐप्लिकेशन न दिखाएं)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ऐप्लिकेशन को कटआउट एरिया के नीचे दिखाएं"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hr/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hr/strings.xml index a2c1feb26c25..db734e8254e5 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hr/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Sakrij (izbjegavaj aplikacije u području ureza)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderiraj aplikacije ispod područja ureza"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hu/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hu/strings.xml index e8db0d1565de..264095b6f4e2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hu/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Elrejtés (a képernyőkivágás területén szereplő alkalmazások elkerülése)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Alkalmazások megjelenítése a kivágási terület alatt"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hy/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hy/strings.xml index 5b1838deb439..72e67ec1c424 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hy/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-hy/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Թաքցնել (չցուցադրել հավելվածները էկրանի կտրված հատվածում)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Արտապատկերել հավելվածները էկրանի կտրված հատվածի ներքևում"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-in/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-in/strings.xml index d40d73b72454..c49bf0ca939a 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-in/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-in/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Sembunyikan (hindari aplikasi di wilayah cutout)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Render aplikasi di bawah area potongan"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-is/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-is/strings.xml index 1a2466532dfe..0b90991b0b1e 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-is/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-is/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Fela (forðast forrit á útklipptu svæði)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Birta forrit fyrir neðan útklippta svæðið"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-it/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-it/strings.xml index 90b98100de50..2a0f026b39a6 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-it/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-it/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Nascondi (evita le app nell\'area di ritaglio)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Visualizza le app sotto l\'area di ritaglio"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-iw/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-iw/strings.xml index 0c4af2d69e4a..cc7a0a486c54 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-iw/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-iw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"הסתרה (ללא אפליקציות באזור חיתוך התצוגה)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"עיבוד האפליקציות שמתחת לאזור המגרעת"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ja/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ja/strings.xml index 69b9f24d1d08..9e99482e5e2a 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ja/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ja/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"非表示(カットアウト領域にアプリを表示しない)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"カットアウト領域の下でアプリをレンダリング"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ka/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ka/strings.xml index 1ee2faef0bc6..5464a5699449 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ka/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ka/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"დამალვა (აპების არდაშვება ჭრილის უბანში)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"აპების ასახვა ჭრილის ქვემოთ"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kk/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kk/strings.xml index 922152477d65..6a2623f8696f 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kk/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Жасыру (қолданбалар экран қиығында көрсетілмесін)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Экран ойығының астындағы қолданбаларды көрсету"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-km/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-km/strings.xml index ea0a9d0dbc5b..4b4d169cc738 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-km/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-km/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"លាក់ (ជៀសវាងបង្ហាញកម្មវិធីនៅផ្នែកឆក)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"បំប្លែងកម្មវិធីខាងក្រោមផ្នែកឆក"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kn/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kn/strings.xml deleted file mode 100644 index 10176a8d7b72..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-kn/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ಮರೆಮಾಡಿ (ಕಟ್ಔಟ್ ಪ್ರದೇಶದಲ್ಲಿ ಆ್ಯಪ್ಗಳನ್ನು ತೋರಿಸದಂತೆ ತಡೆಯಿರಿ)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ko/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ko/strings.xml index 97856d35618c..4b9e64020eee 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ko/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ko/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"숨기기(컷아웃 영역에 앱을 표시하지 않음)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"컷아웃 영역 아래에 앱 렌더링"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ky/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ky/strings.xml index 039bdf0b8888..1ac6a8bb9c1f 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ky/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ky/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Жашыруу (кесилген аймакта колдонмолор көрсөтүлбөсүн)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Колдонмолорду кесилген аймактын ылдый жагында көрсөтүү"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lo/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lo/strings.xml index 29ec22453e93..4c38580169af 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lo/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lo/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ເຊື່ອງ (ຫຼີກເວັ້ນແອັບໃນພື້ນທີ່ຕັດອອກ)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ສະແດງພາບແອັບຢູ່ທາງລຸ່ມພື້ນທີ່ຮອຍເສັ້ນ"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lt/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lt/strings.xml index 09d86412e408..c43736d006dd 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lt/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Slėpti (nerodyti programų ekrano išpjovos srityje)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Pateikti programas po išpjovos sritimi"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lv/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lv/strings.xml index f2367c648ed0..f95abb69abf5 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lv/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-lv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Paslēpt (nerādīt lietotnes ekrāna izgriezumā)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Atveidot lietotnes zem izgriezuma apgabala"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mk/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mk/strings.xml index 67b45d3020a3..ff236be46b14 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mk/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Сокриј (избегнувај апликации во отсечен регион)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Прикажувај апликации под отсечената област"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ml/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ml/strings.xml index 6e88f296e0ba..ef728ab64ab5 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ml/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ml/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"മറയ്ക്കുക (കട്ടൗട്ട് ഭാഗത്ത് ആപ്പുകൾ കാണിക്കരുത്)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"കട്ടൗട്ട് ഭാഗത്തിന് താഴെ ആപ്പുകൾ റെൻഡർ ചെയ്യുക"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mn/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mn/strings.xml index 9bda419a1e17..23dbe0c822f0 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mn/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Нуух (тусгаарласан бүс дэх аппуудаас зайлсхийнэ)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Аппуудыг тасалж авсан хэсгийн доор буулгах"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mr/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mr/strings.xml deleted file mode 100644 index ecd0c0b4f25e..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-mr/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"लपवा (कटआउट भागामध्ये ॲप्स दाखवू नका)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ms/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ms/strings.xml index 5864ff8689dd..e348630e0447 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ms/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ms/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Sembunyikan (elakkan apl dalam kawasan potongan)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Serahkan apl di bawah kawasan potongan"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-my/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-my/strings.xml index 0f3c0aaff18d..90cb0a5f56a4 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-my/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-my/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ဝှက်ရန် (ဖြတ်ထုတ်ထားသောအပိုင်းရှိ အက်ပ်များကို မပြပါနှင့်)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ဖြတ်ထုတ်ထားသော နေရာအောက်ရှိ အက်ပ်များ ပြသရန်"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nb/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nb/strings.xml index 8a1da687e573..b8b4e7526ab2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nb/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nb/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Skjul (unngå apper i utklippsregionen)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Gjengi apper under utklippsområdet"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ne/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ne/strings.xml deleted file mode 100644 index 98d75129f64a..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ne/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"लुकाइयोस् (कटआउट क्षेत्रमा एपहरू नदेखाइयोस्)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nl/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nl/strings.xml index 0e515147c0ab..68f5c0701beb 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nl/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Verbergen (apps in cutout-regio vermijden)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Apps renderen onder display-cutout"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-or/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-or/strings.xml index b0552b87d5b3..162a29e8968c 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-or/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-or/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ଲୁଚାନ୍ତୁ (କଟଆଉଟ୍ ରିଜନରେ ଆପଗୁଡ଼ିକୁ ଏଡ଼ାନ୍ତୁ)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ଆପଗୁଡ଼ିକୁ କଟଆଉଟ୍ ଏରିଆ ନିମ୍ନରେ ରେଣ୍ଡର୍ କରନ୍ତୁ"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pa/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pa/strings.xml deleted file mode 100644 index 803a69d40213..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pa/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ਲੁਕਾਓ (ਕੱਟਆਊਟ ਖੇਤਰ ਵਿਚਲੀਆਂ ਐਪਾਂ ਨੂੰ ਨਾ ਛੇੜੋ)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pl/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pl/strings.xml index e8d7fb7dacc8..c027d5266928 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pl/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ukryj (unikaj wyświetlania aplikacji w obszarze wycięcia)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderuj aplikacje pod obszarem wycięcia"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rBR/strings.xml index b5364e996b91..d09ed97121fa 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rBR/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (evitar apps na região recortada)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar apps abaixo da área de corte"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rPT/strings.xml index e9467a2879c4..d38ce43204d2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt-rPT/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (evitar apps na área de recorte)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar apps abaixo da área de recorte"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt/strings.xml index b5364e996b91..d09ed97121fa 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-pt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ocultar (evitar apps na região recortada)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Renderizar apps abaixo da área de corte"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ro/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ro/strings.xml index 9aefb31c69c6..6e5947c0d753 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ro/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ro/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ascundeți (se evită aplicațiile în regiunea decupată)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Redați aplicațiile sub zona de decupaj"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ru/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ru/strings.xml index 8335c77fc86d..c7f54bbff6a7 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ru/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ru/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Скрыть (не показывать приложения в вырезе на экране)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Отображать приложения под вырезом"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-si/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-si/strings.xml index d21b02c04bdf..4a14a360e857 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-si/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-si/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"සඟවන්න (කටවුට් කලාපයෙහි යෙදුම් වළක්වන්න)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"කටවුට් ප්රදේශයට පහළින් යෙදුම් විදහන්න"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sk/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sk/strings.xml index dfd01afb4c4b..98b82e636392 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sk/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Skryť (nezobrazovať aplikácie v oblasti výrezu)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Vykresľovať aplikácie pod oblasťou výrezu"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sl/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sl/strings.xml index 704dfbbfb99f..dcf0c842cd36 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sl/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Skrij (izogibaj se aplikacijam na območju zareze)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Upodobitev aplikacij pod predelom zareze zaslona"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sq/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sq/strings.xml index 8035d7f26ffa..d7b0676970b8 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sq/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sq/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Fshih (shmang aplikacionet në zonën e prerë)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Paraqiti aplikacionet poshtë zonës së prerjes"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sr/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sr/strings.xml index c835b3582e25..c2b611e70da9 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sr/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Сакриј (избегавај апликације у изрезаној области)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Приказуј апликације испод области изреза"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sv/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sv/strings.xml index a8fd15730ba4..3007ffb99e10 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sv/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Dölj (visa inte appar i skärmutskärningen)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Visa appar under skärmutskärningens område"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sw/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sw/strings.xml index 57ef68437013..b605554b46f3 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sw/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-sw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ficha (epuka programu katika eneo lenye pengo)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Usionyeshe programu chini ya eneo lenye pengo"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ta/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ta/strings.xml index c0506cf7df5e..c4d06fb68564 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ta/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ta/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"மறை (திரை மறையும் பகுதியில் ஆப்ஸைக் காட்ட வேண்டாம்)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"கட் அவுட் பகுதிக்குள்ளாக ஆப்ஸை ரெண்டர் செய்"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-te/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-te/strings.xml deleted file mode 100644 index db2a79787978..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-te/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"దాచండి (కట్అవుట్ ప్రాంతంలో యాప్లను నివారించండి)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-th/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-th/strings.xml index 09d597dd456d..9a302507411a 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-th/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-th/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"ซ่อน (หลีกเลี่ยงการแสดงแอปในภูมิภาคที่ถูกตัดออก)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"แสดงผลแอปใต้บริเวณรอยบาก"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tl/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tl/strings.xml index 6b1c3720ce8b..a3d4a3afe376 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tl/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Itago (iwasan ang mga app sa rehiyon ng cutout)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"I-render ang mga app sa ibaba ng lugar ng cutout"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tr/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tr/strings.xml index 991a8406808e..12e0f3019814 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tr/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-tr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Gizle (kesim bölgesindeki uygulamalardan kaçının)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Uygulamaları kesme alanının altında oluşturun"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uk/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uk/strings.xml index 7d6c068fd7e0..08b1521a12a0 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uk/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Сховати (не показувати додатки з вирізаних регіонів)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Відображати додатки під областю вирізу екрана"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ur/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ur/strings.xml deleted file mode 100644 index 48c5d14498b1..000000000000 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-ur/strings.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?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. - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"چھپائیں (کٹ آؤٹ والے علاقے میں ایپس سے اجتناب کریں)"</string> -</resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uz/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uz/strings.xml index 13a56acbab51..7f6f2b45fbd2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uz/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-uz/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Berkitish (qirqilgan hudud ilovalariga diqqat qiling)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Ekran kesimi quyidagi ilovalarni renderlash"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-vi/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-vi/strings.xml index 221786294eb5..a7d54fbae9f5 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-vi/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-vi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Ẩn (không hiện các ứng dụng ở vùng cắt)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Hiển thị các ứng dụng bên dưới khu vực có vết cắt"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rCN/strings.xml index 3d672b4c086f..f596520fad30 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rCN/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rCN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"隐藏(避免应用显示在凹口区域)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"在刘海区域下方呈现应用"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rHK/strings.xml index 7f37f3bfb488..ddb1df77b00c 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rHK/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"隱藏 (避免將應用程式置於凹口區域)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"在凹口區域下方輸出應用程式"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rTW/strings.xml index ff50ddbdff94..7aad79c11bf2 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zh-rTW/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"隱藏 (避免在螢幕凹口顯示應用程式的內容)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"在螢幕凹口底下顯示應用程式畫面"</string> </resources> diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zu/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zu/strings.xml index d6d772777d92..d861c5e60708 100644 --- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zu/strings.xml +++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-zu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="1946296620328354129">"Fihla (gwema ama-app kwisifunda esikhishiwe)"</string> + <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"Nikezela ngama-app angaphansi kwendawo yokukhipha"</string> </resources> diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 4e14411dd06e..acbf4875ae8d 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -2186,10 +2186,6 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku return false; } - if (!ri.activityInfo.isEnabled()) { - return false; - } - ComponentName componentName = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); ProviderId providerId = new ProviderId(ri.activityInfo.applicationInfo.uid, componentName); diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 517a8294de9f..8aea4a948299 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -4908,7 +4908,8 @@ public final class ActiveServices { Slog.w(TAG, "Service crashed " + sr.crashCount + " times, stopping: " + sr); EventLog.writeEvent(EventLogTags.AM_SERVICE_CRASHED_TOO_MUCH, - sr.userId, sr.crashCount, sr.shortInstanceName, sr.app.getPid()); + sr.userId, sr.crashCount, sr.shortInstanceName, + sr.app != null ? sr.app.getPid() : -1); bringDownServiceLocked(sr, true); } else if (!allowRestart || !mAm.mUserController.isUserRunning(sr.userId, 0)) { diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 75367d27a8a1..697f6fa8eea8 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -469,9 +469,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } } - private boolean isValidPackageName(String packageName) { + private boolean isValidPackageName(String packageName, int userId) { try { - return mPackageManager.getPackageUid(packageName, 0) == Binder.getCallingUid(); + return mPackageManager.getPackageUidAsUser(packageName, userId) + == Binder.getCallingUid(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return false; @@ -547,7 +548,7 @@ public final class GameManagerService extends IGameManagerService.Stub { // The least privileged case is a normal app performing a query, so check that first and // return a value if the package name is valid. Next, check if the caller has the necessary // permission and return a value. Do this check last, since it can throw an exception. - if (isValidPackageName(packageName)) { + if (isValidPackageName(packageName, userId)) { return getGameModeFromSettings(packageName, userId); } diff --git a/services/core/java/com/android/server/app/GameManagerShellCommand.java b/services/core/java/com/android/server/app/GameManagerShellCommand.java index c5f1a0b3f67e..2074ffae1030 100644 --- a/services/core/java/com/android/server/app/GameManagerShellCommand.java +++ b/services/core/java/com/android/server/app/GameManagerShellCommand.java @@ -16,6 +16,7 @@ package com.android.server.app; +import android.app.ActivityManager; import android.app.GameManager; import android.app.IGameManagerService; import android.compat.Compatibility; @@ -127,9 +128,14 @@ public class GameManagerShellCommand extends ShellCommand { * <PACKAGE_NAME> <CONFIG_STRING>` * see: {@link GameManagerServiceTests#mockDeviceConfigAll()} */ + final String option = getNextOption(); + String userIdStr = null; + if (option != null && option.equals("--user")) { + userIdStr = getNextArgRequired(); + } + final String gameMode = getNextArgRequired(); final String packageName = getNextArgRequired(); - final String userIdStr = getNextArgRequired(); final IGameManagerService service = IGameManagerService.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.GAME_SERVICE)); boolean batteryModeSupported = false; @@ -142,7 +148,8 @@ public class GameManagerShellCommand extends ShellCommand { batteryModeSupported = true; } } - int userId = Integer.parseInt(userIdStr); + int userId = userIdStr != null ? Integer.parseInt(userIdStr) + : ActivityManager.getCurrentUser(); switch (gameMode.toLowerCase()) { case "1": case "standard": @@ -199,7 +206,8 @@ public class GameManagerShellCommand extends ShellCommand { pw.println(" Print this help text."); pw.println(" downscale [0.5|0.6|0.7|0.8|0.9|disable] <PACKAGE_NAME>"); pw.println(" Force app to run at the specified scaling ratio."); - pw.println(" mode [1|2|3|standard|performance|battery] <PACKAGE_NAME> <USER_ID>"); + pw.println(" mode [--user <USER_ID>] [1|2|3|standard|performance|battery] <PACKAGE_NAME>"); pw.println(" Force app to run in the specified game mode, if supported."); + pw.println(" --user <USER_ID>: apply for the given user, the current user is used when unspecified."); } } diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 535fb679ab4d..4cb2e9b5cb97 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -97,7 +97,9 @@ public final class AppHibernationService extends SystemService { PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | PackageManager.MATCH_UNINSTALLED_PACKAGES - | PackageManager.MATCH_DISABLED_COMPONENTS; + | PackageManager.MATCH_DISABLED_COMPONENTS + | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; /** * Lock for accessing any in-memory hibernation state diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index c2259eb98e58..ce8cbafeba33 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -667,12 +667,30 @@ public class AppOpsService extends IAppOpsService.Stub { /** Lazily populated cache of attributionTags of this package */ final @NonNull ArraySet<String> knownAttributionTags = new ArraySet<>(); + /** + * Lazily populated cache of <b>valid</b> attributionTags of this package, a set smaller + * than or equal to {@link #knownAttributionTags}. + */ + final @NonNull ArraySet<String> validAttributionTags = new ArraySet<>(); + Ops(String _packageName, UidState _uidState) { packageName = _packageName; uidState = _uidState; } } + /** Returned from {@link #verifyAndGetBypass(int, String, String, String, boolean)}. */ + private static final class PackageVerificationResult { + + final RestrictionBypass bypass; + final boolean isAttributionTagValid; + + PackageVerificationResult(RestrictionBypass bypass, boolean isAttributionTagValid) { + this.bypass = bypass; + this.isAttributionTagValid = isAttributionTagValid; + } + } + /** A in progress startOp->finishOp event */ private static final class InProgressStartOpEvent implements IBinder.DeathRecipient { /** Wall clock time of startOp event (not monotonic) */ @@ -2225,7 +2243,8 @@ public class AppOpsService extends IAppOpsService.Stub { return Collections.emptyList(); } synchronized (this) { - Ops pkgOps = getOpsLocked(uid, resolvedPackageName, null, null, false /* edit */); + Ops pkgOps = getOpsLocked(uid, resolvedPackageName, null, false, null, + /* edit */ false); if (pkgOps == null) { return null; } @@ -2387,7 +2406,7 @@ public class AppOpsService extends IAppOpsService.Stub { op.removeAttributionsWithNoTime(); if (op.mAttributions.isEmpty()) { - Ops ops = getOpsLocked(uid, packageName, null, null, false /* edit */); + Ops ops = getOpsLocked(uid, packageName, null, false, null, /* edit */ false); if (ops != null) { ops.remove(op.op); if (ops.size() <= 0) { @@ -2697,9 +2716,9 @@ public class AppOpsService extends IAppOpsService.Stub { ArraySet<ModeCallback> repCbs = null; code = AppOpsManager.opToSwitch(code); - RestrictionBypass bypass; + PackageVerificationResult pvr; try { - bypass = verifyAndGetBypass(uid, packageName, null); + pvr = verifyAndGetBypass(uid, packageName, null); } catch (SecurityException e) { Slog.e(TAG, "Cannot setMode", e); return; @@ -2708,7 +2727,7 @@ public class AppOpsService extends IAppOpsService.Stub { int previousMode = MODE_DEFAULT; synchronized (this) { UidState uidState = getUidStateLocked(uid, false); - Op op = getOpLocked(code, uid, packageName, null, bypass, true); + Op op = getOpLocked(code, uid, packageName, null, false, pvr.bypass, /* edit */ true); if (op != null) { if (op.mode != mode) { previousMode = op.mode; @@ -3148,9 +3167,9 @@ public class AppOpsService extends IAppOpsService.Stub { */ private @Mode int checkOperationUnchecked(int code, int uid, @NonNull String packageName, @Nullable String attributionTag, boolean raw) { - RestrictionBypass bypass; + PackageVerificationResult pvr; try { - bypass = verifyAndGetBypass(uid, packageName, null); + pvr = verifyAndGetBypass(uid, packageName, null); } catch (SecurityException e) { Slog.e(TAG, "checkOperation", e); return AppOpsManager.opToDefaultMode(code); @@ -3160,7 +3179,7 @@ public class AppOpsService extends IAppOpsService.Stub { return AppOpsManager.MODE_IGNORED; } synchronized (this) { - if (isOpRestrictedLocked(uid, code, packageName, attributionTag, bypass)) { + if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass)) { return AppOpsManager.MODE_IGNORED; } code = AppOpsManager.opToSwitch(code); @@ -3170,7 +3189,7 @@ public class AppOpsService extends IAppOpsService.Stub { final int rawMode = uidState.opModes.get(code); return raw ? rawMode : uidState.evalMode(code, rawMode); } - Op op = getOpLocked(code, uid, packageName, null, bypass, false); + Op op = getOpLocked(code, uid, packageName, null, false, pvr.bypass, /* edit */ false); if (op == null) { return AppOpsManager.opToDefaultMode(code); } @@ -3341,16 +3360,16 @@ public class AppOpsService extends IAppOpsService.Stub { @Nullable String proxyAttributionTag, @OpFlags int flags, boolean shouldCollectAsyncNotedOp, @Nullable String message, boolean shouldCollectMessage) { - RestrictionBypass bypass; + PackageVerificationResult pvr; try { boolean isLocOrActivity = code == AppOpsManager.OP_FINE_LOCATION || code == AppOpsManager.OP_FINE_LOCATION_SOURCE || code == AppOpsManager.OP_ACTIVITY_RECOGNITION || code == AppOpsManager.OP_ACTIVITY_RECOGNITION_SOURCE; - bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName, + pvr = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName, isLocOrActivity); boolean wasNull = attributionTag == null; - if (bypass != null && bypass.getIsAttributionTagNotFound()) { + if (!pvr.isAttributionTagValid) { attributionTag = null; } if (attributionTag == null && isLocOrActivity @@ -3365,8 +3384,8 @@ public class AppOpsService extends IAppOpsService.Stub { } synchronized (this) { - final Ops ops = getOpsLocked(uid, packageName, attributionTag, bypass, - true /* edit */); + final Ops ops = getOpsLocked(uid, packageName, attributionTag, + pvr.isAttributionTagValid, pvr.bypass, /* edit */ true); if (ops == null) { scheduleOpNotedIfNeededLocked(code, uid, packageName, attributionTag, flags, AppOpsManager.MODE_IGNORED); @@ -3386,7 +3405,7 @@ public class AppOpsService extends IAppOpsService.Stub { final int switchCode = AppOpsManager.opToSwitch(code); final UidState uidState = ops.uidState; - if (isOpRestrictedLocked(uid, code, packageName, attributionTag, bypass)) { + if (isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass)) { attributedOp.rejected(uidState.state, flags); scheduleOpNotedIfNeededLocked(code, uid, packageName, attributionTag, flags, AppOpsManager.MODE_IGNORED); @@ -3862,15 +3881,15 @@ public class AppOpsService extends IAppOpsService.Stub { boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, @Nullable String message, boolean shouldCollectMessage, @AttributionFlags int attributionFlags, int attributionChainId, boolean dryRun) { - RestrictionBypass bypass; + PackageVerificationResult pvr; try { boolean isLocOrActivity = code == AppOpsManager.OP_FINE_LOCATION || code == AppOpsManager.OP_FINE_LOCATION_SOURCE || code == AppOpsManager.OP_ACTIVITY_RECOGNITION || code == AppOpsManager.OP_ACTIVITY_RECOGNITION_SOURCE; - bypass = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName, + pvr = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName, isLocOrActivity); - if (bypass != null && bypass.getIsAttributionTagNotFound()) { + if (!pvr.isAttributionTagValid) { attributionTag = null; } if (attributionTag == null && isLocOrActivity @@ -3886,7 +3905,8 @@ public class AppOpsService extends IAppOpsService.Stub { boolean isRestricted = false; synchronized (this) { - final Ops ops = getOpsLocked(uid, packageName, attributionTag, bypass, true /* edit */); + final Ops ops = getOpsLocked(uid, packageName, attributionTag, + pvr.isAttributionTagValid, pvr.bypass, /* edit */ true); if (ops == null) { if (!dryRun) { scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag, @@ -3901,7 +3921,7 @@ public class AppOpsService extends IAppOpsService.Stub { final Op op = getOpLocked(ops, code, uid, true); final AttributedOp attributedOp = op.getOrCreateAttribution(op, attributionTag); final UidState uidState = ops.uidState; - isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, bypass); + isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass); final int switchCode = AppOpsManager.opToSwitch(code); // If there is a non-default per UID policy (we set UID op mode only if // non-default) it takes over, otherwise use the per package policy. @@ -4033,10 +4053,10 @@ public class AppOpsService extends IAppOpsService.Stub { private void finishOperationUnchecked(IBinder clientId, int code, int uid, String packageName, String attributionTag) { - RestrictionBypass bypass; + PackageVerificationResult pvr; try { - bypass = verifyAndGetBypass(uid, packageName, attributionTag); - if (bypass != null && bypass.getIsAttributionTagNotFound()) { + pvr = verifyAndGetBypass(uid, packageName, attributionTag); + if (!pvr.isAttributionTagValid) { attributionTag = null; } } catch (SecurityException e) { @@ -4045,7 +4065,8 @@ public class AppOpsService extends IAppOpsService.Stub { } synchronized (this) { - Op op = getOpLocked(code, uid, packageName, attributionTag, bypass, true); + Op op = getOpLocked(code, uid, packageName, attributionTag, pvr.isAttributionTagValid, + pvr.bypass, /* edit */ true); if (op == null) { Slog.e(TAG, "Operation not found: uid=" + uid + " pkg=" + packageName + "(" + attributionTag + ") op=" + AppOpsManager.opToName(code)); @@ -4427,32 +4448,35 @@ public class AppOpsService extends IAppOpsService.Stub { } /** - * @see verifyAndGetBypass(int, String, String, String) + * @see #verifyAndGetBypass(int, String, String, String, boolean) */ - private @Nullable RestrictionBypass verifyAndGetBypass(int uid, String packageName, + private @NonNull PackageVerificationResult verifyAndGetBypass(int uid, String packageName, @Nullable String attributionTag) { return verifyAndGetBypass(uid, packageName, attributionTag, null, false); } /** * Verify that package belongs to uid and return the {@link RestrictionBypass bypass - * description} for the package. + * description} for the package, along with a boolean indicating whether the attribution tag is + * valid. * * @param uid The uid the package belongs to * @param packageName The package the might belong to the uid * @param attributionTag attribution tag or {@code null} if no need to verify * @param proxyPackageName The proxy package, from which the attribution tag is to be pulled * - * @return {@code true} iff the package is privileged + * @return PackageVerificationResult containing {@link RestrictionBypass} and whether the + * attribution tag is valid */ - private @Nullable RestrictionBypass verifyAndGetBypass(int uid, String packageName, + private @NonNull PackageVerificationResult verifyAndGetBypass(int uid, String packageName, @Nullable String attributionTag, @Nullable String proxyPackageName, boolean extraLog) { if (uid == Process.ROOT_UID) { // For backwards compatibility, don't check package name for root UID. - return null; + return new PackageVerificationResult(null, + /* isAttributionTagValid */ true); } - // Do not check if uid/packageName/attributionTag is already known + // Do not check if uid/packageName/attributionTag is already known. synchronized (this) { UidState uidState = mUidStates.get(uid); if (uidState != null && uidState.pkgOps != null) { @@ -4460,14 +4484,13 @@ public class AppOpsService extends IAppOpsService.Stub { if (ops != null && (attributionTag == null || ops.knownAttributionTags.contains( attributionTag)) && ops.bypass != null) { - return ops.bypass; + return new PackageVerificationResult(ops.bypass, + ops.validAttributionTags.contains(attributionTag)); } } } int callingUid = Binder.getCallingUid(); - int userId = UserHandle.getUserId(uid); - RestrictionBypass bypass = null; // Allow any attribution tag for resolvable uids int pkgUid = resolveUid(packageName); @@ -4479,12 +4502,16 @@ public class AppOpsService extends IAppOpsService.Stub { throw new SecurityException("Specified package " + packageName + " under uid " + UserHandle.getAppId(uid) + otherUidMessage); } - return RestrictionBypass.UNRESTRICTED; + return new PackageVerificationResult(RestrictionBypass.UNRESTRICTED, + /* isAttributionTagValid */ true); } + int userId = UserHandle.getUserId(uid); + RestrictionBypass bypass = null; + boolean isAttributionTagValid = false; + final long ident = Binder.clearCallingIdentity(); try { - boolean isAttributionTagValid = false; PackageManagerInternal pmInt = LocalServices.getService(PackageManagerInternal.class); AndroidPackage pkg = pmInt.getPackage(packageName); if (pkg != null) { @@ -4509,15 +4536,15 @@ public class AppOpsService extends IAppOpsService.Stub { if (!isAttributionTagValid) { AndroidPackage proxyPkg = proxyPackageName != null ? pmInt.getPackage(proxyPackageName) : null; - boolean foundInProxy = isAttributionInPackage(proxyPkg, attributionTag); + // Re-check in proxy. + isAttributionTagValid = isAttributionInPackage(proxyPkg, attributionTag); String msg; - if (pkg != null && foundInProxy) { + if (pkg != null && isAttributionTagValid) { msg = "attributionTag " + attributionTag + " declared in manifest of the proxy" + " package " + proxyPackageName + ", this is not advised"; } else if (pkg != null) { msg = "attributionTag " + attributionTag + " not declared in manifest of " + packageName; - bypass.setIsAttributionTagNotFound(true); } else { msg = "package " + packageName + " not found, can't check for " + "attributionTag " + attributionTag; @@ -4528,7 +4555,7 @@ public class AppOpsService extends IAppOpsService.Stub { SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE, packageName, userId) && mPlatformCompat.isChangeEnabledByUid( SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE, - callingUid) && !foundInProxy) { + callingUid) && !isAttributionTagValid) { Slog.e(TAG, msg); } else { Slog.e(TAG, msg); @@ -4546,7 +4573,7 @@ public class AppOpsService extends IAppOpsService.Stub { + otherUidMessage); } - return bypass; + return new PackageVerificationResult(bypass, isAttributionTagValid); } private boolean isAttributionInPackage(@Nullable AndroidPackage pkg, @@ -4574,13 +4601,14 @@ public class AppOpsService extends IAppOpsService.Stub { * @param uid The uid the package belongs to * @param packageName The name of the package * @param attributionTag attribution tag + * @param isAttributionTagValid whether the given attribution tag is valid * @param bypass When to bypass certain op restrictions (can be null if edit == false) * @param edit If an ops does not exist, create the ops? * @return The ops */ private Ops getOpsLocked(int uid, String packageName, @Nullable String attributionTag, - @Nullable RestrictionBypass bypass, boolean edit) { + boolean isAttributionTagValid, @Nullable RestrictionBypass bypass, boolean edit) { UidState uidState = getUidStateLocked(uid, edit); if (uidState == null) { return null; @@ -4609,6 +4637,11 @@ public class AppOpsService extends IAppOpsService.Stub { if (attributionTag != null) { ops.knownAttributionTags.add(attributionTag); + if (isAttributionTagValid) { + ops.validAttributionTags.add(attributionTag); + } else { + ops.validAttributionTags.remove(attributionTag); + } } } @@ -4638,14 +4671,17 @@ public class AppOpsService extends IAppOpsService.Stub { * @param uid The uid the of the package * @param packageName The package name for which to get the state for * @param attributionTag The attribution tag + * @param isAttributionTagValid Whether the given attribution tag is valid * @param bypass When to bypass certain op restrictions (can be null if edit == false) * @param edit Iff {@code true} create the {@link Op} object if not yet created * * @return The {@link Op state} of the op */ private @Nullable Op getOpLocked(int code, int uid, @NonNull String packageName, - @Nullable String attributionTag, @Nullable RestrictionBypass bypass, boolean edit) { - Ops ops = getOpsLocked(uid, packageName, attributionTag, bypass, edit); + @Nullable String attributionTag, boolean isAttributionTagValid, + @Nullable RestrictionBypass bypass, boolean edit) { + Ops ops = getOpsLocked(uid, packageName, attributionTag, isAttributionTagValid, bypass, + edit); if (ops == null) { return null; } @@ -6510,7 +6546,7 @@ public class AppOpsService extends IAppOpsService.Stub { } // TODO moltmann: Allow to check for attribution op activeness synchronized (AppOpsService.this) { - Ops pkgOps = getOpsLocked(uid, resolvedPackageName, null, null, false); + Ops pkgOps = getOpsLocked(uid, resolvedPackageName, null, false, null, false); if (pkgOps == null) { return false; } diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index d4920f56a27e..13b7ebc47301 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -3250,6 +3250,11 @@ public final class DisplayManagerService extends SystemService { mDisplayPowerControllers.get(Display.DEFAULT_DISPLAY) .ignoreProximitySensorUntilChanged(); } + + @Override + public int getRefreshRateSwitchingType() { + return getRefreshRateSwitchingTypeInternal(); + } } class DesiredDisplayModeSpecsObserver diff --git a/services/core/java/com/android/server/location/provider/AbstractLocationProvider.java b/services/core/java/com/android/server/location/provider/AbstractLocationProvider.java index ba7f44f2818b..1da45bd49767 100644 --- a/services/core/java/com/android/server/location/provider/AbstractLocationProvider.java +++ b/services/core/java/com/android/server/location/provider/AbstractLocationProvider.java @@ -305,6 +305,10 @@ public abstract class AbstractLocationProvider { setState(state -> state.withIdentity(identity)); } + public final Set<String> getExtraAttributionTags() { + return mInternalState.get().state.extraAttributionTags; + } + /** * Call this method to report a change in the provider's extra attribution tags. */ diff --git a/services/core/java/com/android/server/location/provider/MockableLocationProvider.java b/services/core/java/com/android/server/location/provider/MockableLocationProvider.java index 81936440f6a7..021e8dbdb44e 100644 --- a/services/core/java/com/android/server/location/provider/MockableLocationProvider.java +++ b/services/core/java/com/android/server/location/provider/MockableLocationProvider.java @@ -32,6 +32,7 @@ import com.android.internal.util.Preconditions; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Collections; +import java.util.Set; /** * Represents a location provider that may switch between a mock implementation and a real @@ -296,6 +297,10 @@ public class MockableLocationProvider extends AbstractLocationProvider { if (identity != null) { pw.println("identity=" + identity); } + Set<String> extraAttributionTags = getExtraAttributionTags(); + if (!extraAttributionTags.isEmpty()) { + pw.println("extra attribution tags=" + extraAttributionTags); + } ProviderProperties properties = getProperties(); if (properties != null) { pw.println("properties=" + properties); diff --git a/services/core/java/com/android/server/location/provider/proxy/ProxyLocationProvider.java b/services/core/java/com/android/server/location/provider/proxy/ProxyLocationProvider.java index 5df78704d002..a9641f0f1c1b 100644 --- a/services/core/java/com/android/server/location/provider/proxy/ProxyLocationProvider.java +++ b/services/core/java/com/android/server/location/provider/proxy/ProxyLocationProvider.java @@ -17,6 +17,7 @@ package com.android.server.location.provider.proxy; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; +import static com.android.server.location.LocationManagerService.TAG; import android.annotation.Nullable; import android.content.Context; @@ -32,6 +33,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.text.TextUtils; import android.util.ArraySet; +import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.server.FgThread; @@ -44,6 +46,7 @@ import com.android.server.servicewatcher.ServiceWatcher.ServiceListener; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -78,6 +81,7 @@ public class ProxyLocationProvider extends AbstractLocationProvider implements final Context mContext; final ServiceWatcher mServiceWatcher; + final String mName; @GuardedBy("mLock") final ArrayList<Runnable> mFlushListeners = new ArrayList<>(0); @@ -101,6 +105,7 @@ public class ProxyLocationProvider extends AbstractLocationProvider implements mServiceWatcher = ServiceWatcher.create(context, provider, new CurrentUserServiceSupplier(context, action, enableOverlayResId, nonOverlayPackageResId), this); + mName = provider; mProxy = null; mRequest = ProviderRequest.EMPTY_REQUEST; @@ -249,6 +254,8 @@ public class ProxyLocationProvider extends AbstractLocationProvider implements String tagsStr = mBoundServiceInfo.getMetadata().getString(EXTRA_LOCATION_TAGS); if (!TextUtils.isEmpty(tagsStr)) { attributionTags = tagsStr.split(LOCATION_TAGS_SEPARATOR); + Log.i(TAG, mName + " provider loaded extra attribution tags: " + + Arrays.toString(attributionTags)); } } ArraySet<String> extraAttributionTags = new ArraySet<>(attributionTags); diff --git a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java index 1e0142c496b0..2cc2ebf616c5 100644 --- a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java +++ b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java @@ -98,7 +98,8 @@ public final class MediaMetricsManagerService extends SystemService { private String getSessionIdInternal(int userId) { byte[] byteId = new byte[16]; // 128 bits mSecureRandom.nextBytes(byteId); - String id = Base64.encodeToString(byteId, Base64.DEFAULT); + String id = Base64.encodeToString( + byteId, Base64.NO_PADDING | Base64.NO_WRAP | Base64.URL_SAFE); return id; } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 92b6a0818de8..a391dbc1fa47 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -17,7 +17,9 @@ package com.android.server.pm.permission; import static android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY; +import static android.Manifest.permission.CAPTURE_AUDIO_HOTWORD; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.RECORD_AUDIO; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ERRORED; @@ -148,6 +150,7 @@ import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerService; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; +import com.android.server.pm.permission.PermissionManagerServiceInternal.HotwordDetectionServiceProvider; import com.android.server.pm.permission.PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener; import com.android.server.policy.PermissionPolicyInternal; import com.android.server.policy.SoftRestrictedPermissionPolicy; @@ -308,6 +311,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { @NonNull private final OnPermissionChangeListeners mOnPermissionChangeListeners; + @Nullable + private HotwordDetectionServiceProvider mHotwordDetectionServiceProvider; + // TODO: Take a look at the methods defined in the callback. // The callback was initially created to support the split between permission // manager and the package manager. However, it's started to be used for other @@ -5200,6 +5206,16 @@ public class PermissionManagerService extends IPermissionManager.Stub { public int[] getGidsForUid(int uid) { return PermissionManagerService.this.getGidsForUid(uid); } + + @Override + public void setHotwordDetectionServiceProvider(HotwordDetectionServiceProvider provider) { + mHotwordDetectionServiceProvider = provider; + } + + @Override + public HotwordDetectionServiceProvider getHotwordDetectionServiceProvider() { + return mHotwordDetectionServiceProvider; + } } /** @@ -5476,10 +5492,13 @@ public class PermissionManagerService extends IPermissionManager.Stub { private final @NonNull Context mContext; private final @NonNull AppOpsManager mAppOpsManager; + private final @NonNull PermissionManagerServiceInternal mPermissionManagerServiceInternal; PermissionCheckerService(@NonNull Context context) { mContext = context; mAppOpsManager = mContext.getSystemService(AppOpsManager.class); + mPermissionManagerServiceInternal = + LocalServices.getService(PermissionManagerServiceInternal.class); } @Override @@ -5492,8 +5511,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { Objects.requireNonNull(attributionSourceState); final AttributionSource attributionSource = new AttributionSource( attributionSourceState); - final int result = checkPermission(mContext, permission, attributionSource, message, - forDataDelivery, startDataDelivery, fromDatasource, attributedOp); + final int result = checkPermission(mContext, mPermissionManagerServiceInternal, + permission, attributionSource, message, forDataDelivery, startDataDelivery, + fromDatasource, attributedOp); // Finish any started op if some step in the attribution chain failed. if (startDataDelivery && result != PermissionChecker.PERMISSION_GRANTED && result != PermissionChecker.PERMISSION_SOFT_DENIED) { @@ -5582,10 +5602,11 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @PermissionCheckerManager.PermissionResult - private static int checkPermission(@NonNull Context context, @NonNull String permission, - @NonNull AttributionSource attributionSource, @Nullable String message, - boolean forDataDelivery, boolean startDataDelivery, boolean fromDatasource, - int attributedOp) { + private static int checkPermission(@NonNull Context context, + @NonNull PermissionManagerServiceInternal permissionManagerServiceInt, + @NonNull String permission, @NonNull AttributionSource attributionSource, + @Nullable String message, boolean forDataDelivery, boolean startDataDelivery, + boolean fromDatasource, int attributedOp) { PermissionInfo permissionInfo = sPlatformPermissions.get(permission); if (permissionInfo == null) { @@ -5602,22 +5623,25 @@ public class PermissionManagerService extends IPermissionManager.Stub { } if (permissionInfo.isAppOp()) { - return checkAppOpPermission(context, permission, attributionSource, message, - forDataDelivery, fromDatasource); + return checkAppOpPermission(context, permissionManagerServiceInt, permission, + attributionSource, message, forDataDelivery, fromDatasource); } if (permissionInfo.isRuntime()) { - return checkRuntimePermission(context, permission, attributionSource, message, - forDataDelivery, startDataDelivery, fromDatasource, attributedOp); + return checkRuntimePermission(context, permissionManagerServiceInt, permission, + attributionSource, message, forDataDelivery, startDataDelivery, + fromDatasource, attributedOp); } - if (!fromDatasource && !checkPermission(context, permission, attributionSource.getUid(), + if (!fromDatasource && !checkPermission(context, permissionManagerServiceInt, + permission, attributionSource.getUid(), attributionSource.getRenouncedPermissions())) { return PermissionChecker.PERMISSION_HARD_DENIED; } if (attributionSource.getNext() != null) { - return checkPermission(context, permission, attributionSource.getNext(), message, - forDataDelivery, startDataDelivery, /*fromDatasource*/ false, attributedOp); + return checkPermission(context, permissionManagerServiceInt, permission, + attributionSource.getNext(), message, forDataDelivery, startDataDelivery, + /*fromDatasource*/ false, attributedOp); } return PermissionChecker.PERMISSION_GRANTED; @@ -5625,6 +5649,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { @PermissionCheckerManager.PermissionResult private static int checkAppOpPermission(@NonNull Context context, + @NonNull PermissionManagerServiceInternal permissionManagerServiceInt, @NonNull String permission, @NonNull AttributionSource attributionSource, @Nullable String message, boolean forDataDelivery, boolean fromDatasource) { final int op = AppOpsManager.permissionToOpCode(permission); @@ -5668,13 +5693,13 @@ public class PermissionManagerService extends IPermissionManager.Stub { return PermissionChecker.PERMISSION_HARD_DENIED; } case AppOpsManager.MODE_DEFAULT: { - if (!skipCurrentChecks && !checkPermission(context, permission, - attributionSource.getUid(), attributionSource - .getRenouncedPermissions())) { + if (!skipCurrentChecks && !checkPermission(context, + permissionManagerServiceInt, permission, attributionSource.getUid(), + attributionSource.getRenouncedPermissions())) { return PermissionChecker.PERMISSION_HARD_DENIED; } - if (next != null && !checkPermission(context, permission, - next.getUid(), next.getRenouncedPermissions())) { + if (next != null && !checkPermission(context, permissionManagerServiceInt, + permission, next.getUid(), next.getRenouncedPermissions())) { return PermissionChecker.PERMISSION_HARD_DENIED; } } @@ -5689,6 +5714,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } private static int checkRuntimePermission(@NonNull Context context, + @NonNull PermissionManagerServiceInternal permissionManagerServiceInt, @NonNull String permission, @NonNull AttributionSource attributionSource, @Nullable String message, boolean forDataDelivery, boolean startDataDelivery, boolean fromDatasource, int attributedOp) { @@ -5713,13 +5739,13 @@ public class PermissionManagerService extends IPermissionManager.Stub { } // If we already checked the permission for this one, skip the work - if (!skipCurrentChecks && !checkPermission(context, permission, - current.getUid(), current.getRenouncedPermissions())) { + if (!skipCurrentChecks && !checkPermission(context, permissionManagerServiceInt, + permission, current.getUid(), current.getRenouncedPermissions())) { return PermissionChecker.PERMISSION_HARD_DENIED; } - if (next != null && !checkPermission(context, permission, - next.getUid(), next.getRenouncedPermissions())) { + if (next != null && !checkPermission(context, permissionManagerServiceInt, + permission, next.getUid(), next.getRenouncedPermissions())) { return PermissionChecker.PERMISSION_HARD_DENIED; } @@ -5774,10 +5800,26 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } - private static boolean checkPermission(@NonNull Context context, @NonNull String permission, - int uid, @NonNull Set<String> renouncedPermissions) { - final boolean permissionGranted = context.checkPermission(permission, /*pid*/ -1, + private static boolean checkPermission(@NonNull Context context, + @NonNull PermissionManagerServiceInternal permissionManagerServiceInt, + @NonNull String permission, int uid, @NonNull Set<String> renouncedPermissions) { + boolean permissionGranted = context.checkPermission(permission, /*pid*/ -1, uid) == PackageManager.PERMISSION_GRANTED; + + // Override certain permissions checks for the HotwordDetectionService. This service is + // an isolated service, which ordinarily cannot hold permissions. + // There's probably a cleaner, more generalizable way to do this. For now, this is + // the only use case for this, so simply override here. + if (!permissionGranted + && Process.isIsolated(uid) // simple check which fails-fast for the common case + && (permission.equals(RECORD_AUDIO) + || permission.equals(CAPTURE_AUDIO_HOTWORD))) { + HotwordDetectionServiceProvider hotwordServiceProvider = + permissionManagerServiceInt.getHotwordDetectionServiceProvider(); + permissionGranted = hotwordServiceProvider != null + && uid == hotwordServiceProvider.getUid(); + } + if (permissionGranted && renouncedPermissions.contains(permission) && context.checkPermission(Manifest.permission.RENOUNCE_PERMISSIONS, /*pid*/ -1, uid) == PackageManager.PERMISSION_GRANTED) { diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java index 895cabc33bab..f4fb8102d922 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java @@ -428,4 +428,28 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter } } } + + /** + * Sets the provider of the currently active HotwordDetectionService. + * + * @see HotwordDetectionServiceProvider + */ + void setHotwordDetectionServiceProvider(@Nullable HotwordDetectionServiceProvider provider); + + /** + * Gets the provider of the currently active HotwordDetectionService. + * + * @see HotwordDetectionServiceProvider + */ + @Nullable + HotwordDetectionServiceProvider getHotwordDetectionServiceProvider(); + + /** + * Provides the uid of the currently active + * {@link android.service.voice.HotwordDetectionService}, which should be granted RECORD_AUDIO + * and CAPTURE_AUDIO_HOTWORD permissions. + */ + interface HotwordDetectionServiceProvider { + int getUid(); + } } diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java index 70b5c62a4973..94005b2c8361 100644 --- a/services/core/java/com/android/server/policy/AppOpsPolicy.java +++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java @@ -33,7 +33,10 @@ import android.content.pm.ResolveInfo; import android.location.LocationManagerInternal; import android.net.Uri; import android.os.IBinder; +import android.os.Process; import android.os.UserHandle; +import android.service.voice.VoiceInteractionManagerInternal; +import android.service.voice.VoiceInteractionManagerInternal.HotwordDetectionServiceIdentity; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -78,6 +81,9 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat @NonNull private final RoleManager mRoleManager; + @NonNull + private final VoiceInteractionManagerInternal mVoiceInteractionManagerInternal; + /** * The locking policy around the location tags is a bit special. Since we want to * avoid grabbing the lock on every op note we are taking the approach where the @@ -101,6 +107,8 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat public AppOpsPolicy(@NonNull Context context) { mContext = context; mRoleManager = mContext.getSystemService(RoleManager.class); + mVoiceInteractionManagerInternal = LocalServices.getService( + VoiceInteractionManagerInternal.class); final LocationManagerInternal locationManagerInternal = LocalServices.getService( LocationManagerInternal.class); @@ -150,7 +158,7 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat public int checkOperation(int code, int uid, String packageName, @Nullable String attributionTag, boolean raw, QuintFunction<Integer, Integer, String, String, Boolean, Integer> superImpl) { - return superImpl.apply(code, uid, packageName, attributionTag, raw); + return superImpl.apply(code, resolveUid(code, uid), packageName, attributionTag, raw); } @Override @@ -164,8 +172,8 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat @Nullable String attributionTag, boolean shouldCollectAsyncNotedOp, @Nullable String message, boolean shouldCollectMessage, @NonNull HeptFunction<Integer, Integer, String, String, Boolean, String, Boolean, SyncNotedAppOp> superImpl) { - return superImpl.apply(resolveDatasourceOp(code, uid, packageName, attributionTag), uid, - packageName, attributionTag, shouldCollectAsyncNotedOp, + return superImpl.apply(resolveDatasourceOp(code, uid, packageName, attributionTag), + resolveUid(code, uid), packageName, attributionTag, shouldCollectAsyncNotedOp, message, shouldCollectMessage); } @@ -190,8 +198,9 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat String, Boolean, Boolean, String, Boolean, Integer, Integer, SyncNotedAppOp> superImpl) { return superImpl.apply(token, resolveDatasourceOp(code, uid, packageName, attributionTag), - uid, packageName, attributionTag, startIfModeDefault, shouldCollectAsyncNotedOp, - message, shouldCollectMessage, attributionFlags, attributionChainId); + resolveUid(code, uid), packageName, attributionTag, startIfModeDefault, + shouldCollectAsyncNotedOp, message, shouldCollectMessage, attributionFlags, + attributionChainId); } @Override @@ -404,4 +413,23 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } return code; } + + private int resolveUid(int code, int uid) { + // The HotwordDetectionService is an isolated service, which ordinarily cannot hold + // permissions. So we allow it to assume the owning package identity for certain + // operations. + // Note: The package name coming from the audio server is already the one for the owning + // package, so we don't need to modify it. + if (Process.isIsolated(uid) // simple check which fails-fast for the common case + && (code == AppOpsManager.OP_RECORD_AUDIO + || code == AppOpsManager.OP_RECORD_AUDIO_HOTWORD)) { + final HotwordDetectionServiceIdentity hotwordDetectionServiceIdentity = + mVoiceInteractionManagerInternal.getHotwordDetectionServiceIdentity(); + if (hotwordDetectionServiceIdentity != null + && uid == hotwordDetectionServiceIdentity.getIsolatedUid()) { + uid = hotwordDetectionServiceIdentity.getOwnerUid(); + } + } + return uid; + } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 22ddc8111f6e..e6adeb3abab8 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1181,6 +1181,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (FactoryTest.isLongPressOnPowerOffEnabled()) { return LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM; } + + // If the config indicates the assistant behavior but the device isn't yet provisioned, show + // global actions instead. + if (mLongPressOnPowerBehavior == LONG_PRESS_POWER_ASSISTANT && !isDeviceProvisioned()) { + return LONG_PRESS_POWER_GLOBAL_ACTIONS; + } + return mLongPressOnPowerBehavior; } diff --git a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java index e718ba3b17cf..631be380e2eb 100644 --- a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java +++ b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java @@ -135,6 +135,7 @@ class ServiceWatcherImpl<TBoundServiceInfo extends BoundServiceInfo> implements if (forceRebind || !Objects.equals(mServiceConnection.getBoundServiceInfo(), newBoundServiceInfo)) { + Log.i(TAG, "[" + mTag + "] chose new implementation " + newBoundServiceInfo); MyServiceConnection oldServiceConnection = mServiceConnection; MyServiceConnection newServiceConnection = new MyServiceConnection(newBoundServiceInfo); mServiceConnection = newServiceConnection; @@ -196,7 +197,9 @@ class ServiceWatcherImpl<TBoundServiceInfo extends BoundServiceInfo> implements return; } - Log.i(TAG, "[" + mTag + "] binding to " + mBoundServiceInfo); + if (D) { + Log.d(TAG, "[" + mTag + "] binding to " + mBoundServiceInfo); + } Intent bindIntent = new Intent(mBoundServiceInfo.getAction()).setComponent( mBoundServiceInfo.getComponentName()); @@ -255,9 +258,7 @@ class ServiceWatcherImpl<TBoundServiceInfo extends BoundServiceInfo> implements Preconditions.checkState(Looper.myLooper() == mHandler.getLooper()); Preconditions.checkState(mBinder == null); - if (D) { - Log.d(TAG, "[" + mTag + "] connected to " + component.toShortString()); - } + Log.i(TAG, "[" + mTag + "] connected to " + component.toShortString()); mBinder = binder; @@ -280,9 +281,7 @@ class ServiceWatcherImpl<TBoundServiceInfo extends BoundServiceInfo> implements return; } - if (D) { - Log.d(TAG, "[" + mTag + "] disconnected from " + mBoundServiceInfo); - } + Log.i(TAG, "[" + mTag + "] disconnected from " + mBoundServiceInfo); mBinder = null; if (mServiceListener != null) { @@ -294,9 +293,11 @@ class ServiceWatcherImpl<TBoundServiceInfo extends BoundServiceInfo> implements public final void onBindingDied(ComponentName component) { Preconditions.checkState(Looper.myLooper() == mHandler.getLooper()); - Log.i(TAG, "[" + mTag + "] " + mBoundServiceInfo + " died"); + Log.w(TAG, "[" + mTag + "] " + mBoundServiceInfo + " died"); - onServiceChanged(true); + // introduce a small delay to prevent spamming binding over and over, since the likely + // cause of a binding dying is some package event that may take time to recover from + mHandler.postDelayed(() -> onServiceChanged(true), 500); } @Override diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 299cde8ad1d8..03762b3ee8bf 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -25,6 +25,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.isSplitScreenWindowingMode; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.graphics.GraphicsProtos.dumpPointProto; +import static android.hardware.display.DisplayManager.SWITCHING_TYPE_NONE; import static android.hardware.input.InputManager.BLOCK_UNTRUSTED_TOUCHES; import static android.os.InputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.PowerManager.DRAW_WAKE_LOCK; @@ -5448,12 +5449,18 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mFrameRateSelectionPriority); } - final float refreshRate = refreshRatePolicy.getPreferredRefreshRate(this); - if (mAppPreferredFrameRate != refreshRate) { - mAppPreferredFrameRate = refreshRate; - getPendingTransaction().setFrameRate( - mSurfaceControl, mAppPreferredFrameRate, - Surface.FRAME_RATE_COMPATIBILITY_EXACT, Surface.CHANGE_FRAME_RATE_ALWAYS); + // If refresh rate switching is disabled there is no point to set the frame rate on the + // surface as the refresh rate will be limited by display manager to a single value + // and SurfaceFlinger wouldn't be able to change it anyways. + if (mWmService.mDisplayManagerInternal.getRefreshRateSwitchingType() + != SWITCHING_TYPE_NONE) { + final float refreshRate = refreshRatePolicy.getPreferredRefreshRate(this); + if (mAppPreferredFrameRate != refreshRate) { + mAppPreferredFrameRate = refreshRate; + getPendingTransaction().setFrameRate( + mSurfaceControl, mAppPreferredFrameRate, + Surface.FRAME_RATE_COMPATIBILITY_EXACT, Surface.CHANGE_FRAME_RATE_ALWAYS); + } } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 9a3573874471..1d27655055a0 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -22,6 +22,7 @@ import static android.Manifest.permission.REQUEST_PASSWORD_COMPLEXITY; import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK; import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; import static android.app.AppOpsManager.MODE_ALLOWED; +import static android.app.AppOpsManager.MODE_DEFAULT; import static android.app.admin.DeviceAdminReceiver.ACTION_COMPLIANCE_ACKNOWLEDGEMENT_REQUIRED; import static android.app.admin.DeviceAdminReceiver.EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE; import static android.app.admin.DevicePolicyManager.ACTION_CHECK_POLICY_COMPLIANCE; @@ -990,13 +991,24 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { @Override public void onUserRestrictionsChanged(int userId, Bundle newRestrictions, Bundle prevRestrictions) { - final boolean newlyDisallowed = - newRestrictions.getBoolean(UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE); - final boolean previouslyDisallowed = - prevRestrictions.getBoolean(UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE); - final boolean restrictionChanged = (newlyDisallowed != previouslyDisallowed); + resetCrossProfileIntentFiltersIfNeeded(userId, newRestrictions, prevRestrictions); + resetUserVpnIfNeeded(userId, newRestrictions, prevRestrictions); + } + + private void resetUserVpnIfNeeded( + int userId, Bundle newRestrictions, Bundle prevRestrictions) { + final boolean newlyEnforced = + !prevRestrictions.getBoolean(UserManager.DISALLOW_CONFIG_VPN) + && newRestrictions.getBoolean(UserManager.DISALLOW_CONFIG_VPN); + if (newlyEnforced) { + mDpms.clearUserConfiguredVpns(userId); + } + } - if (restrictionChanged) { + private void resetCrossProfileIntentFiltersIfNeeded( + int userId, Bundle newRestrictions, Bundle prevRestrictions) { + if (UserRestrictionsUtils.restrictionsChanged(prevRestrictions, newRestrictions, + UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE)) { final int parentId = mUserManagerInternal.getProfileParentId(userId); if (parentId == userId) { return; @@ -1007,13 +1019,55 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Slogf.i(LOG_TAG, "Resetting cross-profile intent filters on restriction " + "change"); mDpms.resetDefaultCrossProfileIntentFilters(parentId); - mContext.sendBroadcastAsUser(new Intent( - DevicePolicyManager.ACTION_DATA_SHARING_RESTRICTION_APPLIED), + mContext.sendBroadcastAsUser( + new Intent(DevicePolicyManager.ACTION_DATA_SHARING_RESTRICTION_APPLIED), UserHandle.of(userId)); } } } + private void clearUserConfiguredVpns(int userId) { + final String adminConfiguredVpnPkg; + synchronized (getLockObject()) { + final ActiveAdmin owner = getDeviceOrProfileOwnerAdminLocked(userId); + if (owner == null) { + Slogf.wtf(LOG_TAG, "Admin not found"); + return; + } + adminConfiguredVpnPkg = owner.mAlwaysOnVpnPackage; + } + + // Clear always-on configuration if it wasn't set by the admin. + if (adminConfiguredVpnPkg == null) { + mInjector.getVpnManager().setAlwaysOnVpnPackageForUser(userId, null, false, null); + } + + // Clear app authorizations to establish VPNs. When DISALLOW_CONFIG_VPN is enforced apps + // won't be able to get those authorizations unless it is configured by an admin. + final List<AppOpsManager.PackageOps> allVpnOps = mInjector.getAppOpsManager() + .getPackagesForOps(new int[] {AppOpsManager.OP_ACTIVATE_VPN}); + if (allVpnOps == null) { + return; + } + for (AppOpsManager.PackageOps pkgOps : allVpnOps) { + if (UserHandle.getUserId(pkgOps.getUid()) != userId + || pkgOps.getPackageName().equals(adminConfiguredVpnPkg)) { + continue; + } + if (pkgOps.getOps().size() != 1) { + Slogf.wtf(LOG_TAG, "Unexpected number of ops returned"); + continue; + } + final @Mode int mode = pkgOps.getOps().get(0).getMode(); + if (mode == MODE_ALLOWED) { + Slogf.i(LOG_TAG, String.format("Revoking VPN authorization for package %s uid %d", + pkgOps.getPackageName(), pkgOps.getUid())); + mInjector.getAppOpsManager().setMode(AppOpsManager.OP_ACTIVATE_VPN, pkgOps.getUid(), + pkgOps.getPackageName(), MODE_DEFAULT); + } + } + } + private final class UserLifecycleListener implements UserManagerInternal.UserLifecycleListener { @Override @@ -6559,6 +6613,19 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Preconditions.checkCallAuthorization(isDeviceOwner(caller) || isProfileOwner(caller)); checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_ALWAYS_ON_VPN_PACKAGE); + if (vpnPackage == null) { + final String prevVpnPackage; + synchronized (getLockObject()) { + prevVpnPackage = getProfileOwnerOrDeviceOwnerLocked(caller).mAlwaysOnVpnPackage; + // If the admin is clearing VPN package but hasn't configure any VPN previously, + // ignore it so that it doesn't interfere with user-configured VPNs. + if (TextUtils.isEmpty(prevVpnPackage)) { + return true; + } + } + revokeVpnAuthorizationForPackage(prevVpnPackage, caller.getUserId()); + } + final int userId = caller.getUserId(); mInjector.binderWithCleanCallingIdentity(() -> { if (vpnPackage != null && !isPackageInstalledForUser(vpnPackage, userId)) { @@ -6581,14 +6648,14 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { userId, vpnPackage, lockdown, lockdownAllowlist)) { throw new UnsupportedOperationException(); } - DevicePolicyEventLogger - .createEvent(DevicePolicyEnums.SET_ALWAYS_ON_VPN_PACKAGE) - .setAdmin(caller.getComponentName()) - .setStrings(vpnPackage) - .setBoolean(lockdown) - .setInt(lockdownAllowlist != null ? lockdownAllowlist.size() : 0) - .write(); }); + DevicePolicyEventLogger + .createEvent(DevicePolicyEnums.SET_ALWAYS_ON_VPN_PACKAGE) + .setAdmin(caller.getComponentName()) + .setStrings(vpnPackage) + .setBoolean(lockdown) + .setInt(lockdownAllowlist != null ? lockdownAllowlist.size() : 0) + .write(); synchronized (getLockObject()) { ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(caller); if (!TextUtils.equals(vpnPackage, admin.mAlwaysOnVpnPackage) @@ -6601,6 +6668,23 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return true; } + private void revokeVpnAuthorizationForPackage(String vpnPackage, int userId) { + mInjector.binderWithCleanCallingIdentity(() -> { + try { + final ApplicationInfo ai = mIPackageManager.getApplicationInfo( + vpnPackage, /* flags= */ 0, userId); + if (ai == null) { + Slogf.w(LOG_TAG, "Non-existent VPN package: " + vpnPackage); + } else { + mInjector.getAppOpsManager().setMode(AppOpsManager.OP_ACTIVATE_VPN, + ai.uid, vpnPackage, MODE_DEFAULT); + } + } catch (RemoteException e) { + Slogf.e(LOG_TAG, "Can't talk to package managed", e); + } + }); + } + @Override public String getAlwaysOnVpnPackage(ComponentName admin) throws SecurityException { Objects.requireNonNull(admin, "ComponentName is null"); @@ -8390,12 +8474,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return who != null && who.equals(profileOwner); } - private boolean isProfileOwnerUncheckedLocked(ComponentName who, int userId) { - ensureLocked(); - final ComponentName profileOwner = mOwners.getProfileOwnerComponent(userId); - return who != null && who.equals(profileOwner); - } - /** * Returns {@code true} if the provided caller identity is of a profile owner. * @param caller identity of caller. @@ -10005,14 +10083,23 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return true; } - private AccessibilityManager getAccessibilityManagerForUser(int userId) { + /** + * Invoke a method in AccessibilityManager ensuring the client is removed. + */ + private <T> T withAccessibilityManager( + int userId, Function<AccessibilityManager, T> function) { // Not using AccessibilityManager.getInstance because that guesses // at the user you require based on callingUid and caches for a given // process. - IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); - IAccessibilityManager service = iBinder == null + final IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); + final IAccessibilityManager service = iBinder == null ? null : IAccessibilityManager.Stub.asInterface(iBinder); - return new AccessibilityManager(mContext, service, userId); + final AccessibilityManager am = new AccessibilityManager(mContext, service, userId); + try { + return function.apply(am); + } finally { + am.removeClient(); + } } @Override @@ -10025,22 +10112,21 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { if (packageList != null) { int userId = caller.getUserId(); - List<AccessibilityServiceInfo> enabledServices = null; + final List<AccessibilityServiceInfo> enabledServices; long id = mInjector.binderClearCallingIdentity(); try { UserInfo user = getUserInfo(userId); if (user.isManagedProfile()) { userId = user.profileGroupId; } - AccessibilityManager accessibilityManager = getAccessibilityManagerForUser(userId); - enabledServices = accessibilityManager.getEnabledAccessibilityServiceList( - FEEDBACK_ALL_MASK); + enabledServices = withAccessibilityManager(userId, + am -> am.getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK)); } finally { mInjector.binderRestoreCallingIdentity(id); } if (enabledServices != null) { - List<String> enabledPackages = new ArrayList<String>(); + List<String> enabledPackages = new ArrayList<>(); for (AccessibilityServiceInfo service : enabledServices) { enabledPackages.add(service.getResolveInfo().serviceInfo.packageName); } @@ -10122,10 +10208,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { if (user.isManagedProfile()) { userId = user.profileGroupId; } - AccessibilityManager accessibilityManager = - getAccessibilityManagerForUser(userId); - List<AccessibilityServiceInfo> installedServices = - accessibilityManager.getInstalledAccessibilityServiceList(); + final List<AccessibilityServiceInfo> installedServices = + withAccessibilityManager(userId, + AccessibilityManager::getInstalledAccessibilityServiceList); if (installedServices != null) { for (AccessibilityServiceInfo service : installedServices) { @@ -13660,16 +13745,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { + " is not device owner"); } - private ComponentName getOwnerComponent(String packageName, int userId) { - if (isDeviceOwnerPackage(packageName, userId)) { - return mOwners.getDeviceOwnerComponent(); - } - if (isProfileOwnerPackage(packageName, userId)) { - return mOwners.getProfileOwnerComponent(userId); - } - return null; - } - /** * Return device owner or profile owner set on a given user. */ diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PersonalAppsSuspensionHelper.java b/services/devicepolicy/java/com/android/server/devicepolicy/PersonalAppsSuspensionHelper.java index 48d2d73543fb..532823ad8367 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/PersonalAppsSuspensionHelper.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/PersonalAppsSuspensionHelper.java @@ -18,8 +18,6 @@ package com.android.server.devicepolicy; import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK; -import static com.android.server.devicepolicy.DevicePolicyManagerService.LOG_TAG; - import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.Nullable; import android.annotation.UserIdInt; @@ -142,9 +140,21 @@ public final class PersonalAppsSuspensionHelper { } private List<String> getAccessibilityServices() { - final List<AccessibilityServiceInfo> accessibilityServiceInfos = - getAccessibilityManagerForUser(mContext.getUserId()) - .getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK); + final List<AccessibilityServiceInfo> accessibilityServiceInfos; + // Not using AccessibilityManager.getInstance because that guesses + // at the user you require based on callingUid and caches for a given + // process. + final IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); + final IAccessibilityManager service = iBinder == null + ? null : IAccessibilityManager.Stub.asInterface(iBinder); + final AccessibilityManager am = + new AccessibilityManager(mContext, service, mContext.getUserId()); + try { + accessibilityServiceInfos = am.getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK); + } finally { + am.removeClient(); + } + final List<String> result = new ArrayList<>(); for (final AccessibilityServiceInfo serviceInfo : accessibilityServiceInfos) { final ComponentName componentName = @@ -192,12 +202,6 @@ public final class PersonalAppsSuspensionHelper { return resolveInfos != null && !resolveInfos.isEmpty(); } - private AccessibilityManager getAccessibilityManagerForUser(int userId) { - final IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); - final IAccessibilityManager service = - iBinder == null ? null : IAccessibilityManager.Stub.asInterface(iBinder); - return new AccessibilityManager(mContext, service, userId); - } void dump(IndentingPrintWriter pw) { pw.println("PersonalAppsSuspensionHelper"); 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 654d9fcf9210..fd41b9c19a2e 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -15,6 +15,9 @@ */ package com.android.server.devicepolicy; +import static android.app.AppOpsManager.MODE_ALLOWED; +import static android.app.AppOpsManager.MODE_DEFAULT; +import static android.app.AppOpsManager.OP_ACTIVATE_VPN; import static android.app.Notification.EXTRA_TEXT; import static android.app.Notification.EXTRA_TITLE; import static android.app.admin.DevicePolicyManager.ACTION_CHECK_POLICY_COMPLIANCE; @@ -7436,6 +7439,101 @@ public class DevicePolicyManagerTest extends DpmTestBase { assertThrows(SecurityException.class, () -> dpm.setRecommendedGlobalProxy(admin1, null)); } + @Test + public void testSetAlwaysOnVpnPackage_clearsAdminVpn() throws Exception { + setDeviceOwner(); + + when(getServices().vpnManager + .setAlwaysOnVpnPackageForUser(anyInt(), any(), anyBoolean(), any())) + .thenReturn(true); + + // Set VPN package to admin package. + dpm.setAlwaysOnVpnPackage(admin1, admin1.getPackageName(), false, null); + + verify(getServices().vpnManager).setAlwaysOnVpnPackageForUser( + UserHandle.USER_SYSTEM, admin1.getPackageName(), false, null); + + // Clear VPN package. + dpm.setAlwaysOnVpnPackage(admin1, null, false, null); + + // Change should be propagated to VpnManager + verify(getServices().vpnManager).setAlwaysOnVpnPackageForUser( + UserHandle.USER_SYSTEM, null, false, null); + // The package should lose authorization to start VPN. + verify(getServices().appOpsManager).setMode(OP_ACTIVATE_VPN, + DpmMockContext.CALLER_SYSTEM_USER_UID, admin1.getPackageName(), MODE_DEFAULT); + } + + @Test + public void testSetAlwaysOnVpnPackage_doesntKillUserVpn() throws Exception { + setDeviceOwner(); + + when(getServices().vpnManager + .setAlwaysOnVpnPackageForUser(anyInt(), any(), anyBoolean(), any())) + .thenReturn(true); + + // this time it shouldn't go into VpnManager anymore. + dpm.setAlwaysOnVpnPackage(admin1, null, false, null); + + verifyNoMoreInteractions(getServices().vpnManager); + verifyNoMoreInteractions(getServices().appOpsManager); + } + + @Test + public void testDisallowConfigVpn_clearsUserVpn() throws Exception { + final String userVpnPackage = "org.some.vpn.servcie"; + final int userVpnUid = 20374; + + setDeviceOwner(); + + setupVpnAuthorization(userVpnPackage, userVpnUid); + + simulateRestrictionAdded(UserManager.DISALLOW_CONFIG_VPN); + + verify(getServices().vpnManager).setAlwaysOnVpnPackageForUser( + UserHandle.USER_SYSTEM, null, false, null); + verify(getServices().appOpsManager).setMode(OP_ACTIVATE_VPN, + userVpnUid, userVpnPackage, MODE_DEFAULT); + } + + @Test + public void testDisallowConfigVpn_doesntKillAdminVpn() throws Exception { + setDeviceOwner(); + + when(getServices().vpnManager + .setAlwaysOnVpnPackageForUser(anyInt(), any(), anyBoolean(), any())) + .thenReturn(true); + + // Set VPN package to admin package. + dpm.setAlwaysOnVpnPackage(admin1, admin1.getPackageName(), false, null); + setupVpnAuthorization(admin1.getPackageName(), DpmMockContext.CALLER_SYSTEM_USER_UID); + clearInvocations(getServices().vpnManager); + + simulateRestrictionAdded(UserManager.DISALLOW_CONFIG_VPN); + + // Admin-set package should remain always-on and should retain its authorization. + verifyNoMoreInteractions(getServices().vpnManager); + verify(getServices().appOpsManager, never()).setMode(OP_ACTIVATE_VPN, + DpmMockContext.CALLER_SYSTEM_USER_UID, admin1.getPackageName(), MODE_DEFAULT); + } + + private void setupVpnAuthorization(String userVpnPackage, int userVpnUid) { + final AppOpsManager.PackageOps vpnOp = new AppOpsManager.PackageOps(userVpnPackage, + userVpnUid, List.of(new AppOpsManager.OpEntry( + OP_ACTIVATE_VPN, MODE_ALLOWED, Collections.emptyMap()))); + when(getServices().appOpsManager.getPackagesForOps(any(int[].class))) + .thenReturn(List.of(vpnOp)); + } + + private void simulateRestrictionAdded(String restriction) { + RestrictionsListener listener = new RestrictionsListener( + mServiceContext, getServices().userManagerInternal, dpms); + + final Bundle newRestrictions = new Bundle(); + newRestrictions.putBoolean(restriction, true); + listener.onUserRestrictionsChanged(UserHandle.USER_SYSTEM, newRestrictions, new Bundle()); + } + private void setUserUnlocked(int userHandle, boolean unlocked) { when(getServices().userManager.isUserUnlocked(eq(userHandle))).thenReturn(unlocked); } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java index 2e004683acdb..d10419d4bfc5 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java @@ -230,6 +230,8 @@ public class DpmMockContext extends MockContext { return mMockSystemServices.appOpsManager; case Context.CROSS_PROFILE_APPS_SERVICE: return mMockSystemServices.crossProfileApps; + case Context.VPN_MANAGEMENT_SERVICE: + return mMockSystemServices.vpnManager; } throw new UnsupportedOperationException(); } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java b/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java index 9cc057252a4c..8a2919d55216 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java @@ -50,6 +50,7 @@ import android.media.IAudioService; import android.net.ConnectivityManager; import android.net.IIpConnectivityMetrics; import android.net.Uri; +import android.net.VpnManager; import android.net.wifi.WifiManager; import android.os.Handler; import android.os.PowerManager; @@ -123,6 +124,7 @@ public class MockSystemServices { public final PersistentDataBlockManagerInternal persistentDataBlockManagerInternal; public final AppOpsManager appOpsManager; public final UsbManager usbManager; + public final VpnManager vpnManager; /** Note this is a partial mock, not a real mock. */ public final PackageManager packageManager; public final BuildMock buildMock = new BuildMock(); @@ -169,6 +171,7 @@ public class MockSystemServices { persistentDataBlockManagerInternal = mock(PersistentDataBlockManagerInternal.class); appOpsManager = mock(AppOpsManager.class); usbManager = mock(UsbManager.class); + vpnManager = mock(VpnManager.class); // Package manager is huge, so we use a partial mock instead. packageManager = spy(realContext.getPackageManager()); diff --git a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java index 1ee646c57b14..e6348a50566c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java @@ -29,6 +29,7 @@ import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.hardware.display.DisplayManager; import android.platform.test.annotations.Presubmit; import android.view.Display.Mode; import android.view.DisplayInfo; @@ -56,6 +57,13 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { private RefreshRatePolicy mRefreshRatePolicy; private HighRefreshRateDenylist mDenylist = mock(HighRefreshRateDenylist.class); + WindowState createWindow(String name) { + WindowState window = createWindow(null, TYPE_APPLICATION, name); + when(window.mWmService.mDisplayManagerInternal.getRefreshRateSwitchingType()) + .thenReturn(DisplayManager.SWITCHING_TYPE_WITHIN_GROUPS); + return window; + } + @Before public void setUp() { DisplayInfo di = new DisplayInfo(mDisplayInfo); @@ -73,7 +81,7 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void basicTest() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertNotNull("Window state is created", appWindow); assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); @@ -97,7 +105,7 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void testApplicationInFocusWithoutModeId() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); assertEquals(appWindow.getDisplayContent().getDisplayPolicy().getRefreshRatePolicy() .getPreferredModeId(appWindow), 0); @@ -128,7 +136,7 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void testApplicationInFocusWithModeId() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); @@ -165,11 +173,11 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void testApplicationNotInFocusWithModeId() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); - final WindowState inFocusWindow = createWindow(null, TYPE_APPLICATION, "inFocus"); + final WindowState inFocusWindow = createWindow("inFocus"); appWindow.mToken.mDisplayContent.mCurrentFocus = inFocusWindow; appWindow.updateFrameRateSelectionPriorityIfNeeded(); @@ -194,11 +202,11 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void testApplicationNotInFocusWithoutModeId() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); - final WindowState inFocusWindow = createWindow(null, TYPE_APPLICATION, "inFocus"); + final WindowState inFocusWindow = createWindow("inFocus"); appWindow.mToken.mDisplayContent.mCurrentFocus = inFocusWindow; appWindow.updateFrameRateSelectionPriorityIfNeeded(); @@ -221,7 +229,7 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { @Test public void testPreferredRefreshRate() { - final WindowState appWindow = createWindow(null, TYPE_APPLICATION, "appWindow"); + final WindowState appWindow = createWindow("appWindow"); assertNotNull("Window state is created", appWindow); when(appWindow.getDisplayContent().getDisplayPolicy()).thenReturn(mDisplayPolicy); @@ -246,4 +254,31 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { appWindow.getSurfaceControl(), 60, Surface.FRAME_RATE_COMPATIBILITY_EXACT, Surface.CHANGE_FRAME_RATE_ALWAYS); } + + @Test + public void testSwitchingTypeNone() { + final WindowState appWindow = createWindow("appWindow"); + when(appWindow.mWmService.mDisplayManagerInternal.getRefreshRateSwitchingType()) + .thenReturn(DisplayManager.SWITCHING_TYPE_NONE); + + assertEquals(appWindow.mFrameRateSelectionPriority, RefreshRatePolicy.LAYER_PRIORITY_UNSET); + assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); + + // Update the mode ID to a requested number. + appWindow.mAttrs.preferredDisplayModeId = 1; + appWindow.updateFrameRateSelectionPriorityIfNeeded(); + + assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); + + // Remove the mode ID request. + appWindow.mAttrs.preferredDisplayModeId = 0; + appWindow.updateFrameRateSelectionPriorityIfNeeded(); + + assertEquals(appWindow.mAppPreferredFrameRate, 0, FLOAT_TOLERANCE); + + verify(appWindow.getPendingTransaction()).setFrameRateSelectionPriority( + appWindow.getSurfaceControl(), RefreshRatePolicy.LAYER_PRIORITY_UNSET); + verify(appWindow.getPendingTransaction(), never()).setFrameRate( + any(SurfaceControl.class), anyInt(), anyInt(), anyInt()); + } } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java index 39cb4588b57a..17303a4aa7e1 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java @@ -34,6 +34,7 @@ import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.MediaRecorder; +import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.IRemoteCallback; @@ -48,6 +49,7 @@ import android.service.voice.HotwordRejectedResult; import android.service.voice.IDspHotwordDetectionCallback; import android.service.voice.IHotwordDetectionService; import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback; +import android.service.voice.VoiceInteractionManagerInternal.HotwordDetectionServiceIdentity; import android.util.Pair; import android.util.Slog; import android.view.contentcapture.IContentCaptureManager; @@ -56,6 +58,8 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IHotwordRecognitionStatusCallback; import com.android.internal.infra.AndroidFuture; import com.android.internal.infra.ServiceConnector; +import com.android.server.LocalServices; +import com.android.server.pm.permission.PermissionManagerServiceInternal; import java.io.Closeable; import java.io.IOException; @@ -94,20 +98,24 @@ final class HotwordDetectionConnection { private final AtomicBoolean mUpdateStateFinish = new AtomicBoolean(false); final Object mLock; + final int mVoiceInteractionServiceUid; final ComponentName mDetectionComponentName; final int mUser; final Context mContext; final @NonNull ServiceConnector<IHotwordDetectionService> mRemoteHotwordDetectionService; boolean mBound; + volatile HotwordDetectionServiceIdentity mIdentity; @GuardedBy("mLock") private ParcelFileDescriptor mCurrentAudioSink; - HotwordDetectionConnection(Object lock, Context context, ComponentName serviceName, - int userId, boolean bindInstantServiceAllowed, @Nullable PersistableBundle options, - @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { + HotwordDetectionConnection(Object lock, Context context, int voiceInteractionServiceUid, + ComponentName serviceName, int userId, boolean bindInstantServiceAllowed, + @Nullable PersistableBundle options, @Nullable SharedMemory sharedMemory, + IHotwordRecognitionStatusCallback callback) { mLock = lock; mContext = context; + mVoiceInteractionServiceUid = voiceInteractionServiceUid; mDetectionComponentName = serviceName; mUser = userId; final Intent intent = new Intent(HotwordDetectionService.SERVICE_INTERFACE); @@ -148,8 +156,9 @@ final class HotwordDetectionConnection { updateStateLocked(options, sharedMemory); return; } - updateStateWithCallbackLocked(options, sharedMemory, callback); + updateAudioFlinger(); updateContentCaptureManager(); + updateStateWithCallbackLocked(options, sharedMemory, callback); } private void updateStateWithCallbackLocked(PersistableBundle options, @@ -164,7 +173,15 @@ final class HotwordDetectionConnection { public void sendResult(Bundle bundle) throws RemoteException { if (DEBUG) { Slog.d(TAG, "updateState finish"); + Slog.d(TAG, "updating hotword UID " + Binder.getCallingUid()); } + // TODO: Do this earlier than this callback and have the provider point to the + // current state stored in VoiceInteractionManagerServiceImpl. + final int uid = Binder.getCallingUid(); + LocalServices.getService(PermissionManagerServiceInternal.class) + .setHotwordDetectionServiceProvider(() -> uid); + mIdentity = + new HotwordDetectionServiceIdentity(uid, mVoiceInteractionServiceUid); future.complete(null); try { if (mUpdateStateFinish.getAndSet(true)) { @@ -213,6 +230,15 @@ final class HotwordDetectionConnection { }); } + private void updateAudioFlinger() { + // TODO: Consider using a proxy that limits the exposed API surface. + IBinder audioFlinger = ServiceManager.getService("media.audio_flinger"); + if (audioFlinger == null) { + throw new IllegalStateException("Service media.audio_flinger wasn't found."); + } + mRemoteHotwordDetectionService.post(service -> service.updateAudioFlinger(audioFlinger)); + } + private void updateContentCaptureManager() { IBinder b = ServiceManager .getService(Context.CONTENT_CAPTURE_MANAGER_SERVICE); @@ -235,6 +261,9 @@ final class HotwordDetectionConnection { if (mBound) { mRemoteHotwordDetectionService.unbind(); mBound = false; + LocalServices.getService(PermissionManagerServiceInternal.class) + .setHotwordDetectionServiceProvider(null); + mIdentity = null; } } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index f3d80b13f290..a14912e5593d 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -251,6 +251,26 @@ public class VoiceInteractionManagerService extends SystemService { return TextUtils.equals(packageName, session.mSessionComponentName.getPackageName()); } + + @Override + public HotwordDetectionServiceIdentity getHotwordDetectionServiceIdentity() { + // IMPORTANT: This is called when performing permission checks; do not lock! + + // TODO: Have AppOpsPolicy register a listener instead of calling in here everytime. + // Then also remove the `volatile`s that were added with this method. + + VoiceInteractionManagerServiceImpl impl = + VoiceInteractionManagerService.this.mServiceStub.mImpl; + if (impl == null) { + return null; + } + HotwordDetectionConnection hotwordDetectionConnection = + impl.mHotwordDetectionConnection; + if (hotwordDetectionConnection == null) { + return null; + } + return hotwordDetectionConnection.mIdentity; + } } // implementation entry point and binder service @@ -258,7 +278,7 @@ public class VoiceInteractionManagerService extends SystemService { class VoiceInteractionManagerServiceStub extends IVoiceInteractionManagerService.Stub { - VoiceInteractionManagerServiceImpl mImpl; + volatile VoiceInteractionManagerServiceImpl mImpl; private boolean mSafeMode; private int mCurUser; diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java index 2206b0a61b9e..ca30bc51e046 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java @@ -98,7 +98,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne final ComponentName mHotwordDetectionComponentName; boolean mBound = false; IVoiceInteractionService mService; - HotwordDetectionConnection mHotwordDetectionConnection; + volatile HotwordDetectionConnection mHotwordDetectionConnection; VoiceInteractionSessionConnection mActiveSession; int mDisabledShowContext; @@ -447,8 +447,8 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne if (mHotwordDetectionConnection == null) { mHotwordDetectionConnection = new HotwordDetectionConnection(mServiceStub, mContext, - mHotwordDetectionComponentName, mUser, /* bindInstantServiceAllowed= */ false, - options, sharedMemory, callback); + mInfo.getServiceInfo().applicationInfo.uid, mHotwordDetectionComponentName, + mUser, /* bindInstantServiceAllowed= */ false, options, sharedMemory, callback); } else { mHotwordDetectionConnection.updateStateLocked(options, sharedMemory); } diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index c9996fb7141e..7f1ea8fa9614 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -33,6 +33,7 @@ import android.os.PersistableBundle; import android.os.RemoteException; import android.service.carrier.CarrierService; import android.telecom.TelecomManager; +import android.telephony.data.DataCallResponse; import android.telephony.gba.TlsParams; import android.telephony.gba.UaSecurityProtocolIdentifier; import android.telephony.ims.ImsReasonInfo; @@ -1052,6 +1053,21 @@ public class CarrierConfigManager { "carrier_data_call_apn_retry_after_disconnect_long"; /** + * The maximum times for telephony to retry data setup on the same APN requested by + * network through the data setup response retry timer + * {@link DataCallResponse#getRetryDurationMillis()}. This is to prevent that network keeps + * asking device to retry data setup forever and causes power consumption issue. For infinite + * retring same APN, configure this as 2147483647 (i.e. {@link Integer#MAX_VALUE}). + * + * Note if network does not suggest any retry timer, frameworks uses the retry configuration + * from {@link #KEY_CARRIER_DATA_CALL_RETRY_CONFIG_STRINGS}, and the maximum retry times could + * be configured there. + * @hide + */ + public static final String KEY_CARRIER_DATA_CALL_RETRY_NETWORK_REQUESTED_MAX_COUNT_INT = + "carrier_data_call_retry_network_requested_max_count_int"; + + /** * Data call setup permanent failure causes by the carrier */ public static final String KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS = @@ -5148,6 +5164,7 @@ public class CarrierConfigManager { sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_DELAY_DEFAULT_LONG, 20000); sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_DELAY_FASTER_LONG, 3000); sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_RETRY_AFTER_DISCONNECT_LONG, 10000); + sDefaults.putInt(KEY_CARRIER_DATA_CALL_RETRY_NETWORK_REQUESTED_MAX_COUNT_INT, 3); sDefaults.putString(KEY_CARRIER_ERI_FILE_NAME_STRING, "eri.xml"); sDefaults.putInt(KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT, 7200); sDefaults.putStringArray(KEY_CARRIER_METERED_APN_TYPES_STRINGS, diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PictureCaptureDemo.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PictureCaptureDemo.java index 029e302d0382..15568ac72227 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/PictureCaptureDemo.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PictureCaptureDemo.java @@ -34,13 +34,14 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.ProgressBar; +import android.widget.TextView; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; import java.util.Random; -import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Future; public class PictureCaptureDemo extends Activity { @Override @@ -77,6 +78,12 @@ public class PictureCaptureDemo extends Activity { iv2.setImageBitmap(Bitmap.createBitmap(picture, 100, 100, Bitmap.Config.HARDWARE)); inner.addView(iv2, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + TextView hello = new TextView(this); + hello.setText("I'm on a layer!"); + hello.setLayerType(View.LAYER_TYPE_HARDWARE, null); + inner.addView(hello, + new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + layout.addView(inner, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); // For testing with a functor in the tree @@ -84,11 +91,13 @@ public class PictureCaptureDemo extends Activity { wv.setWebViewClient(new WebViewClient()); wv.setWebChromeClient(new WebChromeClient()); wv.loadUrl("https://google.com"); - layout.addView(wv, new LayoutParams(LayoutParams.MATCH_PARENT, 400)); + LayoutParams wvParams = new LayoutParams(LayoutParams.MATCH_PARENT, 400); + wvParams.bottomMargin = 50; + layout.addView(wv, wvParams); SurfaceView mySurfaceView = new SurfaceView(this); layout.addView(mySurfaceView, - new LayoutParams(LayoutParams.MATCH_PARENT, 600)); + new LayoutParams(LayoutParams.MATCH_PARENT, 600, 1f)); setContentView(layout); @@ -98,22 +107,29 @@ public class PictureCaptureDemo extends Activity { @Override public void surfaceCreated(SurfaceHolder holder) { final Random rand = new Random(); + OutputStream renderingStream = new ByteArrayOutputStream() { + @Override + public void flush() throws IOException { + Picture picture = Picture.createFromStream( + new ByteArrayInputStream(buf, 0, count)); + Canvas canvas = holder.lockCanvas(); + if (canvas != null && picture != null) { + canvas.drawPicture(picture); + holder.unlockCanvasAndPost(canvas); + } + reset(); + } + }; + mStopCapture = ViewDebug.startRenderingCommandsCapture(mySurfaceView, - mCaptureThread, (picture) -> { + Executors.newSingleThreadExecutor(), () -> { if (rand.nextInt(20) == 0) { try { Thread.sleep(100); } catch (InterruptedException e) { } } - Canvas canvas = holder.lockCanvas(); - if (canvas == null) { - return false; - } - canvas.drawPicture(picture); - holder.unlockCanvasAndPost(canvas); - picture.close(); - return true; + return renderingStream; }); } @@ -134,20 +150,4 @@ public class PictureCaptureDemo extends Activity { } }); } - - ExecutorService mCaptureThread = Executors.newSingleThreadExecutor(); - ExecutorService mExecutor = Executors.newSingleThreadExecutor(); - - Picture deepCopy(Picture src) { - try { - PipedInputStream inputStream = new PipedInputStream(); - PipedOutputStream outputStream = new PipedOutputStream(inputStream); - Future<Picture> future = mExecutor.submit(() -> Picture.createFromStream(inputStream)); - src.writeToStream(outputStream); - outputStream.close(); - return future.get(); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } } diff --git a/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java b/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java index 9fd190cc12fe..ccd63f94de54 100644 --- a/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java +++ b/tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java @@ -139,6 +139,7 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test { * Tests that duplicate packages in apk-in-apex and apk should fail to install. */ @Test + @LargeTest public void testDuplicateApkInApexShouldFail() throws Exception { pushTestApex(); runPhase("testDuplicateApkInApexShouldFail_Commit"); @@ -290,6 +291,7 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test { } @Test + @LargeTest public void testOrphanedStagingDirectoryGetsCleanedUpOnReboot() throws Exception { //create random directories in /data/app-staging folder getDevice().enableAdbRoot(); @@ -305,6 +307,7 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test { } @Test + @LargeTest public void testFailStagedSessionIfStagingDirectoryDeleted() throws Exception { // Create a staged session runPhase("testFailStagedSessionIfStagingDirectoryDeleted_Commit"); |