diff options
291 files changed, 3869 insertions, 1629 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 216bbab882a9..bba21f418e41 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -24820,7 +24820,7 @@ package android.media { method public android.view.Surface getSurface(); method public boolean isPrivacySensitive(); method public void pause() throws java.lang.IllegalStateException; - method public void prepare() throws java.io.IOException, java.lang.IllegalStateException; + method @RequiresPermission(value=android.Manifest.permission.RECORD_AUDIO, conditional=true) public void prepare() throws java.io.IOException, java.lang.IllegalStateException; method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback); method public void release(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); @@ -24861,7 +24861,7 @@ package android.media { method public void setVideoProfile(@NonNull android.media.EncoderProfiles.VideoProfile); method public void setVideoSize(int, int) throws java.lang.IllegalStateException; method public void setVideoSource(int) throws java.lang.IllegalStateException; - method public void start() throws java.lang.IllegalStateException; + method @RequiresPermission(value=android.Manifest.permission.RECORD_AUDIO, conditional=true) public void start() throws java.lang.IllegalStateException; method public void stop() throws java.lang.IllegalStateException; method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback); field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64 diff --git a/core/java/android/app/ApplicationStartInfo.java b/core/java/android/app/ApplicationStartInfo.java index 2e8031dd22fe..2559bd036039 100644 --- a/core/java/android/app/ApplicationStartInfo.java +++ b/core/java/android/app/ApplicationStartInfo.java @@ -231,9 +231,9 @@ public final class ApplicationStartInfo implements Parcelable { public static final int START_COMPONENT_OTHER = 5; /** - * @see #getMonoticCreationTimeMs + * @see #getMonotonicCreationTimeMs */ - private long mMonoticCreationTimeMs; + private long mMonotonicCreationTimeMs; /** * @see #getStartupState @@ -545,8 +545,8 @@ public final class ApplicationStartInfo implements Parcelable { * * @hide */ - public long getMonoticCreationTimeMs() { - return mMonoticCreationTimeMs; + public long getMonotonicCreationTimeMs() { + return mMonotonicCreationTimeMs; } /** @@ -751,14 +751,14 @@ public final class ApplicationStartInfo implements Parcelable { dest.writeParcelable(mStartIntent, flags); dest.writeInt(mLaunchMode); dest.writeBoolean(mWasForceStopped); - dest.writeLong(mMonoticCreationTimeMs); + dest.writeLong(mMonotonicCreationTimeMs); dest.writeInt(mStartComponent); } // LINT.ThenChange(:read_parcel) /** @hide */ public ApplicationStartInfo(long monotonicCreationTimeMs) { - mMonoticCreationTimeMs = monotonicCreationTimeMs; + mMonotonicCreationTimeMs = monotonicCreationTimeMs; } /** @hide */ @@ -776,7 +776,7 @@ public final class ApplicationStartInfo implements Parcelable { mStartIntent = other.mStartIntent; mLaunchMode = other.mLaunchMode; mWasForceStopped = other.mWasForceStopped; - mMonoticCreationTimeMs = other.mMonoticCreationTimeMs; + mMonotonicCreationTimeMs = other.mMonotonicCreationTimeMs; mStartComponent = other.mStartComponent; } @@ -803,7 +803,7 @@ public final class ApplicationStartInfo implements Parcelable { in.readParcelable(Intent.class.getClassLoader(), android.content.Intent.class); mLaunchMode = in.readInt(); mWasForceStopped = in.readBoolean(); - mMonoticCreationTimeMs = in.readLong(); + mMonotonicCreationTimeMs = in.readLong(); mStartComponent = in.readInt(); } // LINT.ThenChange(:write_parcel) @@ -887,7 +887,7 @@ public final class ApplicationStartInfo implements Parcelable { } proto.write(ApplicationStartInfoProto.LAUNCH_MODE, mLaunchMode); proto.write(ApplicationStartInfoProto.WAS_FORCE_STOPPED, mWasForceStopped); - proto.write(ApplicationStartInfoProto.MONOTONIC_CREATION_TIME_MS, mMonoticCreationTimeMs); + proto.write(ApplicationStartInfoProto.MONOTONIC_CREATION_TIME_MS, mMonotonicCreationTimeMs); proto.write(ApplicationStartInfoProto.START_COMPONENT, mStartComponent); proto.end(token); } @@ -980,7 +980,7 @@ public final class ApplicationStartInfo implements Parcelable { ApplicationStartInfoProto.WAS_FORCE_STOPPED); break; case (int) ApplicationStartInfoProto.MONOTONIC_CREATION_TIME_MS: - mMonoticCreationTimeMs = proto.readLong( + mMonotonicCreationTimeMs = proto.readLong( ApplicationStartInfoProto.MONOTONIC_CREATION_TIME_MS); break; case (int) ApplicationStartInfoProto.START_COMPONENT: @@ -999,7 +999,7 @@ public final class ApplicationStartInfo implements Parcelable { sb.append(prefix) .append("ApplicationStartInfo ").append(seqSuffix).append(':') .append('\n') - .append(" monotonicCreationTimeMs=").append(mMonoticCreationTimeMs) + .append(" monotonicCreationTimeMs=").append(mMonotonicCreationTimeMs) .append('\n') .append(" pid=").append(mPid) .append(" realUid=").append(mRealUid) @@ -1094,7 +1094,7 @@ public final class ApplicationStartInfo implements Parcelable { && TextUtils.equals(mProcessName, o.mProcessName) && timestampsEquals(o) && mWasForceStopped == o.mWasForceStopped - && mMonoticCreationTimeMs == o.mMonoticCreationTimeMs + && mMonotonicCreationTimeMs == o.mMonotonicCreationTimeMs && mStartComponent == o.mStartComponent; } @@ -1102,7 +1102,7 @@ public final class ApplicationStartInfo implements Parcelable { public int hashCode() { return Objects.hash(mPid, mRealUid, mPackageUid, mDefiningUid, mReason, mStartupState, mStartType, mLaunchMode, mPackageName, mProcessName, mStartupTimestampsNs, - mMonoticCreationTimeMs, mStartComponent); + mMonotonicCreationTimeMs, mStartComponent); } private boolean timestampsEquals(@NonNull ApplicationStartInfo other) { diff --git a/core/java/android/app/ForegroundServiceTypePolicy.java b/core/java/android/app/ForegroundServiceTypePolicy.java index 6efc4ef55180..3003b79435e2 100644 --- a/core/java/android/app/ForegroundServiceTypePolicy.java +++ b/core/java/android/app/ForegroundServiceTypePolicy.java @@ -49,11 +49,14 @@ import android.annotation.Nullable; import android.annotation.SuppressLint; import android.app.compat.CompatChanges; import android.app.role.RoleManager; +import android.companion.virtual.VirtualDevice; +import android.companion.virtual.VirtualDeviceManager; import android.compat.Compatibility; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; import android.compat.annotation.EnabledAfter; import android.compat.annotation.Overridable; +import android.content.AttributionSource; import android.content.Context; import android.content.PermissionChecker; import android.content.pm.PackageManager; @@ -67,6 +70,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.permission.PermissionCheckerManager; +import android.permission.PermissionManager; import android.provider.DeviceConfig; import android.text.TextUtils; import android.util.ArrayMap; @@ -1174,17 +1178,48 @@ public abstract class ForegroundServiceTypePolicy { @PackageManager.PermissionResult public int checkPermission(@NonNull Context context, int callerUid, int callerPid, String packageName, boolean allowWhileInUse) { - return checkPermission(context, mName, callerUid, callerPid, packageName, - allowWhileInUse); + int permissionResult = checkPermission(context, mName, callerUid, callerPid, + packageName, allowWhileInUse, Context.DEVICE_ID_DEFAULT); + + if (permissionResult == PERMISSION_GRANTED + || !PermissionManager.DEVICE_AWARE_PERMISSIONS.contains(mName)) { + return permissionResult; + } + + // For device aware permissions, check if the permission is granted on any other + // active virtual device + VirtualDeviceManager vdm = context.getSystemService(VirtualDeviceManager.class); + if (vdm == null) { + return permissionResult; + } + + final List<VirtualDevice> virtualDevices = vdm.getVirtualDevices(); + for (int i = 0, size = virtualDevices.size(); i < size; i++) { + final VirtualDevice virtualDevice = virtualDevices.get(i); + int resolvedDeviceId = PermissionManager.resolveDeviceIdForPermissionCheck( + context, virtualDevice.getDeviceId(), mName); + // we already checked on the default device context + if (resolvedDeviceId == Context.DEVICE_ID_DEFAULT) { + continue; + } + permissionResult = checkPermission(context, mName, callerUid, callerPid, + packageName, allowWhileInUse, resolvedDeviceId); + if (permissionResult == PERMISSION_GRANTED) { + break; + } + } + + return permissionResult; } @SuppressLint("AndroidFrameworkRequiresPermission") @PackageManager.PermissionResult int checkPermission(@NonNull Context context, @NonNull String name, int callerUid, - int callerPid, String packageName, boolean allowWhileInUse) { + int callerPid, String packageName, boolean allowWhileInUse, int deviceId) { + final AttributionSource attributionSource = new AttributionSource(callerUid, + packageName, null /*attributionTag*/, deviceId); @PermissionCheckerManager.PermissionResult final int result = - PermissionChecker.checkPermissionForPreflight(context, name, - callerPid, callerUid, packageName); + PermissionChecker.checkPermissionForPreflight(context, name, attributionSource); if (result == PERMISSION_HARD_DENIED) { // If the user didn't grant this permission at all. return PERMISSION_DENIED; @@ -1196,7 +1231,7 @@ public abstract class ForegroundServiceTypePolicy { ? PERMISSION_GRANTED : PERMISSION_DENIED; } final AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class); - final int mode = appOpsManager.unsafeCheckOpRawNoThrow(opCode, callerUid, packageName); + final int mode = appOpsManager.unsafeCheckOpRawNoThrow(opCode, attributionSource); switch (mode) { case MODE_ALLOWED: // The appop is just allowed, plain and simple. diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 7f1870bd2d87..e8d2e2871ef2 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -20,6 +20,7 @@ import static android.Manifest.permission.MANAGE_EXTERNAL_STORAGE; import static android.Manifest.permission.READ_WALLPAPER_INTERNAL; import static android.Manifest.permission.SET_WALLPAPER_DIM_AMOUNT; import static android.app.Flags.FLAG_LIVE_WALLPAPER_CONTENT_HANDLING; +import static android.app.Flags.enableConnectedDisplaysWallpaper; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; @@ -874,7 +875,13 @@ public class WallpaperManager { return null; } try (InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(pfd)) { - ImageDecoder.Source src = ImageDecoder.createSource(context.getResources(), is); + ImageDecoder.Source src; + if (enableConnectedDisplaysWallpaper()) { + src = ImageDecoder.createSource(context.getResources(), is, + /* density= */ 0); + } else { + src = ImageDecoder.createSource(context.getResources(), is); + } return ImageDecoder.decodeBitmap(src, ((decoder, info, source) -> { // Mutable and hardware config can't be set at the same time. decoder.setMutableRequired(!hardware); diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index c6d0f61b529e..8c99bd8e2ed9 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -790,12 +790,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu || mWindowingMode == WINDOWING_MODE_MULTI_WINDOW; } - /** Returns true if the task bounds should persist across power cycles. - * @hide */ - public boolean persistTaskBounds() { - return mWindowingMode == WINDOWING_MODE_FREEFORM; - } - /** * Returns true if the tasks associated with this window configuration are floating. * Floating tasks are laid out differently as they are allowed to extend past the display bounds diff --git a/core/java/android/app/activity_manager.aconfig b/core/java/android/app/activity_manager.aconfig index e431426d5d09..29c84ee00b44 100644 --- a/core/java/android/app/activity_manager.aconfig +++ b/core/java/android/app/activity_manager.aconfig @@ -170,3 +170,23 @@ flag { description: "Holdback study for jank_perceptible_narrow" bug: "304837972" } + +flag { + namespace: "system_performance" + name: "app_start_info_cleanup_old_records" + description: "Cleanup old records to reduce size of in memory store." + bug: "384539178" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { + namespace: "system_performance" + name: "app_start_info_keep_records_sorted" + description: "Ensure records are kept sorted to avoid extra work" + bug: "384539178" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index 53203eba4020..c5412a982110 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -494,10 +494,14 @@ public class UserInfo implements Parcelable { // TODO(b/142482943): Make this logic more specific and customizable. (canHaveProfile(userType)) /* @hide */ public boolean canHaveProfile() { - if (isProfile() || isGuest() || isRestricted()) { + if (!isFull() || isProfile() || isGuest() || isRestricted() || isDemo()) { return false; } - return isMain(); + // NOTE: profiles used to be restricted just to the system user (and later to the main + // user), but from the framework point of view there is no need for such restriction, hence + // it's lifted + // TODO(b/374832167): check value of config_supportProfilesOnNonMainUser + return isMain() || android.multiuser.Flags.profilesForAll(); } // TODO(b/142482943): Get rid of this (after removing it from all tests) if feasible. diff --git a/core/java/android/content/pm/multiuser.aconfig b/core/java/android/content/pm/multiuser.aconfig index 3411a4897e83..3dbd5b239ae5 100644 --- a/core/java/android/content/pm/multiuser.aconfig +++ b/core/java/android/content/pm/multiuser.aconfig @@ -646,3 +646,10 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "profiles_for_all" + namespace: "multiuser" + description: "Allows any regular user to have profiles" + bug: "374832167" +} diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index ee62dea7f9e5..6b1e918a3c47 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -149,6 +149,11 @@ public class Binder implements IBinder { private static volatile boolean sStackTrackingEnabled = false; /** + * The extension binder object + */ + private IBinder mExtension = null; + + /** * Enable Binder IPC stack tracking. If enabled, every binder transaction will be logged to * {@link TransactionTracker}. * @@ -1237,7 +1242,9 @@ public class Binder implements IBinder { /** @hide */ @Override - public final native @Nullable IBinder getExtension(); + public final @Nullable IBinder getExtension() { + return mExtension; + } /** * Set the binder extension. @@ -1245,7 +1252,12 @@ public class Binder implements IBinder { * * @hide */ - public final native void setExtension(@Nullable IBinder extension); + public final void setExtension(@Nullable IBinder extension) { + mExtension = extension; + setExtensionNative(extension); + } + + private final native void setExtensionNative(@Nullable IBinder extension); /** * Default implementation rewinds the parcels and calls onTransact. On diff --git a/core/java/android/security/advancedprotection/AdvancedProtectionManager.java b/core/java/android/security/advancedprotection/AdvancedProtectionManager.java index 62b2bcf32442..cb2b13d1e120 100644 --- a/core/java/android/security/advancedprotection/AdvancedProtectionManager.java +++ b/core/java/android/security/advancedprotection/AdvancedProtectionManager.java @@ -349,7 +349,8 @@ public final class AdvancedProtectionManager { * * @param featureId The feature identifier. * @param type The type of the feature describing the action that needs to be explained - * in the dialog or null for default explanation. + * in the dialog or {@link #SUPPORT_DIALOG_TYPE_UNKNOWN} for default + * explanation. * @return Intent An intent to be used to start the dialog-activity that explains a feature was * disabled by advanced protection. * @hide @@ -373,7 +374,27 @@ public final class AdvancedProtectionManager { return intent; } - /** @hide */ + /** + * Called by a feature to display a support dialog when a feature was disabled by advanced + * protection based on a policy identifier or restriction. This returns an intent that can be + * used with {@link Context#startActivity(Intent)} to display the dialog. + * + * <p>At the moment, if the dialog is for {@link #FEATURE_ID_DISALLOW_CELLULAR_2G} or + * {@link #FEATURE_ID_ENABLE_MTE} and the provided type is + * {@link #SUPPORT_DIALOG_TYPE_UNKNOWN}, the type will be changed to + * {@link #SUPPORT_DIALOG_TYPE_DISABLED_SETTING} in the returned intent, as these features only + * have a disabled setting UI. + * + * <p>Note that this method doesn't check if the feature is actually disabled, i.e. this method + * will always return an intent. + * + * @param identifier The policy identifier or restriction. + * @param type The type of the feature describing the action that needs to be explained + * in the dialog or {@link #SUPPORT_DIALOG_TYPE_UNKNOWN} for default + * explanation. + * @return Intent An intent to be used to start the dialog-activity that explains a feature was + * disabled by advanced protection. + * @hide */ public static @NonNull Intent createSupportIntentForPolicyIdentifierOrRestriction( @NonNull String identifier, @SupportDialogType int type) { Objects.requireNonNull(identifier); @@ -382,16 +403,21 @@ public final class AdvancedProtectionManager { + " SUPPORT_DIALOG_TYPE_* APIs."); } final int featureId; + int dialogType = type; if (DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY.equals(identifier)) { featureId = FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES; } else if (DISALLOW_CELLULAR_2G.equals(identifier)) { featureId = FEATURE_ID_DISALLOW_CELLULAR_2G; + dialogType = (dialogType == SUPPORT_DIALOG_TYPE_UNKNOWN) + ? SUPPORT_DIALOG_TYPE_DISABLED_SETTING : dialogType; } else if (MEMORY_TAGGING_POLICY.equals(identifier)) { featureId = FEATURE_ID_ENABLE_MTE; + dialogType = (dialogType == SUPPORT_DIALOG_TYPE_UNKNOWN) + ? SUPPORT_DIALOG_TYPE_DISABLED_SETTING : dialogType; } else { throw new UnsupportedOperationException("Unsupported identifier: " + identifier); } - return createSupportIntent(featureId, type); + return createSupportIntent(featureId, dialogType); } /** @hide */ diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 6b7b81887706..7e9dfe6d972a 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -1030,10 +1030,18 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation handlePendingControlRequest(statsToken); } else { if (showTypes[0] != 0) { + if ((showTypes[0] & ime()) != 0) { + ImeTracker.forLogging().onProgress(statsToken, + ImeTracker.PHASE_CLIENT_ON_CONTROLS_CHANGED); + } applyAnimation(showTypes[0], true /* show */, false /* fromIme */, false /* skipsCallbacks */, statsToken); } if (hideTypes[0] != 0) { + if ((hideTypes[0] & ime()) != 0) { + ImeTracker.forLogging().onProgress(statsToken, + ImeTracker.PHASE_CLIENT_ON_CONTROLS_CHANGED); + } applyAnimation(hideTypes[0], false /* show */, false /* fromIme */, // The animation of hiding transient types shouldn't be detected by the // app. Otherwise, it might be able to react to the callbacks and cause @@ -1041,6 +1049,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation (hideTypes[0] & ~transientTypes[0]) == 0 /* skipsCallbacks */, statsToken); } + if ((showTypes[0] & ime()) == 0 && (hideTypes[0] & ime()) == 0) { + ImeTracker.forLogging().onCancelled(statsToken, + ImeTracker.PHASE_CLIENT_ON_CONTROLS_CHANGED); + } } } else { if (showTypes[0] != 0) { diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 1b57b0045537..94e9aa709369 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -1070,9 +1070,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall } if (mSurfacePackage != null) { - mSurfaceControlViewHostParent.detach(); mEmbeddedWindowParams.clear(); if (releaseSurfacePackage) { + mSurfaceControlViewHostParent.detach(); mSurfacePackage.release(); mSurfacePackage = null; } diff --git a/core/java/android/view/inputmethod/ImeTracker.java b/core/java/android/view/inputmethod/ImeTracker.java index 5dadf32d2a36..b1ba8b32d2f4 100644 --- a/core/java/android/view/inputmethod/ImeTracker.java +++ b/core/java/android/view/inputmethod/ImeTracker.java @@ -231,6 +231,7 @@ public interface ImeTracker { PHASE_WM_WINDOW_ANIMATING_TYPES_CHANGED, PHASE_WM_NOTIFY_HIDE_ANIMATION_FINISHED, PHASE_WM_UPDATE_DISPLAY_WINDOW_ANIMATING_TYPES, + PHASE_CLIENT_ON_CONTROLS_CHANGED, }) @Retention(RetentionPolicy.SOURCE) @interface Phase {} @@ -469,6 +470,9 @@ public interface ImeTracker { /** The control target reported its animatingTypes back to WindowManagerService. */ int PHASE_WM_UPDATE_DISPLAY_WINDOW_ANIMATING_TYPES = ImeProtoEnums.PHASE_WM_UPDATE_DISPLAY_WINDOW_ANIMATING_TYPES; + /** InsetsController received a control for the IME. */ + int PHASE_CLIENT_ON_CONTROLS_CHANGED = + ImeProtoEnums.PHASE_CLIENT_ON_CONTROLS_CHANGED; /** * Called when an IME request is started. diff --git a/core/java/android/window/BackMotionEvent.java b/core/java/android/window/BackMotionEvent.java index d53c787749d9..cc2afbc6aaa3 100644 --- a/core/java/android/window/BackMotionEvent.java +++ b/core/java/android/window/BackMotionEvent.java @@ -18,6 +18,7 @@ package android.window; import android.annotation.FloatRange; import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.view.RemoteAnimationTarget; @@ -38,6 +39,8 @@ public final class BackMotionEvent implements Parcelable { @BackEvent.SwipeEdge private final int mSwipeEdge; + @Nullable + private final RemoteAnimationTarget mDepartingAnimationTarget; /** * Creates a new {@link BackMotionEvent} instance. @@ -50,6 +53,8 @@ public final class BackMotionEvent implements Parcelable { * @param progress Value between 0 and 1 on how far along the back gesture is. * @param triggerBack Indicates whether the back arrow is in the triggered state or not * @param swipeEdge Indicates which edge the swipe starts from. + * @param departingAnimationTarget The remote animation target of the departing + * application window. */ public BackMotionEvent( float touchX, @@ -57,13 +62,15 @@ public final class BackMotionEvent implements Parcelable { long frameTimeMillis, float progress, boolean triggerBack, - @BackEvent.SwipeEdge int swipeEdge) { + @BackEvent.SwipeEdge int swipeEdge, + @Nullable RemoteAnimationTarget departingAnimationTarget) { mTouchX = touchX; mTouchY = touchY; mFrameTimeMillis = frameTimeMillis; mProgress = progress; mTriggerBack = triggerBack; mSwipeEdge = swipeEdge; + mDepartingAnimationTarget = departingAnimationTarget; } private BackMotionEvent(@NonNull Parcel in) { @@ -72,6 +79,7 @@ public final class BackMotionEvent implements Parcelable { mProgress = in.readFloat(); mTriggerBack = in.readBoolean(); mSwipeEdge = in.readInt(); + mDepartingAnimationTarget = in.readTypedObject(RemoteAnimationTarget.CREATOR); mFrameTimeMillis = in.readLong(); } @@ -100,6 +108,7 @@ public final class BackMotionEvent implements Parcelable { dest.writeFloat(mProgress); dest.writeBoolean(mTriggerBack); dest.writeInt(mSwipeEdge); + dest.writeTypedObject(mDepartingAnimationTarget, flags); dest.writeLong(mFrameTimeMillis); } @@ -151,6 +160,16 @@ public final class BackMotionEvent implements Parcelable { return mFrameTimeMillis; } + /** + * Returns the {@link RemoteAnimationTarget} of the top departing application window, + * or {@code null} if the top window should not be moved for the current type of back + * destination. + */ + @Nullable + public RemoteAnimationTarget getDepartingAnimationTarget() { + return mDepartingAnimationTarget; + } + @Override public String toString() { return "BackMotionEvent{" @@ -160,6 +179,7 @@ public final class BackMotionEvent implements Parcelable { + ", mProgress=" + mProgress + ", mTriggerBack=" + mTriggerBack + ", mSwipeEdge=" + mSwipeEdge + + ", mDepartingAnimationTarget=" + mDepartingAnimationTarget + "}"; } } diff --git a/core/java/android/window/BackTouchTracker.java b/core/java/android/window/BackTouchTracker.java index ea1b64066cfe..4908068d51e4 100644 --- a/core/java/android/window/BackTouchTracker.java +++ b/core/java/android/window/BackTouchTracker.java @@ -20,6 +20,7 @@ import android.annotation.FloatRange; import android.os.SystemProperties; import android.util.MathUtils; import android.view.MotionEvent; +import android.view.RemoteAnimationTarget; import java.io.PrintWriter; @@ -146,14 +147,15 @@ public class BackTouchTracker { } /** Creates a start {@link BackMotionEvent}. */ - public BackMotionEvent createStartEvent() { + public BackMotionEvent createStartEvent(RemoteAnimationTarget target) { return new BackMotionEvent( /* touchX = */ mInitTouchX, /* touchY = */ mInitTouchY, /* frameTimeMillis = */ 0, /* progress = */ 0, /* triggerBack = */ mTriggerBack, - /* swipeEdge = */ mSwipeEdge); + /* swipeEdge = */ mSwipeEdge, + /* departingAnimationTarget = */ target); } /** Creates a progress {@link BackMotionEvent}. */ @@ -237,7 +239,8 @@ public class BackTouchTracker { /* frameTimeMillis = */ 0, /* progress = */ progress, /* triggerBack = */ mTriggerBack, - /* swipeEdge = */ mSwipeEdge); + /* swipeEdge = */ mSwipeEdge, + /* departingAnimationTarget = */ null); } /** Sets the thresholds for computing progress. */ diff --git a/core/java/android/window/ImeOnBackInvokedDispatcher.java b/core/java/android/window/ImeOnBackInvokedDispatcher.java index 69613a748884..d478108d928a 100644 --- a/core/java/android/window/ImeOnBackInvokedDispatcher.java +++ b/core/java/android/window/ImeOnBackInvokedDispatcher.java @@ -270,7 +270,8 @@ public class ImeOnBackInvokedDispatcher implements OnBackInvokedDispatcher, Parc } mIOnBackInvokedCallback.onBackStarted( new BackMotionEvent(backEvent.getTouchX(), backEvent.getTouchY(), frameTime, - backEvent.getProgress(), false, backEvent.getSwipeEdge())); + backEvent.getProgress(), false, backEvent.getSwipeEdge(), + null)); } catch (RemoteException e) { Log.e(TAG, "Exception when invoking forwarded callback. e: ", e); } @@ -285,7 +286,8 @@ public class ImeOnBackInvokedDispatcher implements OnBackInvokedDispatcher, Parc } mIOnBackInvokedCallback.onBackProgressed( new BackMotionEvent(backEvent.getTouchX(), backEvent.getTouchY(), frameTime, - backEvent.getProgress(), false, backEvent.getSwipeEdge())); + backEvent.getProgress(), false, backEvent.getSwipeEdge(), + null)); } catch (RemoteException e) { Log.e(TAG, "Exception when invoking forwarded callback. e: ", e); } diff --git a/core/java/com/android/internal/jank/Cuj.java b/core/java/com/android/internal/jank/Cuj.java index e125e258c596..c25f6b1dcacb 100644 --- a/core/java/com/android/internal/jank/Cuj.java +++ b/core/java/com/android/internal/jank/Cuj.java @@ -322,8 +322,18 @@ public class Cuj { */ public static final int CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY = 129; + /** + * Track the animation of an ongoing call app back into its status bar chip (displaying the call + * icon and timer) when returning Home. + * + * <p>Tracking starts when the RemoteTransition registered to handle the transition from the app + * to Home is sent the onAnimationStart() signal and start the animation. Tracking ends when + * the animation is fully settled and the transition is complete.</p> + */ + public static final int CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP = 130; + // When adding a CUJ, update this and make sure to also update CUJ_TO_STATSD_INTERACTION_TYPE. - @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY; + @VisibleForTesting static final int LAST_CUJ = CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP; /** @hide */ @IntDef({ @@ -444,7 +454,8 @@ public class Cuj { CUJ_LAUNCHER_WORK_UTILITY_VIEW_EXPAND, CUJ_LAUNCHER_WORK_UTILITY_VIEW_SHRINK, CUJ_DEFAULT_TASK_TO_TASK_ANIMATION, - CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY + CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY, + CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP }) @Retention(RetentionPolicy.SOURCE) public @interface CujType {} @@ -576,6 +587,7 @@ public class Cuj { CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_WORK_UTILITY_VIEW_SHRINK] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_WORK_UTILITY_VIEW_SHRINK; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DEFAULT_TASK_TO_TASK_ANIMATION] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DEFAULT_TASK_TO_TASK_ANIMATION; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY; + CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__STATUS_BAR_APP_RETURN_TO_CALL_CHIP; } private Cuj() { @@ -830,6 +842,8 @@ public class Cuj { return "DEFAULT_TASK_TO_TASK_ANIMATION"; case CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY: return "DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY"; + case CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP: + return "STATUS_BAR_APP_RETURN_TO_CALL_CHIP"; } return "UNKNOWN"; } diff --git a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java index 766fbf1a80f5..8fbd10c25995 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +++ b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java @@ -64,16 +64,16 @@ public class CoreDocument implements Serializable { private static final boolean DEBUG = false; // Semantic version - public static final int MAJOR_VERSION = 0; - public static final int MINOR_VERSION = 4; + public static final int MAJOR_VERSION = 1; + public static final int MINOR_VERSION = 0; public static final int PATCH_VERSION = 0; // Internal version level - public static final int DOCUMENT_API_LEVEL = 4; + public static final int DOCUMENT_API_LEVEL = 5; // We also keep a more fine-grained BUILD number, exposed as // ID_API_LEVEL = DOCUMENT_API_LEVEL + BUILD - static final float BUILD = 0.7f; + static final float BUILD = 0.0f; private static final boolean UPDATE_VARIABLES_BEFORE_LAYOUT = false; diff --git a/core/java/com/android/internal/widget/remotecompose/core/Operations.java b/core/java/com/android/internal/widget/remotecompose/core/Operations.java index add9d5bae552..20252366e264 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/Operations.java +++ b/core/java/com/android/internal/widget/remotecompose/core/Operations.java @@ -30,6 +30,7 @@ import com.android.internal.widget.remotecompose.core.operations.DataListFloat; import com.android.internal.widget.remotecompose.core.operations.DataListIds; import com.android.internal.widget.remotecompose.core.operations.DataMapIds; import com.android.internal.widget.remotecompose.core.operations.DataMapLookup; +import com.android.internal.widget.remotecompose.core.operations.DebugMessage; import com.android.internal.widget.remotecompose.core.operations.DrawArc; import com.android.internal.widget.remotecompose.core.operations.DrawBitmap; import com.android.internal.widget.remotecompose.core.operations.DrawBitmapFontText; @@ -231,6 +232,7 @@ public class Operations { public static final int PATH_COMBINE = 175; public static final int HAPTIC_FEEDBACK = 177; public static final int CONDITIONAL_OPERATIONS = 178; + public static final int DEBUG_MESSAGE = 179; ///////////////////////////////////////// ====================== @@ -443,6 +445,7 @@ public class Operations { map.put(PATH_COMBINE, PathCombine::read); map.put(HAPTIC_FEEDBACK, HapticFeedback::read); map.put(CONDITIONAL_OPERATIONS, ConditionalOperations::read); + map.put(DEBUG_MESSAGE, DebugMessage::read); // map.put(ACCESSIBILITY_CUSTOM_ACTION, CoreSemantics::read); } diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java index 1f026687680f..a86b62e2caa3 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java +++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java @@ -33,6 +33,7 @@ import com.android.internal.widget.remotecompose.core.operations.DataListFloat; import com.android.internal.widget.remotecompose.core.operations.DataListIds; import com.android.internal.widget.remotecompose.core.operations.DataMapIds; import com.android.internal.widget.remotecompose.core.operations.DataMapLookup; +import com.android.internal.widget.remotecompose.core.operations.DebugMessage; import com.android.internal.widget.remotecompose.core.operations.DrawArc; import com.android.internal.widget.remotecompose.core.operations.DrawBitmap; import com.android.internal.widget.remotecompose.core.operations.DrawBitmapFontText; @@ -1332,7 +1333,7 @@ public class RemoteComposeBuffer { * @return the nan id of float */ public float reserveFloatVariable() { - int id = mRemoteComposeState.cacheFloat(0f); + int id = mRemoteComposeState.nextId(); return Utils.asNan(id); } @@ -1870,6 +1871,46 @@ public class RemoteComposeBuffer { } /** + * Add a scroll modifier + * + * @param direction HORIZONTAL(0) or VERTICAL(1) + * @param positionId the position id as a NaN + */ + public void addModifierScroll(int direction, float positionId) { + float max = this.reserveFloatVariable(); + float notchMax = this.reserveFloatVariable(); + float touchExpressionDirection = + direction != 0 ? RemoteContext.FLOAT_TOUCH_POS_X : RemoteContext.FLOAT_TOUCH_POS_Y; + + ScrollModifierOperation.apply(mBuffer, direction, positionId, max, notchMax); + this.addTouchExpression( + positionId, + 0f, + 0f, + max, + 0f, + 3, + new float[] { + touchExpressionDirection, -1, MUL, + }, + TouchExpression.STOP_GENTLY, + null, + null); + ContainerEnd.apply(mBuffer); + } + + /** + * Add a scroll modifier + * + * @param direction HORIZONTAL(0) or VERTICAL(1) + */ + public void addModifierScroll(int direction) { + float max = this.reserveFloatVariable(); + ScrollModifierOperation.apply(mBuffer, direction, 0f, max, 0f); + ContainerEnd.apply(mBuffer); + } + + /** * Add a background modifier of provided color * * @param color the color of the background @@ -2464,4 +2505,15 @@ public class RemoteComposeBuffer { public void addConditionalOperations(byte type, float a, float b) { ConditionalOperations.apply(mBuffer, type, a, b); } + + /** + * Add a debug message + * + * @param textId text id + * @param value + * @param flags + */ + public void addDebugMessage(int textId, float value, int flags) { + DebugMessage.apply(mBuffer, textId, value, flags); + } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DebugMessage.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DebugMessage.java new file mode 100644 index 000000000000..c27bd8b577bf --- /dev/null +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DebugMessage.java @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.internal.widget.remotecompose.core.operations; + +import android.annotation.NonNull; + +import com.android.internal.widget.remotecompose.core.Operation; +import com.android.internal.widget.remotecompose.core.Operations; +import com.android.internal.widget.remotecompose.core.RemoteContext; +import com.android.internal.widget.remotecompose.core.VariableSupport; +import com.android.internal.widget.remotecompose.core.WireBuffer; +import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder; +import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation; + +import java.util.List; + +/** + * This prints debugging message useful for debugging. It should not be use in production documents + */ +public class DebugMessage extends Operation implements VariableSupport { + private static final int OP_CODE = Operations.DEBUG_MESSAGE; + private static final String CLASS_NAME = "DebugMessage"; + int mTextID; + float mFloatValue; + float mOutFloatValue; + int mFlags = 0; + + public DebugMessage(int textID, float value, int flags) { + mTextID = textID; + mFloatValue = value; + mFlags = flags; + } + + @Override + public void updateVariables(@NonNull RemoteContext context) { + System.out.println("Debug message : updateVariables "); + mOutFloatValue = + Float.isNaN(mFloatValue) + ? context.getFloat(Utils.idFromNan(mFloatValue)) + : mFloatValue; + System.out.println( + "Debug message : updateVariables " + + Utils.floatToString(mFloatValue, mOutFloatValue)); + } + + @Override + public void registerListening(@NonNull RemoteContext context) { + System.out.println("Debug message : registerListening "); + + if (Float.isNaN(mFloatValue)) { + System.out.println("Debug message : registerListening " + mFloatValue); + context.listensTo(Utils.idFromNan(mFloatValue), this); + } + } + + @Override + public void write(@NonNull WireBuffer buffer) { + apply(buffer, mTextID, mFloatValue, mFlags); + } + + @NonNull + @Override + public String toString() { + return "DebugMessage " + + mTextID + + ", " + + Utils.floatToString(mFloatValue, mOutFloatValue) + + ", " + + mFlags; + } + + /** + * Read this operation and add it to the list of operations + * + * @param buffer the buffer to read + * @param operations the list of operations that will be added to + */ + public static void read(@NonNull WireBuffer buffer, @NonNull List<Operation> operations) { + int text = buffer.readInt(); + float floatValue = buffer.readFloat(); + int flags = buffer.readInt(); + DebugMessage op = new DebugMessage(text, floatValue, flags); + operations.add(op); + } + + /** + * The name of the class + * + * @return the name + */ + @NonNull + public static String name() { + return CLASS_NAME; + } + + /** + * The OP_CODE for this command + * + * @return the opcode + */ + public static int id() { + return OP_CODE; + } + + /** + * Writes out the operation to the buffer + * + * @param buffer write the command to the buffer + * @param textID id of the text + * @param value value to print + * @param flags flags to print + */ + public static void apply(@NonNull WireBuffer buffer, int textID, float value, int flags) { + buffer.start(OP_CODE); + buffer.writeInt(textID); + buffer.writeFloat(value); + buffer.writeInt(flags); + } + + /** + * Populate the documentation with a description of this operation + * + * @param doc to append the description to. + */ + public static void documentation(@NonNull DocumentationBuilder doc) { + doc.operation("DebugMessage Operations", id(), CLASS_NAME) + .description("Print debugging messages") + .field(DocumentedOperation.INT, "textId", "test to print") + .field(DocumentedOperation.FLOAT, "value", "value of a float to print") + .field(DocumentedOperation.INT, "flags", "print additional information"); + } + + @Override + public void apply(@NonNull RemoteContext context) { + String str = context.getText(mTextID); + System.out.println("Debug message : " + str + " " + mOutFloatValue + " " + mFlags); + } + + @NonNull + @Override + public String deepToString(@NonNull String indent) { + return indent + toString(); + } +} diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java index dee79a45de3d..67d3a6584897 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java @@ -266,10 +266,12 @@ public class TimeAttribute extends PaintOperation { case TIME_FROM_NOW_SEC: case TIME_FROM_ARG_SEC: ctx.loadFloat(mId, (delta) * 1E-3f); + ctx.needsRepaint(); break; case TIME_FROM_ARG_MIN: case TIME_FROM_NOW_MIN: ctx.loadFloat(mId, (float) (delta * 1E-3 / 60)); + ctx.needsRepaint(); break; case TIME_FROM_ARG_HR: case TIME_FROM_NOW_HR: @@ -298,6 +300,7 @@ public class TimeAttribute extends PaintOperation { break; case TIME_FROM_LOAD_SEC: ctx.loadFloat(mId, (value - load_time) * 1E-3f); + ctx.needsRepaint(); break; } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java index f24672922367..3e5dff8ad277 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java @@ -494,7 +494,7 @@ public class TouchExpression extends Operation mTouchUpTime = context.getAnimationTime(); float dest = getStopPosition(value, slope); - float time = mMaxTime * Math.abs(dest - value) / (2 * mMaxVelocity); + float time = Math.min(2, mMaxTime * Math.abs(dest - value) / (2 * mMaxVelocity)); mEasyTouch.config(value, dest, slope, time, mMaxAcceleration, mMaxVelocity, null); mEasingToStop = true; context.needsRepaint(); diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java index 17f4fc82af5f..e76fb0654df6 100644 --- a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java +++ b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java @@ -42,6 +42,9 @@ import java.util.Set; public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachStateChangeListener { static final boolean USE_VIEW_AREA_CLICK = true; // Use views to represent click areas + static final float DEFAULT_FRAME_RATE = 60f; + static final float POST_TO_NEXT_FRAME_THRESHOLD = 60f; + RemoteComposeDocument mDocument = null; int mTheme = Theme.LIGHT; boolean mInActionDown = false; @@ -53,9 +56,11 @@ public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachSta long mStart = System.nanoTime(); long mLastFrameDelay = 1; - float mMaxFrameRate = 60f; // frames per seconds + float mMaxFrameRate = DEFAULT_FRAME_RATE; // frames per seconds long mMaxFrameDelay = (long) (1000 / mMaxFrameRate); + long mLastFrameCall = System.currentTimeMillis(); + private Choreographer mChoreographer; private Choreographer.FrameCallback mFrameCallback = new Choreographer.FrameCallback() { @@ -100,6 +105,7 @@ public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachSta public void setDocument(RemoteComposeDocument value) { mDocument = value; + mMaxFrameRate = DEFAULT_FRAME_RATE; mDocument.initializeContext(mARContext); mDisable = false; mARContext.setDocLoadTime(); @@ -546,8 +552,25 @@ public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachSta } int nextFrame = mDocument.needsRepaint(); if (nextFrame > 0) { - mLastFrameDelay = Math.max(mMaxFrameDelay, nextFrame); + if (mMaxFrameRate >= POST_TO_NEXT_FRAME_THRESHOLD) { + mLastFrameDelay = nextFrame; + } else { + mLastFrameDelay = Math.max(mMaxFrameDelay, nextFrame); + } if (mChoreographer != null) { + if (mDebug == 1) { + System.err.println( + "RC : POST CHOREOGRAPHER WITH " + + mLastFrameDelay + + " (nextFrame was " + + nextFrame + + ", max delay " + + mMaxFrameDelay + + ", " + + " max framerate is " + + mMaxFrameRate + + ")"); + } mChoreographer.postFrameCallbackDelayed(mFrameCallback, mLastFrameDelay); } if (!mARContext.useChoreographer()) { @@ -567,6 +590,16 @@ public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachSta mDisable = true; invalidate(); } + if (mDebug == 1) { + long frameDelay = System.currentTimeMillis() - mLastFrameCall; + System.err.println( + "RC : Delay since last frame " + + frameDelay + + " ms (" + + (1000f / (float) frameDelay) + + " fps)"); + mLastFrameCall = System.currentTimeMillis(); + } } private void drawDisable(Canvas canvas) { diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index a0c8f30c9356..36bda61c94a6 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -73,6 +73,7 @@ static struct bindernative_offsets_t jmethodID mExecTransact; jmethodID mGetInterfaceDescriptor; jmethodID mTransactionCallback; + jmethodID mGetExtension; // Object state. jfieldID mObject; @@ -488,8 +489,12 @@ public: if (mVintf) { ::android::internal::Stability::markVintf(b.get()); } - if (mExtension != nullptr) { - b.get()->setExtension(mExtension); + if (mSetExtensionCalled) { + jobject javaIBinderObject = env->CallObjectMethod(obj, gBinderOffsets.mGetExtension); + sp<IBinder> extensionFromJava = ibinderForJavaObject(env, javaIBinderObject); + if (extensionFromJava != nullptr) { + b.get()->setExtension(extensionFromJava); + } } mBinder = b; ALOGV("Creating JavaBinder %p (refs %p) for Object %p, weakCount=%" PRId32 "\n", @@ -515,21 +520,12 @@ public: mVintf = false; } - sp<IBinder> getExtension() { - AutoMutex _l(mLock); - sp<JavaBBinder> b = mBinder.promote(); - if (b != nullptr) { - return b.get()->getExtension(); - } - return mExtension; - } - void setExtension(const sp<IBinder>& extension) { AutoMutex _l(mLock); - mExtension = extension; + mSetExtensionCalled = true; sp<JavaBBinder> b = mBinder.promote(); if (b != nullptr) { - b.get()->setExtension(mExtension); + b.get()->setExtension(extension); } } @@ -541,8 +537,7 @@ private: // is too much binder state here, we can think about making JavaBBinder an // sp here (avoid recreating it) bool mVintf = false; - - sp<IBinder> mExtension; + bool mSetExtensionCalled = false; }; // ---------------------------------------------------------------------------- @@ -1254,10 +1249,6 @@ static void android_os_Binder_blockUntilThreadAvailable(JNIEnv* env, jobject cla return IPCThreadState::self()->blockUntilThreadAvailable(); } -static jobject android_os_Binder_getExtension(JNIEnv* env, jobject obj) { - JavaBBinderHolder* jbh = (JavaBBinderHolder*) env->GetLongField(obj, gBinderOffsets.mObject); - return javaObjectForIBinder(env, jbh->getExtension()); -} static void android_os_Binder_setExtension(JNIEnv* env, jobject obj, jobject extensionObject) { JavaBBinderHolder* jbh = (JavaBBinderHolder*) env->GetLongField(obj, gBinderOffsets.mObject); @@ -1300,8 +1291,7 @@ static const JNINativeMethod gBinderMethods[] = { { "getNativeBBinderHolder", "()J", (void*)android_os_Binder_getNativeBBinderHolder }, { "getNativeFinalizer", "()J", (void*)android_os_Binder_getNativeFinalizer }, { "blockUntilThreadAvailable", "()V", (void*)android_os_Binder_blockUntilThreadAvailable }, - { "getExtension", "()Landroid/os/IBinder;", (void*)android_os_Binder_getExtension }, - { "setExtension", "(Landroid/os/IBinder;)V", (void*)android_os_Binder_setExtension }, + { "setExtensionNative", "(Landroid/os/IBinder;)V", (void*)android_os_Binder_setExtension }, }; // clang-format on @@ -1318,6 +1308,8 @@ static int int_register_android_os_Binder(JNIEnv* env) gBinderOffsets.mTransactionCallback = GetStaticMethodIDOrDie(env, clazz, "transactionCallback", "(IIII)V"); gBinderOffsets.mObject = GetFieldIDOrDie(env, clazz, "mObject", "J"); + gBinderOffsets.mGetExtension = GetMethodIDOrDie(env, clazz, "getExtension", + "()Landroid/os/IBinder;"); return RegisterMethodsOrDie( env, kBinderPathName, diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 568468b51f47..1cab0dc1b851 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rollees"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Onderbreek"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisie"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Rollees op"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Rollees af"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Rollees na links"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Rollees na regs"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Gaan uit Rolleesmodus"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Rolleespaneel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in die BEPERK-groep geplaas"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"het \'n prent gestuur"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Werk 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Toets"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Gemeenskaplik"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Toesighoudend"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Werkprofiel"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privaat ruimte"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Kloon"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 20d5336959d2..bda4da077204 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ሸብልል"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ባለበት አቁም"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"አቀማመጥ"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ወደ ላይ ሸብልል"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"ወደ ታች ሸብልል"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"ወደ ግራ ሸብልል"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"ወደ ቀኝ ሸብልል"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"ከሸብልል ሁነታ ውጣ"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"የመሸብለል ፓነል"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ወደ የRESTRICTED ባልዲ ተከትቷል"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>፦"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"አንድ ምስል ልከዋል"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ሥራ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ሙከራ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"የጋራ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ክትትል በማድረግ ላይ"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"የሥራ መገለጫ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"የግል ቦታ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"አባዛ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index ffc144416d91..7daa4b49786d 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -2490,8 +2490,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ملف العمل 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ملف شخصي تجريبي"</string> <string name="profile_label_communal" msgid="8743921499944800427">"ملف شخصي مشترك"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"المُشرف"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ملف العمل"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"المساحة الخاصة"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"نسخة طبق الأصل"</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 5c78cded7df6..5f7ef0078a0f 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"স্ক্ৰ’ল কৰক"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"পজ কৰক"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"স্থান"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ওপৰলৈ স্ক্ৰ’ল কৰক"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"তললৈ স্ক্ৰ’ল কৰক"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"বাওঁফাললৈ স্ক্ৰ’ল কৰক"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"সোঁফাললৈ স্ক্ৰ’ল কৰক"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"স্ক্ৰ’ল ম’ডৰ পৰা বাহিৰ হওক"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"স্ক্ৰ’ল পেনেল"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ক সীমাবদ্ধ বাকেটটোত ৰখা হৈছে"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"এখন প্ৰতিচ্ছবি পঠিয়াইছে"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"কৰ্মস্থান ৩"</string> <string name="profile_label_test" msgid="9168641926186071947">"পৰীক্ষা"</string> <string name="profile_label_communal" msgid="8743921499944800427">"শ্বেয়াৰ কৰা"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"তদাৰক কৰি থকা হৈছে"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"কৰ্মস্থানৰ প্ৰ’ফাইল"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"প্ৰাইভেট স্পে’চ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ক্ল’ন"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index c8b500be22c6..bc8a3f337f10 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"İş 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Kommunal"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nəzarət edilir"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"İş profili"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Məxfi sahə"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index d1889b84e90f..8b742006075f 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Skrolujte"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Skroluj nagore"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Skroluj nadole"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Skroluj ulevo"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Skroluj udesno"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Izađi iz režima skrolovanja"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Okno za skrolovanje"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je dodat u segment OGRANIČENO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslao/la sliku"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Posao 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Zajedničko"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nadzire se"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Poslovni profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privatan prostor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klonirano"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 68fe703644a9..cbdbc23e0028 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Гартанне"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Прыпыніць"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Пазіцыя"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Прагартаць уверх"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Прагартаць уніз"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Прагартаць улева"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Прагартаць управа"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Выйсці з рэжыму гартання"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Панэль прагортвання"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" дададзены ў АБМЕЖАВАНУЮ групу"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"адпраўлены відарыс"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Працоўны 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Тэставы"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Супольны"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Бацькоўскі кантроль"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Працоўны профіль"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Прыватная прастора"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клон"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 67e711f115df..a1140b930ec1 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Служебни 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Тестване"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Общи"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Контролиране"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Служебен потребителски профил"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Частно пространство"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клониране"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 12bf5dab6561..426c711adbf1 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"স্ক্রল করুন"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"পজ করুন"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"পজিশন"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"উপর দিকে স্ক্রল করুন"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"নিচে স্ক্রল করুন"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"বাঁদিকে স্ক্রল করুন"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"ডানদিকে স্ক্রল করুন"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"স্ক্রল মোড থেকে বেরিয়ে আসুন"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"স্ক্রল প্যানেল"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> সীমাবদ্ধ গ্রুপে অন্তর্ভুক্ত করা হয়েছে"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"একটি ছবি পাঠানো হয়েছে"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"৩য় অফিস"</string> <string name="profile_label_test" msgid="9168641926186071947">"পরীক্ষা"</string> <string name="profile_label_communal" msgid="8743921499944800427">"কমিউনাল"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"তত্ত্বাবধান করা"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"অফিস প্রোফাইল"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"প্রাইভেট স্পেস"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ক্লোন"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 441d51461f08..947f6bacafc7 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Klizanje"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Položaj"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Klizanje nagore"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Klizanje nadolje"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Klizanje ulijevo"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Klizanje udesno"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Izlaz iz načina rada za klizanje"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Ploča za klizanje"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je stavljen u odjeljak OGRANIČENO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslao/la sliku"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"3. poslovno"</string> <string name="profile_label_test" msgid="9168641926186071947">"Testno"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Opće"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nadzor"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Radni profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privatni prostor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index efde1506e7be..8dcf67195842 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Desplaça"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Posa en pausa"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posició"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Desplaça\'t cap amunt"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Desplaça\'t cap avall"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Desplaça\'t cap a l\'esquerra"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Desplaça\'t cap a la dreta"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Surt del mode de desplaçament"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Tauler de desplaçament"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> s\'ha transferit al segment RESTRINGIT"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviat una imatge"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Treball 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Prova"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Compartit"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"En supervisió"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de treball"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espai privat"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clon"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 59de93743290..61d9249e7774 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Posunutí"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pozastavit"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozice"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Posunout nahoru"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Posunout dolů"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Posunout doleva"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Posunout doprava"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Ukončit režim posouvání"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panel posouvání"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balíček <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> byl vložen do sekce OMEZENO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"posílá obrázek"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Práce 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Komunální"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Dohled"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Pracovní profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Soukromý prostor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 1038ff0bcf8f..8d8918fbf16e 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rul"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sæt på pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Placering"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Rul op"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Rul ned"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Rul til venstre"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Rul til højre"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Afslut rulletilstand"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Rullepanel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blevet placeret i samlingen BEGRÆNSET"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendte et billede"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Arbejde 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Fælles"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Forældrestyring"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Arbejdsprofil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privat område"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index c13dacad4dea..15edddee0dbe 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scrollen"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausieren"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Nach oben scrollen"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Nach unten scrollen"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Nach links scrollen"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Nach rechts scrollen"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Scrollmodus beenden"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Bildlaufleiste"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> wurde in den BESCHRÄNKT-Bucket gelegt"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"hat ein Bild gesendet"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Geschäftlich 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Gemeinsam genutzt"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Elternaufsicht"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Arbeitsprofil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Vertrauliches Profil"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 50b06dfbc8b6..5d83f7890d6b 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Κύλιση"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Παύση"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Θέση"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Κύλιση προς τα επάνω"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Κύλιση προς τα κάτω"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Κύλιση προς τα αριστερά"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Κύλιση προς τα δεξιά"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Έξοδος από τη λειτουργία κύλισης"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Πλαίσιο κύλισης"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Το πακέτο <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> τοποθετήθηκε στον κάδο ΠΕΡΙΟΡΙΣΜΕΝΗΣ ΠΡΟΣΒΑΣΗΣ."</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"έστειλε μια εικόνα"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Εργασία 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Δοκιμή"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Κοινόχρηστο"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Επίβλεψη"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Προφίλ εργασίας"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Ιδιωτικός χώρος"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Κλώνος"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 74462e996b5b..532fee688acd 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scroll"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scroll up"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scroll down"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scroll left"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scroll right"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Exit scroll mode"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Scroll panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervising"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Work profile"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Private space"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 9fa268338d4a..c079a4804057 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scroll"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scroll up"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scroll down"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scroll left"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scroll right"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Exit scroll mode"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Scroll panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervising"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Work profile"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Private space"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index e162a6094719..62daeffa9043 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scroll"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scroll up"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scroll down"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scroll left"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scroll right"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Exit scroll mode"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Scroll panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervising"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Work profile"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Private space"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 330039740ea1..b5a5e8f0deeb 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Desplazarse"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posición"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Desplazarse hacia arriba"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Desplazarse hacia abajo"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Desplazarse a la izquierda"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Desplazarse a la derecha"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Salir del modo de desplazamiento"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panel de desplazamiento"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> se ha incluido en el grupo de restringidos"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviado una imagen"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Trabajo 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Prueba"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Común"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervisando"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de trabajo"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espacio privado"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clon"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index c172de8671c9..99f9791e6ff1 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Keri"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Peata"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Asukoht"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Keri üles"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Keri alla"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Keri vasakule"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Keri paremale"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Välju kerimisrežiimist"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Keri paneelil"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on lisatud salve PIIRANGUTEGA"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"saatis kujutise"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Töö 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Jagatud"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Järelevalve"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Tööprofiil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privaatne ruum"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Kloon"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 24dbe4bb580c..7a49905cb250 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -2492,8 +2492,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Lanekoa 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Probakoa"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Partekatua"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Gainbegiratzea"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Laneko profila"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Eremu pribatua"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klona"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index f31bb1044c96..820a80c1f411 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"کار ۳"</string> <string name="profile_label_test" msgid="9168641926186071947">"آزمایش"</string> <string name="profile_label_communal" msgid="8743921499944800427">"عمومی"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"نظارت"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"نمایه کاری"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"فضای خصوصی"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"همسانهسازی"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index f1a5fbcdbcc4..dce063d0b033 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Vieritä"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Keskeytä"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Sijainti"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Vieritys ylös"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Vieritä alas"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Vieritä vasemmalle"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Vieritä oikealle"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Poistu vieritystilasta"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Vierityspaneeli"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on nyt rajoitettujen ryhmässä"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"lähetti kuvan"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Työ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Testi"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Jaettu"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Valvotaan"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Työprofiili"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Yksityinen tila"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klooni"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index a7b12891d7b1..127e6fcc97f7 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -2487,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Professionnel 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervision"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profil professionnel"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espace privé"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 213c25696ec0..a30c414038af 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Faire défiler"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Faire défiler vers le haut"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Faire défiler vers le bas"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Faire défiler vers la gauche"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Faire défiler vers la droite"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Quitter le mode défilement"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panneau de défilement"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le bucket RESTRICTED"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g> :"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a envoyé une image"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Professionnel 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervision"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profil professionnel"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espace privé"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 8c265b02b93e..d79e3c63e084 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Desprazar"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausa"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posición"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Desprazarse cara arriba"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Desprazarse cara abaixo"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Desprazar cara á esquerda"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Desprazar cara á dereita"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Saír do modo de desprazamento"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panel de desprazamento"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> incluíuse no grupo RESTRINXIDO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviouse unha imaxe"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Traballo 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Proba"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Compartido"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervisión"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de traballo"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espazo privado"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clonado"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index c4da34989482..6b1e2840522a 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -1803,8 +1803,7 @@ <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"એક-હાથે વાપરો મોડ"</string> <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"એક્સ્ટ્રા ડિમ"</string> <string name="hearing_aids_feature_name" msgid="1125892105105852542">"સાંભળવામાં સહાય કરતા ડિવાઇસ"</string> - <!-- no translation found for autoclick_feature_name (8149248738736949630) --> - <skip /> + <string name="autoclick_feature_name" msgid="8149248738736949630">"ઑટોક્લિક"</string> <string name="hearing_device_status_disconnected" msgid="497547752953543832">"ડિસ્કનેક્ટેડ છે"</string> <string name="hearing_device_status_connected" msgid="2149385149669918764">"કનેક્ટેડ છે"</string> <string name="hearing_device_status_active" msgid="4770378695482566032">"સક્રિય"</string> @@ -2274,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"સ્ક્રોલ કરો"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"થોભાવો"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"સ્થિતિ"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ઉપર સ્ક્રોલ કરો"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"નીચે સ્ક્રોલ કરો"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"ડાબે સ્ક્રોલ કરો"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"જમણે સ્ક્રોલ કરો"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"સ્ક્રોલ મોડમાંથી બહાર નીકળો"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"સ્ક્રોલ પૅનલ"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ને પ્રતિબંધિત સમૂહમાં મૂકવામાં આવ્યું છે"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"છબી મોકલી"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 01e5c7786cb7..b8be4057d480 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"स्क्रोल करें"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"रोकें"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"पोज़िशन"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ऊपर की ओर स्क्रोल करें"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"नीचे की ओर स्क्रोल करें"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"बाईं ओर स्क्रोल करें"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"दाईं ओर स्क्रोल करें"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"स्क्रोल मोड को बंद करें"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"पैनल को स्क्रोल करें"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> को प्रतिबंधित बकेट में रखा गया है"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"एक इमेज भेजी गई"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ऑफ़िस 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"टेस्ट"</string> <string name="profile_label_communal" msgid="8743921499944800427">"कम्यूनिटी"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"निगरानी की जा रही है"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"वर्क प्रोफ़ाइल"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"प्राइवेट स्पेस"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"क्लोन"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 826b860dfc2b..77c9a6049f0d 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Pomakni se"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Pomakni prema gore"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Pomakni prema dolje"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Pomakni ulijevo"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Pomakni udesno"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Izađi iz načina pomicanja"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Ploča za pomicanje"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> premješten je u spremnik OGRANIČENO"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"šalje sliku"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Posao 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Zajedničko"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nadzire se"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Radni profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privatni prostor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 1519326cdb6b..24babe3305e5 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Görgetés"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Szüneteltetés"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozíció"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Görgetés felfelé"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Görgetés lefelé"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Görgetés balra"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Görgetés jobbra"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Kilépés a görgetési módból"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Görgetési panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"A következő csomag a KORLÁTOZOTT csoportba került: <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"képet küldött"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"3. munkahelyi"</string> <string name="profile_label_test" msgid="9168641926186071947">"Teszt"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Közös"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Aktív felügyelet"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Munkaprofil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privát terület"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klón"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 2fd68c11ba7b..7f78454e950c 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Աշխատանքային 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Փորձնական"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Ընդհանուր"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Վերահսկում"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Աշխատանքային պրոֆիլ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Մասնավոր տարածք"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Կլոն"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 6e686b4263dd..fbbf2855565d 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scroll"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Jeda"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisi"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scroll ke Atas"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scroll ke Bawah"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scroll ke Kiri"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scroll ke Kanan"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Keluar dari Mode Scroll"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panel Scroll"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah dimasukkan ke dalam bucket DIBATASI"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"mengirim gambar"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Kerja 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Pengujian"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Umum"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Mengawasi"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profil kerja"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Ruang privasi"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 35b102e42933..d148f5d6de08 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Fletta"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Hlé"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Staðsetning"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Fletta upp"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Fletta niður"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Fletta til vinstri"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Fletta til hægri"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Loka flettistillingu"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Flettisvæði"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> var sett í flokkinn TAKMARKAÐ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendi mynd"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 28aee0fbba0c..7fe1bdc6762d 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scorri"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Metti in pausa"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posizione"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scorri verso l\'alto"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scorri verso il basso"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scorri verso sinistra"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scorri verso destra"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Disattiva la modalità di scorrimento"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Riquadro di scorrimento"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> è stato inserito nel bucket RESTRICTED"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha inviato un\'immagine"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 5eadbd413f2c..c32bcdda3692 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"גלילה"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"השהיה"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"מיקום"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"גלילה למעלה"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"גלילה למטה"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"גלילה שמאלה"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"גלילה ימינה"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"יציאה ממצב גלילה"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"גלילה בחלונית"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> התווספה לקטגוריה \'מוגבל\'"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"נשלחה תמונה"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"פרופיל עבודה 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"בדיקה"</string> <string name="profile_label_communal" msgid="8743921499944800427">"שיתופי"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"פרופיל מפקח"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"פרופיל העבודה"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"המרחב הפרטי"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"שכפול"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 24e45df6d1ac..97e550d9e4db 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Айналдыру"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Кідірту"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Орналастыру"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Жоғары айналдыру"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Төменге айналдыру"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Солға айналдыру"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Оңға айналдыру"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Айналдыру режимінен шығу"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Айналдыру панелі"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ШЕКТЕЛГЕН себетке салынды."</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сурет жіберілді"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Жұмыс 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Сынақ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Жалпы"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Қадағалау"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Жұмыс профилі"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Құпия кеңістік"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клон"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index c9a0f211a4e8..316955f0717b 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ಕೆಲಸ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ಪರೀಕ್ಷೆ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"ಸಮುದಾಯ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ಮೇಲ್ವಿಚಾರಣೆಯಾಗುತ್ತಿದೆ"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"ಪ್ರೈವೆಟ್ ಸ್ಪೇಸ್"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ಕ್ಲೋನ್"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 852051f0d8e2..bd48cb3e3bf8 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"스크롤"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"일시중지"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"위치"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"위로 스크롤"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"아래로 스크롤"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"왼쪽으로 스크롤"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"오른쪽으로 스크롤"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"스크롤 모드 종료"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"패널 스크롤"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 항목이 RESTRICTED 버킷으로 이동함"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"이미지 보냄"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"직장 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"테스트"</string> <string name="profile_label_communal" msgid="8743921499944800427">"공동"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"감독 중"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"직장 프로필"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"비공개 스페이스"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"클론"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 8115a000a42a..906d4a3ed0fa 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Сыдыруу"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Тындыруу"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Орду"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Жогору сыдыруу"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Ылдый сыдыруу"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Солго сыдырып кароо"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Оңго сыдырып кароо"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Сыдыруу режиминен чыгуу"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Сыдыруу панели"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ЧЕКТЕЛГЕН чакага коюлган"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сүрөт жөнөттү"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Жумуш 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Сыноо"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Жалпы"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Көзөмөлдөнүүдө"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Жумуш профили"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Жеке мейкиндик"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клон"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index b9868d1f82f6..e6222da7af40 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ວຽກ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ທົດສອບ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"ສ່ວນກາງ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ການເບິ່ງແຍງກວດກາ"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"ພື້ນທີ່ສ່ວນບຸກຄົນ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ໂຄລນ"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index c71c2b8e612e..3a2836833ea4 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -2488,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Darbas (3)"</string> <string name="profile_label_test" msgid="9168641926186071947">"Bandymas"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Bendruomenės"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Prižiūrima"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Darbo profilis"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privati erdvė"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klonuoti"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 252343724908..b0f6313c214d 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Ritināt"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pārtraukt"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozīcija"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Ritināt augšup"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Ritināt lejup"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Ritināt pa kreisi"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Ritināt pa labi"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Izslēgt ritināšanas režīmu"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Ritināšanas panelis"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Pakotne “<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>” ir ievietota ierobežotā kopā."</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"nosūtīts attēls"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Darbam (3.)"</string> <string name="profile_label_test" msgid="9168641926186071947">"Testēšanai"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Kopīgs"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Uzraudzība"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Darba profils"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privātā telpa"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klons"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index c6cb1faa850b..8b389a0e5a1b 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Лизгање"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Паузирај"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Позиционирај"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Лизгај нагоре"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Лизгај надолу"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Лизгај налево"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Лизгај надесно"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Излези од „Режим на лизгање“"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Табла за лизгање"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е ставен во корпата ОГРАНИЧЕНИ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"испрати слика"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Работен профил 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Профил за тестирање"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Профил на заедницата"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Вршење надзор"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Работен профил"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Приватен простор"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клониран профил"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index fca58a113c7b..825da1894522 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"സ്ക്രോൾ ചെയ്യുക"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"താൽക്കാലികമായി നിർത്തുക"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"സ്ഥാനം"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"മുകളിലേക്ക് സ്ക്രോൾ ചെയ്യുക"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"താഴേക്ക് സ്ക്രോൾ ചെയ്യുക"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"ഇടത്തേക്ക് സ്ക്രോൾ ചെയ്യുക"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"വലത്തേക്ക് സ്ക്രോൾ ചെയ്യുക"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"സ്ക്രോൾ മോഡിൽ നിന്ന് പുറത്തുകടക്കുക"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"സ്ക്രോൾ പാനൽ"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> നിയന്ത്രിത ബക്കറ്റിലേക്ക് നീക്കി"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ചിത്രം അയച്ചു"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ഔദ്യോഗികം 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ടെസ്റ്റ്"</string> <string name="profile_label_communal" msgid="8743921499944800427">"കമ്മ്യൂണൽ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"മേൽനോട്ടമുണ്ട്"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ഔദ്യോഗിക പ്രൊഫൈൽ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"സ്വകാര്യ സ്പേസ്"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ക്ലോൺ ചെയ്യുക"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 740c78386c3a..4222ce1df348 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Гүйлгэх"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Түр зогсоох"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Байрлал"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Дээш гүйлгэх"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Доош гүйлгэх"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Зүүн тийш гүйлгэх"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Баруун тийш гүйлгэх"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Гүйлгэх горимоос гарах"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Гүйлгэх үйлдлийн түр зуурын самбар"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>-г ХЯЗГААРЛАСАН сагс руу орууллаа"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"зураг илгээсэн"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Ажил 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Туршилт"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Нийтийн"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Хянаж байна"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Ажлын профайл"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Хаалттай орон зай"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клон"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 6f741d7b77b9..73fc1b657c97 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"स्क्रोल करा"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"थांबवा"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"स्थिती"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"वर स्क्रोल करा"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"खाली स्क्रोल करा"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"डावीकडे स्क्रोल करा"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"उजवीकडे स्क्रोल करा"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"स्क्रोल करा मोड मधून बाहेर पडा"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"स्क्रोल करा पॅनल"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> हे प्रतिबंधित बादलीमध्ये ठेवण्यात आले आहे"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"इमेज पाठवली आहे"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ऑफिस ३"</string> <string name="profile_label_test" msgid="9168641926186071947">"चाचणी"</string> <string name="profile_label_communal" msgid="8743921499944800427">"सामुदायिक"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"पर्यवेक्षण करत आहे"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"कार्य प्रोफाइल"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"खाजगी स्पेस"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"क्लोन"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 52421557f296..f3160d85e97b 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"အလုပ် ၃"</string> <string name="profile_label_test" msgid="9168641926186071947">"စမ်းသပ်မှု"</string> <string name="profile_label_communal" msgid="8743921499944800427">"အများသုံး"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ကြီးကြပ်နေသည်"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"အလုပ်ပရိုဖိုင်"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"သီးသန့်နေရာ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ပုံတူပွားရန်"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 3dca9b927c10..a4026db705ce 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rull"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sett på pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Plassér"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Rull opp"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Rull ned"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Rull til venstre"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Rull til høyre"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Avslutt rullemodus"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Rullepanel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blitt plassert i TILGANGSBEGRENSET-toppmappen"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har sendt et bilde"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Jobb 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Felles"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Med tilsyn"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Jobbprofil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privat område"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 13c98551b8ca..5e32b967ec71 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"स्क्रोल गर्नुहोस्"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"पज गर्नुहोस्"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"स्थिति"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"माथितिर स्क्रोल गर्नुहोस्"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"तलतिर स्क्रोल गर्नुहोस्"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"बायाँतिर स्क्रोल गर्नुहोस्"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"दायाँतिर स्क्रोल गर्नुहोस्"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"स्क्रोल गर्नुहोस् मोडबाट बाहिरिनुहोस्"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"प्यानल स्क्रोल गर्नुहोस्"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> लाई प्रतिबन्धित बाल्टीमा राखियो"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"फोटो पठाइयो"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index f5e3831a6032..ebdd4c65db20 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scrollen"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauzeren"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Positie"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Omhoog scrollen"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Omlaag scrollen"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Naar links scrollen"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Naar rechts scrollen"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Scrollmodus sluiten"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Deelvenster scrollen"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in de bucket RESTRICTED geplaatst"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"heeft een afbeelding gestuurd"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Werk 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Gemeenschappelijk"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Toezicht"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Werkprofiel"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privégedeelte"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Kloon"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index eee243f3f47a..2b91cff7f216 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ବିରତ କରନ୍ତୁ"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ସ୍ଥିତି"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ଉପରକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"ତଳକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"ବାମକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"ଡାହାଣକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"ସ୍କ୍ରୋଲ ମୋଡରୁ ବାହାରି ଯାଆନ୍ତୁ"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"ସ୍କ୍ରୋଲ ପେନେଲ"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>କୁ ପ୍ରତିବନ୍ଧିତ ବକେଟରେ ରଖାଯାଇଛି"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ଏକ ଛବି ପଠାଯାଇଛି"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ୱାର୍କ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ଟେଷ୍ଟ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"କମ୍ୟୁନାଲ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ନିରୀକ୍ଷଣ କରାଯାଉଛି"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ୱାର୍କ ପ୍ରୋଫାଇଲ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"ପ୍ରାଇଭେଟ ସ୍ପେସ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"କ୍ଲୋନ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 6632fb0f1354..5a9f227f6772 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ਸਕ੍ਰੋਲ ਕਰੋ"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ਰੋਕੋ"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ਸਥਿਤੀ"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ਉੱਪਰ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"ਹੇਠਾਂ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"ਖੱਬੇ ਪਾਸੇ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"ਸਕ੍ਰੋਲ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"ਸਕ੍ਰੋਲ ਪੈਨਲ"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ਨੂੰ ਪ੍ਰਤਿਬੰਧਿਤ ਖਾਨੇ ਵਿੱਚ ਪਾਇਆ ਗਿਆ ਹੈ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ਚਿੱਤਰ ਭੇਜਿਆ ਗਿਆ"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"ਕੰਮ ਸੰਬੰਧੀ 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ਜਾਂਚ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"ਭਾਈਚਾਰਕ"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ਕਲੋਨ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 2cdac419ab0d..5f02c1fcc532 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Przewijanie"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Wstrzymaj"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozycja"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Przewiń w górę"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Przewiń w dół"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Przewiń w lewo"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Przewiń w prawo"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Wyłącz tryb przewijania"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Przewiń panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Umieszczono pakiet <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> w zasobniku danych RESTRICTED"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"wysłano obraz"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Służbowy 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Testowy"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Wspólny"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nadzorujesz"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profil służbowy"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Przestrzeń prywatna"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 52dc72c2c280..32d883ab7c29 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rolar"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posição"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Rolar para cima"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Rolar para baixo"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Rolar para a esquerda"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Rolar para a direita"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Sair do modo de rolagem"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Painel de rolagem"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Teste"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Público"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervisionando"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de trabalho"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espaço privado"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index a8400e2837a4..57507df2370a 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -2487,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Teste"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Comum"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"A supervisionar"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de trabalho"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espaço privado"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 52dc72c2c280..32d883ab7c29 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rolar"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posição"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Rolar para cima"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Rolar para baixo"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Rolar para a esquerda"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Rolar para a direita"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Sair do modo de rolagem"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Painel de rolagem"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Teste"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Público"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supervisionando"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Perfil de trabalho"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Espaço privado"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 8ad6d02e6113..2e6f58dca1df 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Derulează"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Întrerupe"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Poziție"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Derulează în sus"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Derulează în jos"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Derulează la stânga"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Derulează la dreapta"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Ieși din modul de derulare"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Panou de derulare"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a fost adăugat la grupul RESTRICȚIONATE"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a trimis o imagine"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Serviciu 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Comun"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Supraveghere activă"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profil de serviciu"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Spațiu privat"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clonă"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 0ee25426bbf6..2beebd7569fc 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Прокрутить"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Приостановить"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Положение"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Прокрутка вверх"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Прокрутка вниз"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Прокрутка влево"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Прокрутка вправо"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Отключить режим прокрутки"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Панель прокрутки"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Приложение \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" помещено в категорию с ограниченным доступом."</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"Отправлено изображение"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Рабочий 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Тестовый"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Совместный"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Управляющий профиль"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Рабочий профиль"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Частное пространство"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клонированный"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 0d3cd7e4979a..a59187cf62c6 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"අනුචලනය කරන්න"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"විරාම කරන්න"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ස්ථානය"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"ඉහළට අනුචලනය කරන්න"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"පහළට අනුචලනය කරන්න"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"වමට අනුචලනය කරන්න"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"දකුණට අනුචලනය කරන්න"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"අනුචලන ප්රකාරයෙන් පිටවන්න"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"අනුචලන පැනලය"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> අවහිර කළ බාල්දියට දමා ඇත"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"රූපයක් එව්වා"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"කාර්යාලය 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"පරීක්ෂණය"</string> <string name="profile_label_communal" msgid="8743921499944800427">"වාර්ගික"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"අධීක්ෂණය කිරීම"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"කාර්යාල පැතිකඩ"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"රහසිගත අවකාශය"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"ක්ලෝන කරන්න"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index e3855d1a6790..999000e6e490 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Posúvať"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pozastaviť"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozícia"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Posunúť nahor"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Posunúť nadol"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Posunúť doľava"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Posunúť doprava"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Ukončiť režim posúvania"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Posúvateľný panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balík <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> bol vložený do kontajnera OBMEDZENÉ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"odoslal(a) obrázok"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"3. pracovný"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Spoločné"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Dohľad"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Pracovný profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Súkromný priestor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index b0ebb5f073b7..4751cb9cfb87 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -2488,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Delo 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Preizkus"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Skupno"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nadzor"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Delovni profil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Zasebni prostor"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 0f99307da7e3..a15cf4ea3b5c 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -2492,8 +2492,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Puna 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"I përbashkët"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Në mbikëqyrje"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profili i punës"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Hapësira private"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 4827c0cc3265..112173ac13ad 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -2274,18 +2274,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Скролујте"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Паузирај"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Позиција"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Скролуј нагоре"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Скролуј надоле"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Скролуј улево"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Скролуј удесно"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Изађи из режима скроловања"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Окно за скроловање"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> је додат у сегмент ОГРАНИЧЕНО"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"је послао/ла слику"</string> @@ -2493,8 +2487,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Посао 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Тест"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Заједничко"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Надзире се"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Пословни профил"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Приватан простор"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Клонирано"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index c471f065b377..5cb528b5c555 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scrolla"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausa"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Scrolla uppåt"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Scrolla nedåt"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Scrolla åt vänster"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Scrolla åt höger"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Avsluta scrollningsläget"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Scrollningspanel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> har placerats i hinken RESTRICTED"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har skickat en bild"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Arbete 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Allmän"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Kontrollerar"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Jobbprofil"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Privat utrymme"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klona"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 31f5592ecaad..5207e032fc30 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Sogeza"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sitisha"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Nafasi"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Sogeza Juu"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Sogeza Chini"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Sogeza Kushoto"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Sogeza Kulia"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Funga Hali ya Kusogeza"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Sogeza Kidirisha"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> kimewekwa katika kikundi KILICHODHIBITIWA"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"alituma picha"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Wa 3 wa Kazini"</string> <string name="profile_label_test" msgid="9168641926186071947">"Jaribio"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Unaoshirikiwa"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Unasimamia"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Wasifu wa kazini"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Sehemu ya faragha"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Nakala"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 36b82d99aded..015ce084355b 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"நகர்த்தும்"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"இடைநிறுத்து"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"நிலை"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"மேலே நகர்த்து"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"கீழே நகர்த்து"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"இடப்புறம் நகர்த்து"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"வலப்புறம் நகர்த்து"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"நகர்த்துதல் பயன்முறையில் இருந்து வெளியேறு"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"பேனலை நகர்த்து"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> என்பதை வரம்பிடப்பட்ட பக்கெட்திற்குள் சேர்க்கப்பட்டது"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"படம் அனுப்பப்பட்டது"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"பணி 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"பரிசோதனை"</string> <string name="profile_label_communal" msgid="8743921499944800427">"பொது"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"கண்காணிக்கப்படுகிறது"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"பணிக் கணக்கு"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"ரகசிய இடம்"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"குளோன்"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index b67f3828ab72..224ac78c5f92 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"เลื่อน"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"หยุดชั่วคราว"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"วางตำแหน่ง"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"เลื่อนขึ้น"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"เลื่อนลง"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"เลื่อนไปทางซ้าย"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"เลื่อนไปทางขวา"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"ออกจากโหมดเลื่อน"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"เลื่อนแผง"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"ใส่ <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ในที่เก็บข้อมูลที่ถูกจำกัดแล้ว"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ส่งรูปภาพ"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"งาน 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"ทดสอบ"</string> <string name="profile_label_communal" msgid="8743921499944800427">"ส่วนกลาง"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"ผู้ควบคุมดูแล"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"โปรไฟล์งาน"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"พื้นที่ส่วนตัว"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"โคลน"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 3c380884ceea..9b6ecd30b233 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Mag-scroll"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"I-pause"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisyon"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Mag-scroll Pataas"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Mag-scroll Pababa"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Mag-scroll Pakaliwa"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Mag-scroll Pakanan"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Umalis sa Scroll Mode"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Scroll Panel"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Inilagay ang <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> sa PINAGHIHIGPITANG bucket"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"nagpadala ng larawan"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Trabaho 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Namamahala"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Profile sa trabaho"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Pribadong space"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Clone"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 8119d7d2bb2a..ea4cfa644bf3 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Kaydırma"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Duraklatma"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Konum"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Yukarı Kaydır"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Aşağı Kaydır"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Sola Kaydır"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Sağa Kaydır"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Kaydırma Modundan Çık"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Paneli Kaydır"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> KISITLANMIŞ gruba yerleştirildi"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"bir resim gönderildi"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"İş 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Paylaşılan"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Gözetim"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"İş profili"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Özel alan"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Klon"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index cda2af43ef12..693b16e88a4c 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -2275,18 +2275,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Прокрутити"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Призупинити"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Змінити позицію"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Прокрутити вгору"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Прокрутити вниз"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Прокрутити ліворуч"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Прокрутити праворуч"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Вимкнути режим прокручування"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Панель прокручування"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" додано в сегмент з обмеженнями"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"надіслано зображення"</string> @@ -2494,8 +2488,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Робочий профіль 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Тестовий профіль"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Спільний профіль"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Батьківськ. контроль"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Робочий профіль"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Приватний простір"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Копія профілю"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index fc2bd4b605d1..f7b10bff74eb 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -2486,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Ish 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Test"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Umumiy"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Nazorat ostida"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Ish profili"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Maxfiy makon"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Nusxalash"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 4141af07dc8b..4ee534c6ecfe 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Cuộn"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Tạm dừng"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Vị trí"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Cuộn lên"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Cuộn xuống"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Cuộn sang trái"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Cuộn sang phải"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Thoát khỏi chế độ cuộn"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Cuộn bảng điều khiển"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Đã đưa <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> vào bộ chứa BỊ HẠN CHẾ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"đã gửi hình ảnh"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Công việc 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Kiểm thử"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Dùng chung"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Giám sát"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Hồ sơ công việc"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Không gian riêng tư"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Nhân bản"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 95dd35fcb0dd..98069c65d235 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"滚动"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暂停"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"向上滚动"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"向下滚动"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"向左滚动"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"向右滚动"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"退出滚动模式"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"滚动面板"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已被放入受限存储分区"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"发送了一张图片"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"工作 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"测试"</string> <string name="profile_label_communal" msgid="8743921499944800427">"共用"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"监管"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"工作资料"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"私密空间"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"克隆"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index b956da1e856e..038973d760dd 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"捲動"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暫停"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"向上捲動"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"向下捲動"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"向左捲動"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"向右捲動"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"退出捲動模式"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"捲動面板"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已納入受限制的儲存區"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"已傳送圖片"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"工作 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"測試"</string> <string name="profile_label_communal" msgid="8743921499944800427">"共用"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"監管"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"工作設定檔"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"私人空間"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"複製"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index f9abe0e69a46..8ff587bf1e55 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"捲動"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暫停"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"向上捲動"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"向下捲動"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"向左捲動"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"向右捲動"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"退出捲動模式"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"捲動面板"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"已將「<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>」移入受限制的值區"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"傳送了一張圖片"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"工作 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"測試"</string> <string name="profile_label_communal" msgid="8743921499944800427">"通用"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"監督中"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"工作資料夾"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"私人空間"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"複製"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 4292eab29a16..3fc910cca43a 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -2273,18 +2273,12 @@ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Skrola"</string> <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Misa"</string> <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Indawo"</string> - <!-- no translation found for accessibility_autoclick_scroll_up (2044948780797117443) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_down (3733401063292018116) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_left (8564421367992824198) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_right (8932417330753984265) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_exit (3788610039146769696) --> - <skip /> - <!-- no translation found for accessibility_autoclick_scroll_panel_title (7120598166296447036) --> - <skip /> + <string name="accessibility_autoclick_scroll_up" msgid="2044948780797117443">"Skrolela Phezulu"</string> + <string name="accessibility_autoclick_scroll_down" msgid="3733401063292018116">"Skrolela Phansi"</string> + <string name="accessibility_autoclick_scroll_left" msgid="8564421367992824198">"Skrolela Ngakwesokunxele"</string> + <string name="accessibility_autoclick_scroll_right" msgid="8932417330753984265">"Skrolela Ngakwesokudla"</string> + <string name="accessibility_autoclick_scroll_exit" msgid="3788610039146769696">"Phuma Kumodi Yokuskrola"</string> + <string name="accessibility_autoclick_scroll_panel_title" msgid="7120598166296447036">"Iphaneli Yokuskrola"</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"I-<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ifakwe kubhakede LOKUKHAWULELWE"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"uthumele isithombe"</string> @@ -2492,8 +2486,7 @@ <string name="profile_label_work_3" msgid="4834572253956798917">"Umsebenzi 3"</string> <string name="profile_label_test" msgid="9168641926186071947">"Hlola"</string> <string name="profile_label_communal" msgid="8743921499944800427">"Okomphakathi"</string> - <!-- no translation found for profile_label_supervising (5649312778545745371) --> - <skip /> + <string name="profile_label_supervising" msgid="5649312778545745371">"Ukugada"</string> <string name="accessibility_label_managed_profile" msgid="3366526886209832641">"Iphrofayela yomsebenzi"</string> <string name="accessibility_label_private_profile" msgid="1436459319135548969">"Indawo engasese"</string> <string name="accessibility_label_clone_profile" msgid="7579118375042398784">"Yenza i-Clone"</string> diff --git a/core/tests/coretests/src/android/content/pm/UserInfoTest.java b/core/tests/coretests/src/android/content/pm/UserInfoTest.java index edeea6d85ca6..c84c21557ea4 100644 --- a/core/tests/coretests/src/android/content/pm/UserInfoTest.java +++ b/core/tests/coretests/src/android/content/pm/UserInfoTest.java @@ -16,19 +16,44 @@ package android.content.pm; +import static android.content.pm.UserInfo.FLAG_DEMO; +import static android.content.pm.UserInfo.FLAG_FULL; +import static android.content.pm.UserInfo.FLAG_GUEST; +import static android.content.pm.UserInfo.FLAG_MAIN; +import static android.content.pm.UserInfo.FLAG_PROFILE; +import static android.content.pm.UserInfo.FLAG_SYSTEM; +import static android.os.UserManager.USER_TYPE_FULL_RESTRICTED; +import static android.os.UserManager.USER_TYPE_FULL_SYSTEM; +import static android.os.UserManager.USER_TYPE_SYSTEM_HEADLESS; + import static com.google.common.truth.Truth.assertThat; +import android.content.pm.UserInfo.UserInfoFlag; import android.os.UserHandle; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import com.google.common.truth.Expect; + +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; + @RunWith(AndroidJUnit4.class) @SmallTest -public class UserInfoTest { +public final class UserInfoTest { + + @Rule + public final SetFlagsRule flags = + new SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT); + + @Rule public final Expect expect = Expect.create(); + @Test public void testSimple() throws Exception { final UserInfo ui = new UserInfo(10, "Test", UserInfo.FLAG_GUEST); @@ -56,9 +81,6 @@ public class UserInfoTest { assertThat(ui.isInitialized()).isEqualTo(false); assertThat(ui.isFull()).isEqualTo(false); assertThat(ui.isMain()).isEqualTo(false); - - // Derived dynamically - assertThat(ui.canHaveProfile()).isEqualTo(false); } @Test @@ -68,4 +90,64 @@ public class UserInfoTest { assertThat(ui.toString()).isNotEmpty(); assertThat(ui.toFullString()).isNotEmpty(); } + + @Test + @DisableFlags(android.multiuser.Flags.FLAG_PROFILES_FOR_ALL) + public void testCanHaveProfile_flagProfilesForAllDisabled() { + expectCannotHaveProfile("non-full user", createTestUserInfo(/* flags= */ 0)); + expectCannotHaveProfile("guest user", createTestUserInfo(FLAG_FULL | FLAG_GUEST)); + expectCanHaveProfile("main user", createTestUserInfo(FLAG_FULL | FLAG_MAIN)); + expectCannotHaveProfile("non-main user", createTestUserInfo(FLAG_FULL)); + expectCannotHaveProfile("demo user", createTestUserInfo(FLAG_FULL | FLAG_DEMO)); + expectCannotHaveProfile("restricted user", + createTestUserInfo(USER_TYPE_FULL_RESTRICTED, FLAG_FULL)); + expectCannotHaveProfile("profile user", createTestUserInfo(FLAG_PROFILE)); + expectCanHaveProfile("(full) system user that's also main user", + createTestUserInfo(USER_TYPE_FULL_SYSTEM, FLAG_FULL | FLAG_SYSTEM | FLAG_MAIN)); + expectCannotHaveProfile("headless system user that's not main user", + createTestUserInfo(USER_TYPE_SYSTEM_HEADLESS, FLAG_SYSTEM)); + } + + @Test + @EnableFlags(android.multiuser.Flags.FLAG_PROFILES_FOR_ALL) + public void testCanHaveProfile_flagProfilesForAllEnabled() { + expectCannotHaveProfile("non-full user", createTestUserInfo(/* flags= */ 0)); + expectCannotHaveProfile("guest user", createTestUserInfo(FLAG_FULL | FLAG_GUEST)); + expectCanHaveProfile("main user", createTestUserInfo(FLAG_FULL | FLAG_MAIN)); + expectCanHaveProfile("non-main user", createTestUserInfo(FLAG_FULL)); + expectCannotHaveProfile("demo user", createTestUserInfo(FLAG_FULL | FLAG_DEMO)); + expectCannotHaveProfile("restricted user", + createTestUserInfo(USER_TYPE_FULL_RESTRICTED, FLAG_FULL)); + expectCannotHaveProfile("profile user", createTestUserInfo(FLAG_PROFILE)); + expectCanHaveProfile("(full) system user that's also main user", + createTestUserInfo(USER_TYPE_FULL_SYSTEM, FLAG_FULL | FLAG_SYSTEM | FLAG_MAIN)); + expectCannotHaveProfile("headless system user that's not main user", + createTestUserInfo(USER_TYPE_SYSTEM_HEADLESS, FLAG_SYSTEM)); + } + + /** + * Creates a new {@link UserInfo} with id {@code 10}, name {@code Test}, and the given + * {@code flags}. + */ + private UserInfo createTestUserInfo(@UserInfoFlag int flags) { + return new UserInfo(10, "Test", flags); + } + + /** + * Creates a new {@link UserInfo} with id {@code 10}, name {@code Test}, and the given + * {@code userType} and {@code flags}. + */ + private UserInfo createTestUserInfo(String userType, @UserInfoFlag int flags) { + return new UserInfo(10, "Test", /* iconPath= */ null, flags, userType); + } + + private void expectCanHaveProfile(String description, UserInfo user) { + expect.withMessage("canHaveProfile() on %s (%s)", description, user) + .that(user.canHaveProfile()).isTrue(); + } + + private void expectCannotHaveProfile(String description, UserInfo user) { + expect.withMessage("canHaveProfile() on %s (%s)", description, user) + .that(user.canHaveProfile()).isFalse(); + } } diff --git a/core/tests/coretests/src/android/security/advancedprotection/AdvancedProtectionManagerTest.java b/core/tests/coretests/src/android/security/advancedprotection/AdvancedProtectionManagerTest.java index 45864b01c795..e06ff98b0384 100644 --- a/core/tests/coretests/src/android/security/advancedprotection/AdvancedProtectionManagerTest.java +++ b/core/tests/coretests/src/android/security/advancedprotection/AdvancedProtectionManagerTest.java @@ -16,10 +16,14 @@ package android.security.advancedprotection; +import static android.os.UserManager.DISALLOW_CELLULAR_2G; +import static android.os.UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY; import static android.security.advancedprotection.AdvancedProtectionManager.ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG; import static android.security.advancedprotection.AdvancedProtectionManager.EXTRA_SUPPORT_DIALOG_FEATURE; import static android.security.advancedprotection.AdvancedProtectionManager.EXTRA_SUPPORT_DIALOG_TYPE; import static android.security.advancedprotection.AdvancedProtectionManager.FEATURE_ID_DISALLOW_CELLULAR_2G; +import static android.security.advancedprotection.AdvancedProtectionManager.FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES; +import static android.security.advancedprotection.AdvancedProtectionManager.FEATURE_ID_ENABLE_MTE; import static android.security.advancedprotection.AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_BLOCKED_INTERACTION; import static android.security.advancedprotection.AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_DISABLED_SETTING; import static android.security.advancedprotection.AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_UNKNOWN; @@ -37,6 +41,9 @@ import org.junit.runners.JUnit4; public class AdvancedProtectionManagerTest { private static final int FEATURE_ID_INVALID = -1; private static final int SUPPORT_DIALOG_TYPE_INVALID = -1; + //TODO(b/378931989): Switch to android.app.admin.DevicePolicyIdentifiers.MEMORY_TAGGING_POLICY + //when the appropriate flag is launched. + private static final String MEMORY_TAGGING_POLICY = "memoryTagging"; @Test public void testCreateSupportIntent_validFeature_validTypeUnknown_createsIntent() { @@ -94,4 +101,44 @@ public class AdvancedProtectionManagerTest { AdvancedProtectionManager.createSupportIntent(FEATURE_ID_INVALID, SUPPORT_DIALOG_TYPE_INVALID)); } + + @Test + public void testCreateSupportIntentForPolicy_2g_typeUnknown_createsIntentForDisabledSetting() { + Intent intent = AdvancedProtectionManager + .createSupportIntentForPolicyIdentifierOrRestriction( + DISALLOW_CELLULAR_2G, SUPPORT_DIALOG_TYPE_UNKNOWN); + + assertEquals(ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG, intent.getAction()); + assertEquals(FEATURE_ID_DISALLOW_CELLULAR_2G, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_FEATURE, FEATURE_ID_INVALID)); + assertEquals(SUPPORT_DIALOG_TYPE_DISABLED_SETTING, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_TYPE, SUPPORT_DIALOG_TYPE_INVALID)); + } + + @Test + public void testCreateSupportIntentForPolicy_mte_typeUnknown_createsIntentForDisabledSetting() { + Intent intent = AdvancedProtectionManager + .createSupportIntentForPolicyIdentifierOrRestriction( + MEMORY_TAGGING_POLICY, SUPPORT_DIALOG_TYPE_UNKNOWN); + + assertEquals(ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG, intent.getAction()); + assertEquals(FEATURE_ID_ENABLE_MTE, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_FEATURE, FEATURE_ID_INVALID)); + assertEquals(SUPPORT_DIALOG_TYPE_DISABLED_SETTING, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_TYPE, SUPPORT_DIALOG_TYPE_INVALID)); + } + + @Test + public void + testCreateSupportIntentForPolicy_unknownSources_typeUnknown_createsIntentForUnknown() { + Intent intent = AdvancedProtectionManager + .createSupportIntentForPolicyIdentifierOrRestriction( + DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY, SUPPORT_DIALOG_TYPE_UNKNOWN); + + assertEquals(ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG, intent.getAction()); + assertEquals(FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_FEATURE, FEATURE_ID_INVALID)); + assertEquals(SUPPORT_DIALOG_TYPE_UNKNOWN, intent.getIntExtra( + EXTRA_SUPPORT_DIALOG_TYPE, SUPPORT_DIALOG_TYPE_INVALID)); + } } diff --git a/core/tests/coretests/src/android/window/BackTouchTrackerTest.kt b/core/tests/coretests/src/android/window/BackTouchTrackerTest.kt index ad68e385459e..381b566018c7 100644 --- a/core/tests/coretests/src/android/window/BackTouchTrackerTest.kt +++ b/core/tests/coretests/src/android/window/BackTouchTrackerTest.kt @@ -37,7 +37,7 @@ class BackTouchTrackerTest { fun generatesProgress_onStart() { val linearTracker = linearTouchTracker() linearTracker.setGestureStartLocation(INITIAL_X_LEFT_EDGE, 0f, BackEvent.EDGE_LEFT) - val event = linearTracker.createStartEvent() + val event = linearTracker.createStartEvent(null) assertEquals(0f, event.progress, 0f) } diff --git a/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java b/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java index 66524d1c1d2a..215c1623a530 100644 --- a/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java +++ b/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java @@ -695,7 +695,8 @@ public class WindowOnBackInvokedDispatcherTest { /* frameTimeMillis = */ 0, /* progress = */ progress, /* triggerBack = */ false, - /* swipeEdge = */ BackEvent.EDGE_LEFT); + /* swipeEdge = */ BackEvent.EDGE_LEFT, + /* departingAnimationTarget = */ null); } private void verifyImeCallackRegistrations() throws RemoteException { diff --git a/libs/WindowManager/Shell/aconfig/multitasking.aconfig b/libs/WindowManager/Shell/aconfig/multitasking.aconfig index b6a1501831c0..19455a313a9d 100644 --- a/libs/WindowManager/Shell/aconfig/multitasking.aconfig +++ b/libs/WindowManager/Shell/aconfig/multitasking.aconfig @@ -211,3 +211,10 @@ flag { description: "Makes the split divider snap 'magnetically' to available snap points during drag" bug: "383631946" } + +flag { + name: "enable_dynamic_insets_for_app_launch" + namespace: "multitasking" + description: "Enables dynamic insets for app launch so the window is properly cropped" + bug: "336511494" +} diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java index 25b9f8ccc6ae..f68afea92850 100644 --- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java +++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java @@ -18,6 +18,7 @@ package com.android.wm.shell.shared; import static android.app.WindowConfiguration.windowingModeToString; import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; +import static android.view.Display.INVALID_DISPLAY; import android.annotation.IntDef; import android.app.ActivityManager.RecentTaskInfo; @@ -65,6 +66,11 @@ public class GroupedTaskInfo implements Parcelable { private final int mDeskId; /** + * The ID of the display that desk with [mDeskId] is in. + */ + private final int mDeskDisplayId; + + /** * The type of this particular task info, can be one of TYPE_FULLSCREEN, TYPE_SPLIT or * TYPE_DESK. */ @@ -109,17 +115,19 @@ public class GroupedTaskInfo implements Parcelable { * Create new for a stack of fullscreen tasks */ public static GroupedTaskInfo forFullscreenTasks(@NonNull TaskInfo task) { - return new GroupedTaskInfo(/* deskId = */ -1, List.of(task), null, TYPE_FULLSCREEN, - /* minimizedFreeformTaskIds = */ null); + return new GroupedTaskInfo(/* deskId = */ -1, /* displayId = */ INVALID_DISPLAY, + List.of(task), null, + TYPE_FULLSCREEN, /* minimizedFreeformTaskIds = */ null); } /** * Create new for a pair of tasks in split screen */ public static GroupedTaskInfo forSplitTasks(@NonNull TaskInfo task1, - @NonNull TaskInfo task2, @NonNull SplitBounds splitBounds) { - return new GroupedTaskInfo(/* deskId = */ -1, List.of(task1, task2), splitBounds, - TYPE_SPLIT, /* minimizedFreeformTaskIds = */ null); + @NonNull TaskInfo task2, @NonNull SplitBounds splitBounds) { + return new GroupedTaskInfo(/* deskId = */ -1, /* displayId = */ INVALID_DISPLAY, + List.of(task1, task2), + splitBounds, TYPE_SPLIT, /* minimizedFreeformTaskIds = */ null); } /** @@ -127,9 +135,11 @@ public class GroupedTaskInfo implements Parcelable { */ public static GroupedTaskInfo forDeskTasks( int deskId, + int deskDisplayId, @NonNull List<TaskInfo> tasks, @NonNull Set<Integer> minimizedFreeformTaskIds) { - return new GroupedTaskInfo(deskId, tasks, /* splitBounds = */ null, TYPE_DESK, + return new GroupedTaskInfo(deskId, deskDisplayId, tasks, /* splitBounds = */ null, + TYPE_DESK, minimizedFreeformTaskIds.stream().mapToInt(i -> i).toArray()); } @@ -149,11 +159,13 @@ public class GroupedTaskInfo implements Parcelable { private GroupedTaskInfo( int deskId, + int deskDisplayId, @NonNull List<TaskInfo> tasks, @Nullable SplitBounds splitBounds, @GroupType int type, @Nullable int[] minimizedFreeformTaskIds) { mDeskId = deskId; + mDeskDisplayId = deskDisplayId; mTasks = tasks; mGroupedTasks = null; mSplitBounds = splitBounds; @@ -164,6 +176,7 @@ public class GroupedTaskInfo implements Parcelable { private GroupedTaskInfo(@NonNull List<GroupedTaskInfo> groupedTasks) { mDeskId = -1; + mDeskDisplayId = INVALID_DISPLAY; mTasks = null; mGroupedTasks = groupedTasks; mSplitBounds = null; @@ -185,6 +198,7 @@ public class GroupedTaskInfo implements Parcelable { protected GroupedTaskInfo(@NonNull Parcel parcel) { mDeskId = parcel.readInt(); + mDeskDisplayId = parcel.readInt(); mTasks = new ArrayList(); final int numTasks = parcel.readInt(); for (int i = 0; i < numTasks; i++) { @@ -295,6 +309,16 @@ public class GroupedTaskInfo implements Parcelable { } /** + * Returns the ID of the display that hosts the desk represented by [mDeskId]. + */ + public int getDeskDisplayId() { + if (mType != TYPE_DESK) { + throw new IllegalStateException("No display ID for non desktop task"); + } + return mDeskDisplayId; + } + + /** * Get type of this recents entry. One of {@link GroupType}. * Note: This is deprecated, callers should use `isBaseType()` and not make assumptions about * specific group types @@ -323,6 +347,7 @@ public class GroupedTaskInfo implements Parcelable { } GroupedTaskInfo other = (GroupedTaskInfo) obj; return mDeskId == other.mDeskId + && mDeskDisplayId == other.mDeskDisplayId && mType == other.mType && Objects.equals(mTasks, other.mTasks) && Objects.equals(mGroupedTasks, other.mGroupedTasks) @@ -332,7 +357,7 @@ public class GroupedTaskInfo implements Parcelable { @Override public int hashCode() { - return Objects.hash(mDeskId, mType, mTasks, mGroupedTasks, mSplitBounds, + return Objects.hash(mDeskId, mDeskDisplayId, mType, mTasks, mGroupedTasks, mSplitBounds, Arrays.hashCode(mMinimizedTaskIds)); } @@ -345,6 +370,7 @@ public class GroupedTaskInfo implements Parcelable { .collect(Collectors.joining(",\n\t", "[\n\t", "\n]"))); } else { taskString.append("Desk ID= ").append(mDeskId).append(", "); + taskString.append("Desk Display ID=").append(mDeskDisplayId).append(", "); taskString.append("Tasks=" + mTasks.stream() .map(taskInfo -> getTaskInfoDumpString(taskInfo)) .collect(Collectors.joining(", ", "[", "]"))); @@ -377,6 +403,7 @@ public class GroupedTaskInfo implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(mDeskId); + parcel.writeInt(mDeskDisplayId); // We don't use the parcel list methods because we want to only write the TaskInfo state // and not the subclasses (Recents/RunningTaskInfo) whose fields are all deprecated final int tasksSize = mTasks != null ? mTasks.size() : 0; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 7f8cfaeb9c03..5d59af940da0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -332,7 +332,11 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont @Override public void onThresholdCrossed() { - BackAnimationController.this.onThresholdCrossed(); + if (predictiveBackDelayWmTransition()) { + mShellExecutor.execute(BackAnimationController.this::onThresholdCrossed); + } else { + BackAnimationController.this.onThresholdCrossed(); + } } @Override @@ -448,7 +452,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont final boolean shouldDispatchToAnimator = shouldDispatchToAnimator(); if (!shouldDispatchToAnimator && mActiveCallback != null) { mCurrentTracker.updateStartLocation(); - tryDispatchOnBackStarted(mActiveCallback, mCurrentTracker.createStartEvent()); + tryDispatchOnBackStarted(mActiveCallback, mCurrentTracker.createStartEvent(null)); if (mBackNavigationInfo != null && !isAppProgressGenerationAllowed()) { tryPilferPointers(); } @@ -604,7 +608,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont mActiveCallback = mBackNavigationInfo.getOnBackInvokedCallback(); // App is handling back animation. Cancel system animation latency tracking. cancelLatencyTracking(); - tryDispatchOnBackStarted(mActiveCallback, touchTracker.createStartEvent()); + tryDispatchOnBackStarted(mActiveCallback, touchTracker.createStartEvent(null)); if (!isAppProgressGenerationAllowed()) { tryPilferPointers(); } @@ -1041,7 +1045,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont () -> mShellExecutor.execute(this::onBackAnimationFinished)); if (mApps.length >= 1) { - BackMotionEvent startEvent = mCurrentTracker.createStartEvent(); + BackMotionEvent startEvent = mCurrentTracker.createStartEvent(mApps[0]); dispatchOnBackStarted(mActiveCallback, startEvent); if (startEvent.getSwipeEdge() == EDGE_NONE) { // TODO(b/373544911): onBackStarted is dispatched here so that diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java index bb5b5cec1b4a..382fa9640ff9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java @@ -536,17 +536,20 @@ public class RecentTasksController implements TaskStackListenerCallback, } /** - * Represents a desk whose ID is `mDeskId` and contains the tasks in `mDeskTasks`. Some of these - * tasks are minimized and their IDs are contained in the `mMinimizedDeskTasks` set. + * Represents a desk whose ID is `mDeskId` inside the display with `mDisplayId` and contains + * the tasks in `mDeskTasks`. Some of these tasks are minimized and their IDs are contained + * in the `mMinimizedDeskTasks` set. */ private static class Desk { final int mDeskId; + final int mDisplayId; boolean mHasVisibleTasks = false; final ArrayList<TaskInfo> mDeskTasks = new ArrayList<>(); final Set<Integer> mMinimizedDeskTasks = new HashSet<>(); - Desk(int deskId) { + Desk(int deskId, int displayId) { mDeskId = deskId; + mDisplayId = displayId; } void addTask(TaskInfo taskInfo, boolean isMinimized, boolean isVisible) { @@ -562,7 +565,8 @@ public class RecentTasksController implements TaskStackListenerCallback, } GroupedTaskInfo createDeskTaskInfo() { - return GroupedTaskInfo.forDeskTasks(mDeskId, mDeskTasks, mMinimizedDeskTasks); + return GroupedTaskInfo.forDeskTasks(mDeskId, mDisplayId, mDeskTasks, + mMinimizedDeskTasks); } } @@ -601,7 +605,8 @@ public class RecentTasksController implements TaskStackListenerCallback, private Desk getOrCreateDesk(int deskId) { var desk = mTmpDesks.get(deskId); if (desk == null) { - desk = new Desk(deskId); + desk = new Desk(deskId, + mDesktopUserRepositories.get().getCurrent().getDisplayForDesk(deskId)); mTmpDesks.put(deskId, desk); } return desk; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java index 23dfb41d52c1..cca982142a3a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java @@ -153,7 +153,6 @@ public class HomeTransitionObserver implements TransitionObserver, return; } mPendingStartDragTransition = null; - if (aborted) return; if (mPendingHomeVisibilityUpdate != null) { notifyHomeVisibilityChanged(mPendingHomeVisibilityUpdate); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java index 5e8c1fe2aa8d..e08ef5883390 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java @@ -49,6 +49,7 @@ import android.view.ViewConfiguration; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerGlobal; +import android.window.DesktopExperienceFlags; import android.window.DesktopModeFlags; import android.window.WindowContainerTransaction; @@ -218,11 +219,17 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL relayoutParams.mRunningTaskInfo = taskInfo; relayoutParams.mLayoutResId = R.layout.caption_window_decor; relayoutParams.mCaptionHeightId = getCaptionHeightIdStatic(taskInfo.getWindowingMode()); - relayoutParams.mShadowRadius = hasGlobalFocus - ? context.getResources().getDimensionPixelSize( - R.dimen.freeform_decor_shadow_focused_thickness) - : context.getResources().getDimensionPixelSize( - R.dimen.freeform_decor_shadow_unfocused_thickness); + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + relayoutParams.mShadowRadiusId = hasGlobalFocus + ? R.dimen.freeform_decor_shadow_focused_thickness + : R.dimen.freeform_decor_shadow_unfocused_thickness; + } else { + relayoutParams.mShadowRadius = hasGlobalFocus + ? context.getResources().getDimensionPixelSize( + R.dimen.freeform_decor_shadow_focused_thickness) + : context.getResources().getDimensionPixelSize( + R.dimen.freeform_decor_shadow_unfocused_thickness); + } relayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw; relayoutParams.mSetTaskVisibilityPositionAndCrop = shouldSetTaskVisibilityPositionAndCrop; relayoutParams.mIsCaptionVisible = taskInfo.isFreeform() diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index 989550c60c0d..e8019e47e374 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -72,6 +72,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.widget.ImageButton; +import android.window.DesktopExperienceFlags; import android.window.DesktopModeFlags; import android.window.TaskSnapshot; import android.window.WindowContainerTransaction; @@ -719,7 +720,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin .getScaledTouchSlop(); final Resources res = mResult.mRootView.getResources(); final DragResizeWindowGeometry newGeometry = new DragResizeWindowGeometry( - mRelayoutParams.mCornerRadius, + DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue() + ? mResult.mCornerRadius : mRelayoutParams.mCornerRadius, new Size(mResult.mWidth, mResult.mHeight), getResizeEdgeHandleSize(res), getResizeHandleEdgeInset(res), getFineResizeCornerSize(res), getLargeResizeCornerSize(res), @@ -1072,13 +1074,23 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin } if (isAppHeader && DesktopModeStatus.useWindowShadow(/* isFocusedWindow= */ hasGlobalFocus)) { - relayoutParams.mShadowRadius = hasGlobalFocus - ? context.getResources().getDimensionPixelSize( - R.dimen.freeform_decor_shadow_focused_thickness) - : context.getResources().getDimensionPixelSize( - R.dimen.freeform_decor_shadow_unfocused_thickness); + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + relayoutParams.mShadowRadiusId = hasGlobalFocus + ? R.dimen.freeform_decor_shadow_focused_thickness + : R.dimen.freeform_decor_shadow_unfocused_thickness; + } else { + relayoutParams.mShadowRadius = hasGlobalFocus + ? context.getResources().getDimensionPixelSize( + R.dimen.freeform_decor_shadow_focused_thickness) + : context.getResources().getDimensionPixelSize( + R.dimen.freeform_decor_shadow_unfocused_thickness); + } } else { - relayoutParams.mShadowRadius = INVALID_SHADOW_RADIUS; + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + relayoutParams.mShadowRadiusId = Resources.ID_NULL; + } else { + relayoutParams.mShadowRadius = INVALID_SHADOW_RADIUS; + } } relayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw; relayoutParams.mSetTaskVisibilityPositionAndCrop = shouldSetTaskVisibilityPositionAndCrop; @@ -1104,8 +1116,13 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin relayoutParams.mWindowDecorConfig = windowDecorConfig; if (DesktopModeStatus.useRoundedCorners()) { - relayoutParams.mCornerRadius = shouldIgnoreCornerRadius ? INVALID_CORNER_RADIUS : - getCornerRadius(context, relayoutParams.mLayoutResId); + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + relayoutParams.mCornerRadiusId = shouldIgnoreCornerRadius ? Resources.ID_NULL : + getCornerRadiusId(relayoutParams.mLayoutResId); + } else { + relayoutParams.mCornerRadius = shouldIgnoreCornerRadius ? INVALID_CORNER_RADIUS : + getCornerRadius(context, relayoutParams.mLayoutResId); + } } // Set opaque background for all freeform tasks to prevent freeform tasks below // from being visible if freeform task window above is translucent. @@ -1113,6 +1130,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin relayoutParams.mShouldSetBackground = DesktopModeStatus.shouldSetBackground(taskInfo); } + @Deprecated private static int getCornerRadius(@NonNull Context context, int layoutResId) { if (layoutResId == R.layout.desktop_mode_app_header) { return loadDimensionPixelSize(context.getResources(), @@ -1122,6 +1140,14 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin return INVALID_CORNER_RADIUS; } + private static int getCornerRadiusId(int layoutResId) { + if (layoutResId == R.layout.desktop_mode_app_header) { + return com.android.wm.shell.shared.R.dimen + .desktop_windowing_freeform_rounded_corner_radius; + } + return Resources.ID_NULL; + } + /** * If task has focused window decor, return the caption id of the fullscreen caption size * resource. Otherwise, return ID_NULL and caption width be set to task width. diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt index eb324f74ca82..238242792782 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt @@ -278,13 +278,16 @@ class MultiDisplayVeiledResizeTaskPositioner( currentDisplayLayout, ) ) - - multiDisplayDragMoveIndicatorController.onDragEnd( - desktopWindowDecoration.mTaskInfo.taskId, - transactionSupplier, - ) } + // Call the MultiDisplayDragMoveIndicatorController to clear any active indicator + // surfaces. This is necessary even if the drag ended on the same display, as surfaces + // may have been created for other displays during the drag. + multiDisplayDragMoveIndicatorController.onDragEnd( + desktopWindowDecoration.mTaskInfo.taskId, + transactionSupplier, + ) + interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_DRAG_WINDOW) } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java index 91a899c09407..6fd963f4203d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java @@ -47,6 +47,7 @@ import android.view.SurfaceControlViewHost; import android.view.View; import android.view.WindowManager; import android.view.WindowlessWindowManager; +import android.window.DesktopExperienceFlags; import android.window.SurfaceSyncGroup; import android.window.TaskConstants; import android.window.WindowContainerToken; @@ -286,6 +287,14 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mCaptionX = (outResult.mWidth - outResult.mCaptionWidth) / 2; outResult.mCaptionY = 0; outResult.mCaptionTopPadding = params.mCaptionTopPadding; + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + outResult.mCornerRadius = params.mCornerRadiusId == Resources.ID_NULL + ? INVALID_CORNER_RADIUS : loadDimensionPixelSize(resources, + params.mCornerRadiusId); + outResult.mShadowRadius = params.mShadowRadiusId == Resources.ID_NULL + ? INVALID_SHADOW_RADIUS : loadDimensionPixelSize(resources, + params.mShadowRadiusId); + } Trace.beginSection("relayout-createViewHostIfNeeded"); createViewHostIfNeeded(mDecorWindowContext, mDisplay); @@ -497,9 +506,16 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> .setPosition(mTaskSurface, taskPosition.x, taskPosition.y); } - if (params.mShadowRadius != INVALID_SHADOW_RADIUS) { - startT.setShadowRadius(mTaskSurface, params.mShadowRadius); - finishT.setShadowRadius(mTaskSurface, params.mShadowRadius); + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + if (outResult.mShadowRadius != INVALID_SHADOW_RADIUS) { + startT.setShadowRadius(mTaskSurface, outResult.mShadowRadius); + finishT.setShadowRadius(mTaskSurface, outResult.mShadowRadius); + } + } else { + if (params.mShadowRadius != INVALID_SHADOW_RADIUS) { + startT.setShadowRadius(mTaskSurface, params.mShadowRadius); + finishT.setShadowRadius(mTaskSurface, params.mShadowRadius); + } } if (params.mSetTaskVisibilityPositionAndCrop) { @@ -517,9 +533,16 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> startT.unsetColor(mTaskSurface); } - if (params.mCornerRadius != INVALID_CORNER_RADIUS) { - startT.setCornerRadius(mTaskSurface, params.mCornerRadius); - finishT.setCornerRadius(mTaskSurface, params.mCornerRadius); + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + if (outResult.mCornerRadius != INVALID_CORNER_RADIUS) { + startT.setCornerRadius(mTaskSurface, outResult.mCornerRadius); + finishT.setCornerRadius(mTaskSurface, outResult.mCornerRadius); + } + } else { + if (params.mCornerRadius != INVALID_CORNER_RADIUS) { + startT.setCornerRadius(mTaskSurface, params.mCornerRadius); + finishT.setCornerRadius(mTaskSurface, params.mCornerRadius); + } } } @@ -824,9 +847,14 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> @InsetsSource.Flags int mInsetSourceFlags; final Region mDisplayExclusionRegion = Region.obtain(); + @Deprecated int mShadowRadius = INVALID_SHADOW_RADIUS; + @Deprecated int mCornerRadius = INVALID_CORNER_RADIUS; + int mShadowRadiusId = Resources.ID_NULL; + int mCornerRadiusId = Resources.ID_NULL; + int mCaptionTopPadding; boolean mIsCaptionVisible; @@ -849,9 +877,13 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mIsInsetSource = true; mInsetSourceFlags = 0; mDisplayExclusionRegion.setEmpty(); - - mShadowRadius = INVALID_SHADOW_RADIUS; - mCornerRadius = INVALID_SHADOW_RADIUS; + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + mShadowRadiusId = Resources.ID_NULL; + mCornerRadiusId = Resources.ID_NULL; + } else { + mShadowRadius = INVALID_SHADOW_RADIUS; + mCornerRadius = INVALID_SHADOW_RADIUS; + } mCaptionTopPadding = 0; mIsCaptionVisible = false; @@ -893,6 +925,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mWidth; int mHeight; T mRootView; + int mCornerRadius; + int mShadowRadius; void reset() { mWidth = 0; @@ -904,6 +938,10 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionTopPadding = 0; mCustomizableCaptionRegion.setEmpty(); mRootView = null; + if (DesktopExperienceFlags.ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX.isTrue()) { + mCornerRadius = INVALID_CORNER_RADIUS; + mShadowRadius = INVALID_SHADOW_RADIUS; + } } } diff --git a/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml b/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml index aa1b24189274..33ea0baa4f6d 100644 --- a/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml +++ b/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml @@ -18,6 +18,8 @@ <!-- Resources used in WindowDecorationTests --> <dimen name="test_freeform_decor_caption_height">32dp</dimen> <dimen name="test_freeform_decor_caption_menu_width">216dp</dimen> + <dimen name="test_freeform_shadow_radius">20dp</dimen> + <dimen name="test_freeform_corner_radius">16dp</dimen> <dimen name="test_window_decor_left_outset">10dp</dimen> <dimen name="test_window_decor_top_outset">20dp</dimen> <dimen name="test_window_decor_right_outset">30dp</dimen> diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java index 43bcc3b61124..2ef6c558b0b5 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java @@ -58,7 +58,8 @@ public class BackProgressAnimatorTest extends ShellTestCase { /* frameTime = */ 0, /* progress = */ progress, /* triggerBack = */ false, - /* swipeEdge = */ BackEvent.EDGE_LEFT); + /* swipeEdge = */ BackEvent.EDGE_LEFT, + /* departingAnimationTarget = */ null); } @Before diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomCrossActivityBackAnimationTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomCrossActivityBackAnimationTest.kt index 9d4cc49a7a65..2cc52c5ab9ad 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomCrossActivityBackAnimationTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomCrossActivityBackAnimationTest.kt @@ -224,7 +224,8 @@ class CustomCrossActivityBackAnimationTest : ShellTestCase() { /* frameTime = */ 0, /* progress = */ progress, /* triggerBack = */ false, - /* swipeEdge = */ BackEvent.EDGE_LEFT + /* swipeEdge = */ BackEvent.EDGE_LEFT, + /* departingAnimationTarget = */ null ) private fun createAnimationTarget(open: Boolean): RemoteAnimationTarget { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt index 75f6bda4d750..4e8812d34ef4 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt @@ -21,6 +21,7 @@ import android.app.TaskInfo import android.graphics.Rect import android.os.Parcel import android.testing.AndroidTestingRunner +import android.view.Display.DEFAULT_DISPLAY import android.window.IWindowContainerToken import android.window.WindowContainerToken import androidx.test.filters.SmallTest @@ -281,7 +282,8 @@ class GroupedTaskInfoTest : ShellTestCase() { val task2 = createTaskInfo(id = 2) val taskInfo = GroupedTaskInfo.forDeskTasks( - /* deskId = */ 500, listOf(task1, task2), setOf()) + /* deskId = */ 500, DEFAULT_DISPLAY, listOf(task1, task2), setOf() + ) assertThat(taskInfo.deskId).isEqualTo(500) assertThat(taskInfo.getTaskById(1)).isEqualTo(task1) @@ -335,6 +337,7 @@ class GroupedTaskInfoTest : ShellTestCase() { ): GroupedTaskInfo { return GroupedTaskInfo.forDeskTasks( deskId, + DEFAULT_DISPLAY, freeformTaskIds.map { createTaskInfo(it) }.toList(), minimizedTaskIds.toSet()) } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java index a122c3820dcb..55bff09e0ae2 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java @@ -222,7 +222,7 @@ public class HomeTransitionObserverTest extends ShellTestCase { @Test @EnableFlags({FLAG_ENABLE_DRAG_TO_DESKTOP_INCOMING_TRANSITIONS_BUGFIX}) - public void startDragToDesktopAborted_doesNotTriggerCallback() throws RemoteException { + public void startDragToDesktopAborted_triggersCallback() throws RemoteException { TransitionInfo info = mock(TransitionInfo.class); TransitionInfo.Change change = mock(TransitionInfo.Change.class); ActivityManager.RunningTaskInfo taskInfo = mock(ActivityManager.RunningTaskInfo.class); @@ -239,7 +239,7 @@ public class HomeTransitionObserverTest extends ShellTestCase { mHomeTransitionObserver.onTransitionFinished(transition, /* aborted= */ true); - verify(mListener, never()).onHomeVisibilityChanged(/* isVisible= */ anyBoolean()); + verify(mListener).onHomeVisibilityChanged(/* isVisible= */ true); } @Test diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java index f37f2fb14bea..f7b9c3352dea 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java @@ -59,6 +59,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Point; import android.graphics.Rect; @@ -341,7 +342,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreSetForFreeform() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreSetForFreeform_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); RelayoutParams relayoutParams = new RelayoutParams(); @@ -353,7 +355,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForFullscreen() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForFullscreen_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN); RelayoutParams relayoutParams = new RelayoutParams(); @@ -364,7 +367,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForSplit() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForSplit_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); RelayoutParams relayoutParams = new RelayoutParams(); @@ -375,7 +379,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersSetForFreeform() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersSetForFreeform_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); fillRoundedCornersResources(/* fillValue= */ 30); @@ -387,7 +392,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForFullscreen() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForFullscreen_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN); fillRoundedCornersResources(/* fillValue= */ 30); @@ -399,7 +405,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForSplit() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForSplit_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); fillRoundedCornersResources(/* fillValue= */ 30); @@ -411,7 +418,8 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test - public void updateRelayoutParams_shouldIgnoreCornerRadius_roundedCornersNotSet() { + @DisableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_shouldIgnoreCornerRadius_roundedCornersNotSet_dynamicDisabled() { final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); fillRoundedCornersResources(/* fillValue= */ 30); @@ -440,6 +448,107 @@ public class DesktopModeWindowDecorationTests extends ShellTestCase { } @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreSetForFreeform() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mShadowRadiusId).isNotEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForFullscreen() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mShadowRadiusId).isEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_windowShadowsAreNotSetForSplit() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mShadowRadiusId).isEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersSetForFreeform() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mShadowRadiusId).isNotEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForFullscreen() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mCornerRadiusId).isEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_noSysPropFlagsSet_roundedCornersNotSetForSplit() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); + RelayoutParams relayoutParams = new RelayoutParams(); + + updateRelayoutParams(relayoutParams, taskInfo); + + assertThat(relayoutParams.mCornerRadiusId).isEqualTo(Resources.ID_NULL); + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX) + public void updateRelayoutParams_shouldIgnoreCornerRadius_roundedCornersNotSet() { + final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(/* visible= */ true); + taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM); + RelayoutParams relayoutParams = new RelayoutParams(); + + DesktopModeWindowDecoration.updateRelayoutParams( + relayoutParams, + mTestableContext, + taskInfo, + mMockSplitScreenController, + DEFAULT_APPLY_START_TRANSACTION_ON_DRAW, + DEFAULT_SHOULD_SET_TASK_POSITIONING_AND_CROP, + DEFAULT_IS_STATUSBAR_VISIBLE, + DEFAULT_IS_KEYGUARD_VISIBLE_AND_OCCLUDED, + DEFAULT_IS_IN_FULL_IMMERSIVE_MODE, + DEFAULT_IS_DRAGGING, + new InsetsState(), + DEFAULT_HAS_GLOBAL_FOCUS, + mExclusionRegion, + /* shouldIgnoreCornerRadius= */ true, + DEFAULT_SHOULD_EXCLUDE_CAPTION_FROM_APP_BOUNDS, + DEFAULT_IS_RECENTS_TRANSITION_RUNNING, + DEFAULT_IS_MOVING_TO_BACK); + + assertThat(relayoutParams.mCornerRadiusId).isEqualTo(Resources.ID_NULL); + } + + @Test @EnableFlags(Flags.FLAG_ENABLE_APP_HEADER_WITH_TASK_DENSITY) public void updateRelayoutParams_appHeader_usesTaskDensity() { final int systemDensity = mTestableContext.getOrCreateTestableResources().getResources() diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt index 0798613ed632..24a46aacde15 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt @@ -63,6 +63,7 @@ import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.times import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoInteractions import org.mockito.Mockito.`when` import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @@ -210,6 +211,7 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() { eq(taskPositioner), ) verify(mockDesktopWindowDecoration, never()).hideResizeVeil() + verifyNoInteractions(mockMultiDisplayDragMoveIndicatorController) } @Test @@ -248,6 +250,7 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() { verify(mockDesktopWindowDecoration, never()).showResizeVeil(any()) verify(mockDesktopWindowDecoration, never()).hideResizeVeil() + verify(mockMultiDisplayDragMoveIndicatorController).onDragEnd(eq(TASK_ID), any()) Assert.assertEquals(rectAfterEnd, endBounds) } @@ -268,6 +271,7 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() { verify(spyDisplayLayout0, never()).localPxToGlobalDp(any(), any()) verify(spyDisplayLayout0, never()).globalDpToLocalPx(any(), any()) + verify(mockMultiDisplayDragMoveIndicatorController).onDragEnd(eq(TASK_ID), any()) } @Test @@ -290,6 +294,7 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() { verify(mockDesktopWindowDecoration, never()).showResizeVeil(any()) verify(mockDesktopWindowDecoration, never()).hideResizeVeil() + verify(mockMultiDisplayDragMoveIndicatorController).onDragEnd(eq(TASK_ID), any()) Assert.assertEquals(rectAfterEnd, endBounds) } @@ -346,6 +351,7 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() { }, eq(taskPositioner), ) + verifyNoInteractions(mockMultiDisplayDragMoveIndicatorController) } @Test diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java index 2e95a979220c..c691dc72b1ea 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java @@ -61,7 +61,8 @@ import android.graphics.Rect; import android.graphics.Region; import android.os.Handler; import android.os.LocaleList; -import android.testing.AndroidTestingRunner; +import android.platform.test.annotations.UsesFlags; +import android.platform.test.flag.junit.FlagsParameterization; import android.util.DisplayMetrics; import android.view.AttachedSurfaceControl; import android.view.Display; @@ -78,6 +79,7 @@ import android.window.WindowContainerTransaction; import androidx.test.filters.SmallTest; +import com.android.window.flags.Flags; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.TestRunningTaskInfoBuilder; @@ -96,6 +98,9 @@ import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.Mockito; +import platform.test.runner.parameterized.ParameterizedAndroidJunit4; +import platform.test.runner.parameterized.Parameters; + import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -108,7 +113,8 @@ import java.util.function.Supplier; * atest WMShellUnitTests:WindowDecorationTests */ @SmallTest -@RunWith(AndroidTestingRunner.class) +@RunWith(ParameterizedAndroidJunit4.class) +@UsesFlags(com.android.window.flags.Flags.class) public class WindowDecorationTests extends ShellTestCase { private static final Rect TASK_BOUNDS = new Rect(100, 300, 400, 400); private static final Point TASK_POSITION_IN_PARENT = new Point(40, 60); @@ -116,6 +122,12 @@ public class WindowDecorationTests extends ShellTestCase { private static final int SHADOW_RADIUS = 10; private static final int STATUS_BAR_INSET_SOURCE_ID = 0; + @Parameters(name = "{0}") + public static List<FlagsParameterization> getParams() { + return FlagsParameterization.allCombinationsOf( + Flags.FLAG_ENABLE_DYNAMIC_RADIUS_COMPUTATION_BUGFIX); + } + private final WindowDecoration.RelayoutResult<TestView> mRelayoutResult = new WindowDecoration.RelayoutResult<>(); @@ -156,6 +168,10 @@ public class WindowDecorationTests extends ShellTestCase { private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams(); private int mCaptionMenuWidthId; + public WindowDecorationTests(FlagsParameterization flags) { + mSetFlagsRule.setFlagsParameterization(flags); + } + @Before public void setUp() { mMockSurfaceControlStartT = createMockSurfaceControlTransaction(); @@ -165,8 +181,13 @@ public class WindowDecorationTests extends ShellTestCase { mRelayoutParams.mLayoutResId = 0; mRelayoutParams.mCaptionHeightId = R.dimen.test_freeform_decor_caption_height; mCaptionMenuWidthId = R.dimen.test_freeform_decor_caption_menu_width; - mRelayoutParams.mShadowRadius = SHADOW_RADIUS; - mRelayoutParams.mCornerRadius = CORNER_RADIUS; + if (Flags.enableDynamicRadiusComputationBugfix()) { + mRelayoutParams.mShadowRadiusId = R.dimen.test_freeform_shadow_radius; + mRelayoutParams.mCornerRadiusId = R.dimen.test_freeform_corner_radius; + } else { + mRelayoutParams.mShadowRadius = SHADOW_RADIUS; + mRelayoutParams.mCornerRadius = CORNER_RADIUS; + } when(mMockDisplayController.getDisplay(Display.DEFAULT_DISPLAY)) .thenReturn(mock(Display.class)); @@ -282,9 +303,21 @@ public class WindowDecorationTests extends ShellTestCase { any(), anyInt()); - verify(mMockSurfaceControlStartT).setCornerRadius(mMockTaskSurface, CORNER_RADIUS); - verify(mMockSurfaceControlFinishT).setCornerRadius(mMockTaskSurface, CORNER_RADIUS); - verify(mMockSurfaceControlStartT).setShadowRadius(mMockTaskSurface, SHADOW_RADIUS); + if (Flags.enableDynamicRadiusComputationBugfix()) { + final int cornerRadius = WindowDecoration.loadDimensionPixelSize( + windowDecor.mDecorWindowContext.getResources(), + mRelayoutParams.mCornerRadiusId); + verify(mMockSurfaceControlStartT).setCornerRadius(mMockTaskSurface, cornerRadius); + verify(mMockSurfaceControlFinishT).setCornerRadius(mMockTaskSurface, cornerRadius); + final int shadowRadius = WindowDecoration.loadDimensionPixelSize( + windowDecor.mDecorWindowContext.getResources(), + mRelayoutParams.mShadowRadiusId); + verify(mMockSurfaceControlStartT).setShadowRadius(mMockTaskSurface, shadowRadius); + } else { + verify(mMockSurfaceControlStartT).setCornerRadius(mMockTaskSurface, CORNER_RADIUS); + verify(mMockSurfaceControlFinishT).setCornerRadius(mMockTaskSurface, CORNER_RADIUS); + verify(mMockSurfaceControlStartT).setShadowRadius(mMockTaskSurface, SHADOW_RADIUS); + } assertEquals(300, mRelayoutResult.mWidth); assertEquals(100, mRelayoutResult.mHeight); @@ -1198,7 +1231,8 @@ public class WindowDecorationTests extends ShellTestCase { } @Override - public void setTaskFocusState(boolean focused) {} + public void setTaskFocusState(boolean focused) { + } } private class TestWindowDecoration extends WindowDecoration<TestView> { diff --git a/libs/hostgraphics/include/gui/BufferItemConsumer.h b/libs/hostgraphics/include/gui/BufferItemConsumer.h index 5c96c82e061c..b9ff0a774805 100644 --- a/libs/hostgraphics/include/gui/BufferItemConsumer.h +++ b/libs/hostgraphics/include/gui/BufferItemConsumer.h @@ -48,6 +48,10 @@ public: return mConsumer->acquireBuffer(item, presentWhen, 0); } + status_t attachBuffer(BufferItem*, const sp<GraphicBuffer>&) { + return INVALID_OPERATION; + } + status_t releaseBuffer(const BufferItem& item, const sp<Fence>& releaseFence = Fence::NO_FENCE) { return OK; diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java index f3b21bfdaa3c..3b560b7a880e 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -219,13 +219,14 @@ public final class MediaCodecInfo { private static final int DEFAULT_MAX_SUPPORTED_INSTANCES = 32; private static final int MAX_SUPPORTED_INSTANCES_LIMIT = 256; - private static final class LazyHolder { - private static final Range<Integer> SIZE_RANGE = Process.is64Bit() - ? Range.create(1, 32768) - : Range.create(1, MediaProperties.resolution_limit_32bit().orElse(4096)); - } - private static Range<Integer> getSizeRange() { - return LazyHolder.SIZE_RANGE; + private static Range<Integer> SIZE_RANGE; + private static synchronized Range<Integer> getSizeRange() { + if (SIZE_RANGE == null) { + SIZE_RANGE = Process.is64Bit() + ? Range.create(1, 32768) + : Range.create(1, MediaProperties.resolution_limit_32bit().orElse(4096)); + } + return SIZE_RANGE; } // found stuff that is not supported by framework (=> this should not happen) diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 7af78b81cda5..03bcc6afc1b7 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -1299,6 +1299,7 @@ public class MediaRecorder implements AudioRouting, * start() or before setOutputFormat(). * @throws IOException if prepare fails otherwise. */ + @RequiresPermission(value = android.Manifest.permission.RECORD_AUDIO, conditional = true) public void prepare() throws IllegalStateException, IOException { if (mPath != null) { @@ -1337,6 +1338,7 @@ public class MediaRecorder implements AudioRouting, * @throws IllegalStateException if it is called before * prepare() or when the camera is already in use by another app. */ + @RequiresPermission(value = android.Manifest.permission.RECORD_AUDIO, conditional = true) public native void start() throws IllegalStateException; /** diff --git a/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java b/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java index be711accd542..89e5372b530e 100644 --- a/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java +++ b/packages/SettingsLib/ButtonPreference/src/com/android/settingslib/widget/ButtonPreference.java @@ -27,6 +27,7 @@ import android.widget.Button; import android.widget.LinearLayout; import androidx.annotation.GravityInt; +import androidx.annotation.IntDef; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; @@ -34,21 +35,46 @@ import com.android.settingslib.widget.preference.button.R; import com.google.android.material.button.MaterialButton; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * A preference handled a button */ public class ButtonPreference extends Preference implements GroupSectionDividerMixin { + public static final int TYPE_FILLED = 0; + public static final int TYPE_TONAL = 1; + public static final int TYPE_OUTLINE = 2; + + @IntDef({TYPE_FILLED, TYPE_TONAL, TYPE_OUTLINE}) + @Retention(RetentionPolicy.SOURCE) + public @interface Type { + } + + public static final int SIZE_NORMAL = 0; + public static final int SIZE_LARGE = 1; + public static final int SIZE_EXTRA_LARGE = 2; + + @IntDef({SIZE_NORMAL, SIZE_LARGE, SIZE_EXTRA_LARGE}) + @Retention(RetentionPolicy.SOURCE) + public @interface Size { + } + enum ButtonStyle { - FILLED_NORMAL(0, 0, R.layout.settingslib_expressive_button_filled), - FILLED_LARGE(0, 1, R.layout.settingslib_expressive_button_filled_large), - FILLED_EXTRA(0, 2, R.layout.settingslib_expressive_button_filled_extra), - TONAL_NORMAL(1, 0, R.layout.settingslib_expressive_button_tonal), - TONAL_LARGE(1, 1, R.layout.settingslib_expressive_button_tonal_large), - TONAL_EXTRA(1, 2, R.layout.settingslib_expressive_button_tonal_extra), - OUTLINE_NORMAL(2, 0, R.layout.settingslib_expressive_button_outline), - OUTLINE_LARGE(2, 1, R.layout.settingslib_expressive_button_outline_large), - OUTLINE_EXTRA(2, 2, R.layout.settingslib_expressive_button_outline_extra); + FILLED_NORMAL(TYPE_FILLED, SIZE_NORMAL, R.layout.settingslib_expressive_button_filled), + FILLED_LARGE(TYPE_FILLED, SIZE_LARGE, R.layout.settingslib_expressive_button_filled_large), + FILLED_EXTRA(TYPE_FILLED, SIZE_EXTRA_LARGE, + R.layout.settingslib_expressive_button_filled_extra), + TONAL_NORMAL(TYPE_TONAL, SIZE_NORMAL, R.layout.settingslib_expressive_button_tonal), + TONAL_LARGE(TYPE_TONAL, SIZE_LARGE, R.layout.settingslib_expressive_button_tonal_large), + TONAL_EXTRA(TYPE_TONAL, SIZE_EXTRA_LARGE, + R.layout.settingslib_expressive_button_tonal_extra), + OUTLINE_NORMAL(TYPE_OUTLINE, SIZE_NORMAL, R.layout.settingslib_expressive_button_outline), + OUTLINE_LARGE(TYPE_OUTLINE, SIZE_LARGE, + R.layout.settingslib_expressive_button_outline_large), + OUTLINE_EXTRA(TYPE_OUTLINE, SIZE_EXTRA_LARGE, + R.layout.settingslib_expressive_button_outline_extra); private final int mType; private final int mSize; @@ -60,7 +86,7 @@ public class ButtonPreference extends Preference implements GroupSectionDividerM this.mLayoutId = layoutId; } - static int getLayoutId(int type, int size) { + static int getLayoutId(@Type int type, @Size int size) { for (ButtonStyle style : values()) { if (style.mType == type && style.mSize == size) { return style.mLayoutId; @@ -266,7 +292,7 @@ public class ButtonPreference extends Preference implements GroupSectionDividerM * <li>2: extra large</li> * </ul> */ - public void setButtonStyle(int type, int size) { + public void setButtonStyle(@Type int type, @Size int size) { int layoutId = ButtonStyle.getLayoutId(type, size); setLayoutResource(layoutId); notifyChanged(); diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml index 3db0ac653848..b1e42c0aebff 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml @@ -35,6 +35,7 @@ android:layout_height="@dimen/settingslib_toolbar_layout_height" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" app:toolbarId="@id/action_bar" + app:maxLines="2" style="@style/SettingsLibCollapsingToolbarLayoutStyle.Expressive"> <Toolbar @@ -44,7 +45,24 @@ android:layout_marginStart="@dimen/settingslib_expressive_space_extrasmall4" android:theme="?android:attr/actionBarTheme" android:transitionName="shared_element_view" - app:layout_collapseMode="pin"/> + app:layout_collapseMode="pin"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="@dimen/settingslib_expressive_space_extrasmall6" + android:layout_marginEnd="@dimen/settingslib_expressive_space_small4" + android:layout_gravity="end"> + + <com.google.android.material.button.MaterialButton + android:id="@+id/action_button" + android:layout_width="wrap_content" + android:layout_height="match_parent" + style="@style/SettingsLibButtonStyle.Expressive.Filled" + android:visibility="gone"/> + </LinearLayout> + + </Toolbar> </com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.AppBarLayout> diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java index feacecbd5d0c..ec1df447995c 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java @@ -24,6 +24,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -132,6 +133,29 @@ public class CollapsingToolbarAppCompatActivity extends AppCompatActivity { setTitle(getText(titleId)); } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + getToolbarDelegate().setActionButtonEnabled(enabled); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@DrawableRes int drawableRes) { + getToolbarDelegate().setActionButtonIcon(this, drawableRes); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + getToolbarDelegate().setActionButtonText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonListener(@Nullable View.OnClickListener listener) { + getToolbarDelegate().setActionButtonOnClickListener(listener); + } + @Override public boolean onSupportNavigateUp() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java index 0f9d94e9cc3d..b1b8c983b033 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java @@ -25,6 +25,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; @@ -124,6 +125,29 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { setTitle(getText(titleId)); } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + getToolbarDelegate().setActionButtonEnabled(enabled); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@DrawableRes int drawableRes) { + getToolbarDelegate().setActionButtonIcon(this, drawableRes); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + getToolbarDelegate().setActionButtonText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonListener(@Nullable View.OnClickListener listener) { + getToolbarDelegate().setActionButtonOnClickListener(listener); + } + @Override public boolean onNavigateUp() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java index de0d60916b3d..072b36549093 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java @@ -33,6 +33,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -42,6 +43,7 @@ import com.android.settingslib.widget.SettingsThemeHelper; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; +import com.google.android.material.button.MaterialButton; /** * A delegate that allows to use the collapsing toolbar layout in hosts that doesn't want/need to @@ -80,6 +82,8 @@ public class CollapsingToolbarDelegate { private AppBarLayout mAppBarLayout; @NonNull private Toolbar mToolbar; + @Nullable + private MaterialButton mActionButton; @NonNull private FrameLayout mContentFrameLayout; @NonNull @@ -154,6 +158,7 @@ public class CollapsingToolbarDelegate { } autoSetCollapsingToolbarLayoutScrolling(); mContentFrameLayout = view.findViewById(R.id.content_frame); + mActionButton = view.findViewById(R.id.action_button); if (activity instanceof AppCompatActivity) { Log.d(TAG, "onCreateView: from AppCompatActivity and sub-class."); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { @@ -215,6 +220,42 @@ public class CollapsingToolbarDelegate { } } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + if (mActionButton == null) { + return; + } + int visibility = enabled ? View.VISIBLE : View.GONE; + mActionButton.setVisibility(visibility); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@NonNull Context context, @DrawableRes int drawableRes) { + if (mActionButton == null) { + return; + } + mActionButton.setIcon(context.getResources().getDrawable(drawableRes, context.getTheme())); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + if (mActionButton == null) { + return; + } + mActionButton.setText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonOnClickListener(@Nullable View.OnClickListener listener) { + if (mActionButton == null) { + return; + } + mActionButton.setOnClickListener(listener); + } + /** Return an instance of CoordinatorLayout. */ @Nullable public CoordinatorLayout getCoordinatorLayout() { diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java index 7f4bebcf4a62..335526632383 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java @@ -46,6 +46,8 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import java.util.ArrayList; @@ -326,6 +328,15 @@ public abstract class Tile implements Parcelable { return false; } + /** Returns the icon color scheme. */ + @Nullable + public String getIconColorScheme(@NonNull Context context) { + ensureMetadataNotStale(context); + return mMetaData != null + ? mMetaData.getString(TileUtils.META_DATA_PREFERENCE_ICON_COLOR_SCHEME, null) + : null; + } + /** Whether the {@link Activity} should be launched in a separate task. */ public boolean isNewTask() { if (mMetaData != null && mMetaData.containsKey(META_DATA_NEW_TASK)) { diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java index ac0b9b45aba6..d62ed2f60ed0 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java @@ -135,6 +135,13 @@ public class TileUtils { public static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon"; /** + * Name of the meta-data item that should be set in the AndroidManifest.xml to specify the icon + * color scheme. Only available for preferences on the homepage. + */ + public static final String META_DATA_PREFERENCE_ICON_COLOR_SCHEME = + "com.android.settings.icon_color_scheme"; + + /** * Name of the meta-data item that should be set in the AndroidManifest.xml * to specify the icon background color. The value may or may not be used by Settings app. */ diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 129949fd38b2..7f4544379cd3 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -429,6 +429,7 @@ android_library { manifest: "AndroidManifest-res.xml", flags_packages: [ "android.app.flags-aconfig", + "com_android_systemui_flags", ], } diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 436e92bc0efa..943bd6f07f4e 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -525,6 +525,14 @@ flag { } flag { + name: "status_bar_font_updates" + namespace: "systemui" + description: "Read only flag for using a new font in the status bar" + bug: "393609116" + is_fixed_read_only: true +} + +flag { name: "promote_notifications_automatically" namespace: "systemui" description: "Flag to automatically turn certain notifications into promoted notifications so " @@ -1436,16 +1444,6 @@ flag { } flag { - name: "dozeui_scheduling_alarms_background_execution" - namespace: "systemui" - description: "Decide whether to execute binder calls to schedule alarms in background thread" - bug: "330492575" - metadata { - purpose: PURPOSE_BUGFIX - } -} - -flag { name: "media_lockscreen_launch_animation" namespace : "systemui" description : "Enable the origin launch animation for UMO when opening on top of lockscreen." diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt index 7ee6a6e5ebf4..5599db7689c2 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt @@ -1216,6 +1216,13 @@ constructor( private var animation: TransitionAnimator.Animation? = null /** + * Whether the opening/closing window needs to reparented to the view's window at the + * beginning of the animation. Since we don't always do this, we need to keep track of it in + * order to have the rest of the animation behave correctly. + */ + var reparent = false + + /** * A timeout to cancel the transition animation if the remote animation is not started or * cancelled within [TRANSITION_TIMEOUT] milliseconds after the intent was started. * @@ -1469,6 +1476,17 @@ constructor( transitionAnimator.isExpandingFullyAbove(controller.transitionContainer, endState) val windowState = startingWindowState ?: controller.windowAnimatorState + // We only reparent launch animations. In current integrations, returns are + // not affected by the issue solved by reparenting, and they present + // additional problems when the view lives in the Status Bar. + // TODO(b/397646693): remove this exception. + val isEligibleForReparenting = controller.isLaunching + val viewRoot = controller.transitionContainer.viewRootImpl + val skipReparenting = skipReparentTransaction || viewRoot == null + if (moveTransitionAnimationLayer() && isEligibleForReparenting && !skipReparenting) { + reparent = true + } + // We animate the opening window and delegate the view expansion to [this.controller]. val delegate = this.controller val controller = @@ -1536,16 +1554,13 @@ constructor( ) } - if (moveTransitionAnimationLayer() && !skipReparentTransaction) { + if (reparent) { // Ensure that the launching window is rendered above the view's window, // so it is not obstructed. // TODO(b/397180418): re-use the start transaction once the // RemoteAnimation wrapper is cleaned up. SurfaceControl.Transaction().use { - it.reparent( - window.leash, - controller.transitionContainer.viewRootImpl.surfaceControl, - ) + it.reparent(window.leash, viewRoot.surfaceControl) it.apply() } } @@ -1603,7 +1618,7 @@ constructor( null } val fadeWindowBackgroundLayer = - if (moveTransitionAnimationLayer()) { + if (reparent) { false } else { !controller.isBelowAnimatingWindow @@ -1727,7 +1742,7 @@ constructor( // fade in progressively. Otherwise, it should be fully opaque and will be progressively // revealed as the window background color layer above the window fades out. val alpha = - if (moveTransitionAnimationLayer() || controller.isBelowAnimatingWindow) { + if (reparent || controller.isBelowAnimatingWindow) { if (controller.isLaunching) { interpolators.contentAfterFadeInInterpolator.getInterpolation( windowProgress diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteAnimationRunnerCompat.java b/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteAnimationRunnerCompat.java index 21ec89646f0f..060f0c94732d 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteAnimationRunnerCompat.java +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteAnimationRunnerCompat.java @@ -197,6 +197,10 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner // Release surface references now. This is apparently to free GPU memory // before GC would. info.releaseAllSurfaces(); + // Make sure that the transition leashes created are not leaked. + for (SurfaceControl leash : leashMap.values()) { + finishTransaction.reparent(leash, null); + } // Don't release here since launcher might still be using them. Instead // let launcher release them (eg. via RemoteAnimationTargets) leashMap.clear(); diff --git a/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedScrollController.kt b/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedScrollController.kt index 2530a4f240e3..54232e76a568 100644 --- a/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedScrollController.kt +++ b/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedScrollController.kt @@ -134,6 +134,7 @@ private class NestedScrollControllerNode( private var bounds: NestedScrollableBound, ) : DelegatingNode(), NestedScrollConnection { private var childrenConsumedAnyScroll = false + private var availableOnPreScroll = Offset.Zero init { delegate(nestedScrollModifierNode(this, dispatcher = null)) @@ -153,12 +154,21 @@ private class NestedScrollControllerNode( this.bounds = bounds } + override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { + availableOnPreScroll = available + return Offset.Zero + } + override fun onPostScroll( consumed: Offset, available: Offset, source: NestedScrollSource, ): Offset { - if (hasConsumedScrollInBounds(consumed.x) || hasConsumedScrollInBounds(consumed.y)) { + val consumedIncludingPreScroll = availableOnPreScroll - available + if ( + hasConsumedScrollInBounds(consumedIncludingPreScroll.x) || + hasConsumedScrollInBounds(consumedIncludingPreScroll.y) + ) { childrenConsumedAnyScroll = true } diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt index 84370ed4d2c7..6fb3679dfb7c 100644 --- a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt +++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt @@ -43,7 +43,7 @@ fun PlatformTheme(isDarkTheme: Boolean = isSystemInDarkTheme(), content: @Compos val context = LocalContext.current val colorScheme = remember(context, isDarkTheme) { platformColorScheme(isDarkTheme, context) } - val androidColorScheme = remember(context) { AndroidColorScheme(context) } + val androidColorScheme = remember(context, isDarkTheme) { AndroidColorScheme(context) } val typefaceNames = remember(context) { TypefaceNames.get(context) } val typefaceTokens = remember(typefaceNames) { TypefaceTokens(typefaceNames) } val typography = diff --git a/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedScrollControllerTest.kt b/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedScrollControllerTest.kt index 424af3395913..377cbe238f49 100644 --- a/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedScrollControllerTest.kt +++ b/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedScrollControllerTest.kt @@ -23,9 +23,13 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection +import androidx.compose.ui.input.nestedscroll.NestedScrollSource +import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onRoot import androidx.compose.ui.test.performTouchInput @@ -103,4 +107,35 @@ class NestedScrollControllerTest { rule.waitForIdle() assertThat(state.isOuterScrollAllowed).isTrue() } + + @Test + fun supportsPreScrolls() { + val state = NestedScrollControlState() + rule.setContent { + Box( + Modifier.fillMaxSize() + .nestedScrollController(state) + .nestedScroll( + remember { + object : NestedScrollConnection { + override fun onPreScroll( + available: Offset, + source: NestedScrollSource, + ): Offset = available + } + } + ) + .scrollable(rememberScrollableState { 0f }, Orientation.Vertical) + ) + } + + rule.onRoot().performTouchInput { + down(topLeft) + moveBy(Offset(0f, bottom)) + } + assertThat(state.isOuterScrollAllowed).isFalse() + + rule.onRoot().performTouchInput { up() } + assertThat(state.isOuterScrollAllowed).isTrue() + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt index 859137507bbf..358635e2400c 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt @@ -80,17 +80,18 @@ class DisplayRepositoryTest : SysuiTestCase() { testScope.backgroundScope, UnconfinedTestDispatcher(), ) - DisplayRepositoryImpl( + val displaysWithDecorRepository = + DisplaysWithDecorationsRepositoryImpl( commandQueue, windowManager, testScope.backgroundScope, displayRepositoryFromLib, ) - .also { - verify(displayManager, never()).registerDisplayListener(any(), any()) - // It needs to be called, just once, for the initial value. - verify(displayManager).getDisplays() - } + DisplayRepositoryImpl(displayRepositoryFromLib, displaysWithDecorRepository).also { + verify(displayManager, never()).registerDisplayListener(any(), any()) + // It needs to be called, just once, for the initial value. + verify(displayManager).getDisplays() + } } @Before diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryInstanceProviderTest.kt index da7a723f220e..8afaea32273d 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryInstanceProviderTest.kt @@ -16,7 +16,6 @@ package com.android.systemui.display.data.repository -import android.platform.test.annotations.EnableFlags import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase @@ -24,77 +23,41 @@ import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testDispatcher import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.useUnconfinedTestDispatcher -import com.android.systemui.statusbar.core.StatusBarConnectedDisplays import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.isActive import kotlinx.coroutines.test.runTest -import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -@EnableFlags(StatusBarConnectedDisplays.FLAG_NAME) @RunWith(AndroidJUnit4::class) @SmallTest -class DisplayScopeRepositoryImplTest : SysuiTestCase() { +class DisplayScopeRepositoryInstanceProviderTest : SysuiTestCase() { private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val testScope = kosmos.testScope - private val fakeDisplayRepository = kosmos.displayRepository - private val repo = - DisplayScopeRepositoryImpl( + private val underTest = + DisplayScopeRepositoryInstanceProvider( kosmos.applicationCoroutineScope, kosmos.testDispatcher, - fakeDisplayRepository, ) - @Before - fun setUp() { - repo.start() - } - - @Test - fun scopeForDisplay_multipleCallsForSameDisplayId_returnsSameInstance() { - val scopeForDisplay = repo.scopeForDisplay(displayId = 1) - - assertThat(repo.scopeForDisplay(displayId = 1)).isSameInstanceAs(scopeForDisplay) - } - - @Test - fun scopeForDisplay_differentDisplayId_returnsNewInstance() { - val scopeForDisplay1 = repo.scopeForDisplay(displayId = 1) - val scopeForDisplay2 = repo.scopeForDisplay(displayId = 2) - - assertThat(scopeForDisplay1).isNotSameInstanceAs(scopeForDisplay2) - } - @Test - fun scopeForDisplay_activeByDefault() = + fun createInstance_activeByDefault() = testScope.runTest { - val scopeForDisplay = repo.scopeForDisplay(displayId = 1) + val scopeForDisplay = underTest.createInstance(displayId = 1) assertThat(scopeForDisplay.isActive).isTrue() } @Test - fun scopeForDisplay_afterDisplayRemoved_scopeIsCancelled() = + fun destroyInstance_afterDisplayRemoved_scopeIsCancelled() = testScope.runTest { - val scopeForDisplay = repo.scopeForDisplay(displayId = 1) + val scopeForDisplay = underTest.createInstance(displayId = 1) - fakeDisplayRepository.removeDisplay(displayId = 1) + underTest.destroyInstance(scopeForDisplay) assertThat(scopeForDisplay.isActive).isFalse() } - - @Test - fun scopeForDisplay_afterDisplayRemoved_returnsNewInstance() = - testScope.runTest { - val initialScope = repo.scopeForDisplay(displayId = 1) - - fakeDisplayRepository.removeDisplay(displayId = 1) - - val newScope = repo.scopeForDisplay(displayId = 1) - assertThat(newScope).isNotSameInstanceAs(initialScope) - } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/PerDisplayInstanceRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/PerDisplayInstanceRepositoryImplTest.kt index 28b9e733be94..bf49d92dd2bd 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/PerDisplayInstanceRepositoryImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/PerDisplayInstanceRepositoryImplTest.kt @@ -44,9 +44,10 @@ class PerDisplayInstanceRepositoryImplTest : SysuiTestCase() { private val fakeDisplayRepository = kosmos.displayRepository private val fakePerDisplayInstanceProviderWithTeardown = kosmos.fakePerDisplayInstanceProviderWithTeardown + private val lifecycleManager = kosmos.fakeDisplayInstanceLifecycleManager private val underTest: PerDisplayInstanceRepositoryImpl<TestPerDisplayInstance> = - kosmos.fakePerDisplayInstanceRepository + kosmos.createPerDisplayInstanceRepository(overrideLifecycleManager = null) @Before fun addDisplays() = runBlocking { @@ -109,6 +110,43 @@ class PerDisplayInstanceRepositoryImplTest : SysuiTestCase() { verify(kosmos.dumpManager).registerNormalDumpable(anyString(), any()) } + @Test + fun perDisplay_afterCustomLifecycleManagerRemovesDisplay_destroyInstanceInvoked() = + testScope.runTest { + val underTest = + kosmos.createPerDisplayInstanceRepository( + overrideLifecycleManager = lifecycleManager + ) + // Let's start with both + lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID, NON_DEFAULT_DISPLAY_ID) + + val instance = underTest[NON_DEFAULT_DISPLAY_ID] + + lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID) + + // Now that the lifecycle manager says so, let's make sure it was destroyed + assertThat(fakePerDisplayInstanceProviderWithTeardown.destroyed) + .containsExactly(instance) + } + + @Test + fun perDisplay_lifecycleManagerDoesNotContainIt_displayRepositoryDoes_returnsNull() = + testScope.runTest { + val underTest = + kosmos.createPerDisplayInstanceRepository( + overrideLifecycleManager = lifecycleManager + ) + // only default display, so getting for the non-default one should fail, despite the + // repository having both displays already + lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID) + + assertThat(underTest[NON_DEFAULT_DISPLAY_ID]).isNull() + + lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID, NON_DEFAULT_DISPLAY_ID) + + assertThat(underTest[NON_DEFAULT_DISPLAY_ID]).isNotNull() + } + private fun createDisplay(displayId: Int): Display = display(type = Display.TYPE_INTERNAL, id = displayId) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java index ce120c51db6a..95366568a37a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.platform.test.annotations.DisableFlags; import android.provider.Settings; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; @@ -38,6 +39,7 @@ import android.view.ViewGroup; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import com.android.systemui.Flags; import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.notification.collection.EntryAdapter; @@ -418,6 +420,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest { assertTrue("when alpha is .5, menu is visible", row.isMenuVisible()); } + @DisableFlags(Flags.FLAG_MAGNETIC_NOTIFICATION_SWIPES) @Test public void testOnTouchMove() { NotificationMenuRow row = Mockito.spy( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImplTest.kt index ccc8be7de038..6c6ba933c03a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImplTest.kt @@ -130,7 +130,9 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { kosmos.testScope.runTest { // GIVEN a threshold of 100 px val threshold = 100f - underTest.setSwipeThresholdPx(threshold) + underTest.onDensityChange( + threshold / MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + ) // GIVEN that targets are set and the rows are being pulled setTargets() @@ -150,7 +152,9 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { kosmos.testScope.runTest { // GIVEN a threshold of 100 px val threshold = 100f - underTest.setSwipeThresholdPx(threshold) + underTest.onDensityChange( + threshold / MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + ) // GIVEN that targets are set and the rows are being pulled canRowBeDismissed = false @@ -172,7 +176,9 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { kosmos.testScope.runTest { // GIVEN a threshold of 100 px val threshold = 100f - underTest.setSwipeThresholdPx(threshold) + underTest.onDensityChange( + threshold / MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + ) // GIVEN that targets are set and the rows are being pulled setTargets() @@ -192,7 +198,9 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { kosmos.testScope.runTest { // GIVEN a threshold of 100 px val threshold = 100f - underTest.setSwipeThresholdPx(threshold) + underTest.onDensityChange( + threshold / MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + ) // GIVEN that targets are set and the rows are being pulled canRowBeDismissed = false @@ -294,6 +302,29 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { assertThat(underTest.isSwipedViewRoundableSet).isFalse() } + @Test + fun isMagneticRowDismissible_isDismissibleWhenDetached() = + kosmos.testScope.runTest { + setDetachedState() + + val isDismissible = underTest.isMagneticRowSwipeDetached(swipedRow) + assertThat(isDismissible).isTrue() + } + + @Test + fun setMagneticRowTranslation_whenDetached_belowAttachThreshold_reattaches() = + kosmos.testScope.runTest { + // GIVEN that the swiped view has been detached + setDetachedState() + + // WHEN setting a new translation above the attach threshold + val translation = 50f + underTest.setMagneticRowTranslation(swipedRow, translation) + + // THEN the swiped view reattaches magnetically and the state becomes PULLING + assertThat(underTest.currentState).isEqualTo(State.PULLING) + } + @After fun tearDown() { // We reset the manager so that all MagneticRowListener can cancel all animations @@ -302,7 +333,9 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { private fun setDetachedState() { val threshold = 100f - underTest.setSwipeThresholdPx(threshold) + underTest.onDensityChange( + threshold / MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + ) // Set the pulling state setTargets() @@ -327,8 +360,8 @@ class MagneticNotificationRowManagerImplTest : SysuiTestCase() { private fun MagneticRowListener.asTestableListener(rowIndex: Int): MagneticRowListener { val delegate = this return object : MagneticRowListener { - override fun setMagneticTranslation(translation: Float) { - delegate.setMagneticTranslation(translation) + override fun setMagneticTranslation(translation: Float, trackEagerly: Boolean) { + delegate.setMagneticTranslation(translation, trackEagerly) } override fun triggerMagneticForce( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java index 789701f5e4b0..de48f4018989 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java @@ -49,6 +49,7 @@ import android.view.ViewConfiguration; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.flags.FakeFeatureFlags; @@ -362,6 +363,7 @@ public class NotificationSwipeHelperTest extends SysuiTestCase { verify(mSwipeHelper, times(1)).isFalseGesture(); } + @DisableFlags(Flags.FLAG_MAGNETIC_NOTIFICATION_SWIPES) @Test public void testIsDismissGesture_farEnough() { doReturn(false).when(mSwipeHelper).isFalseGesture(); @@ -374,6 +376,20 @@ public class NotificationSwipeHelperTest extends SysuiTestCase { verify(mSwipeHelper, times(1)).isFalseGesture(); } + @EnableFlags(Flags.FLAG_MAGNETIC_NOTIFICATION_SWIPES) + @Test + public void testIsDismissGesture_magneticSwipeIsDismissible() { + doReturn(false).when(mSwipeHelper).isFalseGesture(); + doReturn(false).when(mSwipeHelper).swipedFarEnough(); + doReturn(false).when(mSwipeHelper).swipedFastEnough(); + doReturn(true).when(mCallback).isMagneticViewDetached(any()); + when(mCallback.canChildBeDismissedInDirection(any(), anyBoolean())).thenReturn(true); + when(mEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_UP); + + assertTrue("Should be a dismissal", mSwipeHelper.isDismissGesture(mEvent)); + verify(mSwipeHelper, times(1)).isFalseGesture(); + } + @Test public void testIsDismissGesture_notFarOrFastEnough() { doReturn(false).when(mSwipeHelper).isFalseGesture(); diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index bc08a3e2c628..06192813672a 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nuwe toestel saam te bind"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Kon nie voorafstelling opdateer nie"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Voorafstelling"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Gekies"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgewing"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Links"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Wanneer jy ’n app deel, is enigiets wat in die app wys of speel, sigbaar aan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Deel skerm"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> het hierdie opsie gedeaktiveer"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Kies app om te deel"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Saai jou skerm uit?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Saai een app uit"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Sleep hierheen om te verwyder"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Jy moet minstens <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> teëls hê"</string> <string name="qs_edit" msgid="5583565172803472437">"Wysig"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tyd"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Wys ure, minute en sekondes"</item> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 1c158b388d74..3e4ca1c25453 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"አዲስ መሣሪያ ለማጣመር ጠቅ ያድርጉ"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ቅድመ-ቅምጥን ማዘመን አልተቻለም"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ቅድመ-ቅምጥ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ተመርጧል"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"በዙሪያ ያሉ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ግራ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"መተግበሪያን ሲያጋሩ በዚያ መተግበሪያ ውስጥ የሚታይ ወይም የሚጫወት ማንኛውም ነገር ለ<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ይታያል። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ማያ ገፅ አጋራ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ይህን አማራጭ አሰናክሏል"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ለማጋራት መተግበሪያ ይምረጡ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ማያ ገፅዎ cast ይደረግ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"አንድ መተግበሪያ cast ያድርጉ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ሰዓት"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ሰዓቶችን፣ ደቂቃዎችን፣ ሴኮንዶችን አሳይ"</item> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index b494f4ec5fad..f9660a340b46 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"انقر لإقران جهاز جديد"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"تعذَّر تعديل الإعداد المسبق"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"الإعدادات المسبقة"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"تمّ اختياره"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"الأصوات المحيطة"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"اليسرى"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ستتم مشاركة كل المحتوى المعروض أو المشغَّل على شاشة هذا التطبيق مع تطبيق \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"، لذا يُرجى توخي الحذر بشأن المعلومات الظاهرة على الشاشة، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور والمقاطع الصوتية والفيديوهات."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"مشاركة الشاشة"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"تم إيقاف هذا الخيار من خلال تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"يُرجى اختيار تطبيق لمشاركة محتواه"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"هل تريد بث محتوى الشاشة؟"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"بث محتوى تطبيق واحد"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"الوقت"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"عرض الساعات والدقائق والثواني"</item> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index d3ec875711f5..595432e06666 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"নতুন ডিভাইচ পেয়াৰ কৰিবলৈ ক্লিক কৰক"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"প্ৰিছেট আপডে’ট কৰিব পৰা নগ’ল"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"প্ৰিছেট"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"বাছনি কৰা হৈছে"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"আশ-পাশ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"বাওঁফাল"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"আপুনি কোনো এপ্ শ্বেয়াৰ কৰি থাকোঁতে সেই এপ্টোত দেখুওৱা বা প্লে’ কৰা যিকোনো বস্তু <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ত দৃশ্যমান হয়। সেয়ে পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"স্ক্ৰীন শ্বেয়াৰ কৰক"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ এই বিকল্পটো অক্ষম কৰিছে"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"শ্বেয়াৰ কৰিবলৈ এপ্ বাছনি কৰক"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"আপোনাৰ স্ক্ৰীনখন কাষ্ট কৰিবনে?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"এটা এপ্ কাষ্ট কৰক"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"সময়"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ঘন্টা, মিনিট আৰু ছেকেণ্ড দেখুৱাওক"</item> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 9655ab75e61b..3cf675d3ab12 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz birləşdirmək üçün klikləyin"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Hazır ayar güncəllənmədi"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Hazır Ayar"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Seçilib"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ətraf mühit"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Sol"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Tətbiq paylaşdığınız zaman həmin tətbiqdə göstərilən və ya işə salınan hər şey <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> üçün görünən olacaq. Parol, ödəniş məlumatı, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ekranı paylaşın"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu seçimi deaktiv edib"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Paylaşmaq üçün tətbiq seçin"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Ekran yayımlansın?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Bir tətbiqi yayımlayın"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Silmək üçün bura sürüşdürün"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimum <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> mozaika lazımdır"</string> <string name="qs_edit" msgid="5583565172803472437">"Redaktə edin"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Vaxt"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Saat, dəqiqə və saniyəni göstərin"</item> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index f46399659530..b74094e54d36 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili nov uređaj"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ažuriranje zadatih podešavanja nije uspelo"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Unapred određena podešavanja"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Izabrano"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okruženje"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Levo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kada delite aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vidi sav sadržaj koji se prikazuje ili pušta u njoj. Zato pazite na lozinke, informacije o plaćanju, poruke, slike, audio i video sadržaj."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Deli ekran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućila ovu opciju"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Odaberite aplikaciju za deljenje"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Želite da prebacite ekran?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Prebaci jednu aplikaciju"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Prevucite ovde da biste uklonili"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimalan broj pločica je <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Izmeni"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Vreme"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Prikaži sate, minute i sekunde"</item> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 2ece7bd3900e..11c2715fb2ff 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Націсніце, каб спалучыць новую прыладу"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Не ўдалося абнавіць набор налад"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Набор налад"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Выбрана"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Навакольныя гукі"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Левы бок"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Калі вы абагульваеце праграму, праграма \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" можа бачыць усё, што паказваецца ці прайграецца ў гэтай праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Абагуліць экран"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" адключыла гэты параметр"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Выберыце праграму для абагульвання"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Уключыць трансляцыю экрана?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Трансліраваць адну праграму"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Час"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Паказваць гадзіны, хвіліны і секунды"</item> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 3ab943a658e6..a085b1545867 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликнете за сдвояване на ново устройство"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Предварително зададените настройки не бяха актуализирани"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Предварително зададено"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Избрано"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Околни звуци"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Ляво"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Когато споделяте приложение, всичко, което се показва или възпроизвежда в него, е видимо за <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Споделяне на екрана"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> деактивира тази опция"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Изберете приложение за споделяне"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Искате ли да предавате екрана си?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Предаване на едно приложение"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Час"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Показване на часовете, минутите и секундите"</item> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 4ab650edc56d..18d632e95502 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"নতুন ডিভাইস পেয়ার করতে ক্লিক করুন"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"প্রিসেট আপডেট করা যায়নি"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"প্রিসেট"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"বেছে নেওয়া হয়েছে"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"সারাউন্ডিং"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"বাঁদিক"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"কোনও অ্যাপ শেয়ার করার সময়, সেই অ্যাপে দেখা ও চালানো হয় এমন সব কিছু <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> দেখতে পাবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ের ক্ষেত্রে সতর্ক থাকুন।"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"স্ক্রিন শেয়ার করুন"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> এই বিকল্পটি বন্ধ করে দিয়েছে"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"শেয়ার করার জন্য অ্যাপ বেছে নিন"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"আপনার স্ক্রিন কাস্ট করতে চান?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"একটি অ্যাপ কাস্ট করুন"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"সময়"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ঘণ্টা, মিনিট, এবং সেকেন্ড দেখান"</item> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index afa877ee5c0a..c18af99aafc0 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da uparite novi uređaj"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ažuriranje zadane postavke nije uspjelo"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Zadana postavka"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Odabrano"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okruženje"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Lijevo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kada dijelite aplikaciju, sve što se prikazuje ili reproducira u toj aplikaciji će biti vidljivo aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, audio i videozapisi."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Dijeli ekran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućila tu opciju"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Odaberite aplikaciju koju želite dijeliti"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Emitirati ekran?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Emitiraj jednu aplikaciju"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Prevucite ovdje za uklanjanje"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Broj polja mora biti najmanje <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Uredite"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Vrijeme"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Prikaži sate, minute i sekunde"</item> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 3e43c7924678..0404bc70b75e 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fes clic per vincular un dispositiu nou"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"No s\'ha pogut actualitzar el valor predefinit"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Valors predefinits"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Seleccionat"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Entorn"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Esquerra"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quan comparteixes una aplicació, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> pot veure qualsevol cosa que s\'hi mostra o que s\'hi reprodueix. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Comparteix la pantalla"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ha desactivat aquesta opció"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Tria una aplicació per compartir"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Vols emetre la pantalla?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Emet una aplicació"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrossega aquí per suprimir"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Necessites com a mínim <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> mosaics"</string> <string name="qs_edit" msgid="5583565172803472437">"Edita"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Hora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostra les hores, els minuts i els segons"</item> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index f374913a56cf..e438d6332dd0 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zařízení"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Předvolbu nelze aktualizovat"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Předvolba"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Vybráno"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okolí"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vlevo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Při sdílení aplikace vidí <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vše, co se ve sdílené aplikaci nachází nebo děje. Buďte proto opatrní, když jde o hesla, platební údaje, zprávy, fotografie, zvuk a video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Sdílet obrazovku"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> tuto možnost zakázala"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Vyberte aplikaci ke sdílení"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Odeslat obrazovku?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Odeslat jednu aplikaci"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Přetažením sem dlaždice odstraníte"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Potřebujete alespoň tento počet dlaždic: <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Upravit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Čas"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Zobrazovat hodiny, minuty a sekundy"</item> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 0875aad0986e..52abc4a2fda5 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik for at parre en ny enhed"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Forindstillingen kunne ikke opdateres"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Forindstilling"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Valgt"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgivelser"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Venstre"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Når du deler en app, er alt, der vises eller afspilles i den pågældende app, synligt for <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Vær derfor forsigtig med f.eks. adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Del skærm"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> har deaktiveret denne valgmulighed"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Vælg den app, du vil dele fra"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Vil du caste din skærm?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast én app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Træk herhen for at fjerne"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Du skal bruge mindst <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> felter"</string> <string name="qs_edit" msgid="5583565172803472437">"Rediger"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tid"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Vis timer, minutter og sekunder"</item> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 8b783fdcc161..612c52f5c127 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicken, um neues Gerät zu koppeln"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Voreinstellung konnte nicht aktualisiert werden"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Voreinstellung"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Ausgewählt"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Umgebungsgeräusche"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Links"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Wenn du eine App streamst, ist für <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> alles sichtbar, was in dieser App angezeigt oder abgespielt wird. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Bildschirm teilen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> hat diese Option deaktiviert"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"App zum Teilen auswählen"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Bildschirm streamen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Eine App streamen"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Zum Entfernen hierher ziehen"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Du brauchst mindestens <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> Kacheln"</string> <string name="qs_edit" msgid="5583565172803472437">"Bearbeiten"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Uhrzeit"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Stunden, Minuten und Sekunden anzeigen"</item> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index c1a9a3a4c19d..2c17a394b022 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Κάντε κλικ για σύζευξη νέας συσκευής"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Δεν ήταν δυνατή η ενημέρωση της προεπιλογής"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Προεπιλογή"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Έχει επιλεγεί"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ήχοι περιβάλλοντος"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Αριστερά"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Όταν μοιράζεστε μια εφαρμογή, οτιδήποτε εμφανίζεται ή αναπαράγεται σε αυτή την εφαρμογή, είναι ορατό στην εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Κοινή χρήση οθόνης"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> απενεργοποίησε αυτή την επιλογή"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Επιλογή εφαρμογής για κοινή χρήση"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Να γίνει μετάδοση της οθόνης σας;"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Μετάδοση μίας εφαρμογής"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ώρα"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Να εμφανίζονται ώρες, λεπτά και δευτερόλεπτα"</item> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 1fee916f670e..7b8f98237c7a 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Couldn\'t update preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selected"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Surroundings"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Left"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"When you\'re sharing an app, anything shown or played in that app is visible to <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. So be careful with things like passwords, payment details, messages, photos, audio and video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Share screen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> has disabled this option"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choose app to share"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Cast your screen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast one app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Drag here to remove"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"You need at least <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tiles"</string> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Time"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Show hours, minutes and seconds"</item> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 318f0b43332e..15056c6e9a08 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -419,6 +419,11 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Couldn\'t update preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <string name="hearing_devices_input_routing_label" msgid="730396728151232306">"Default microphone for calls"</string> + <string-array name="hearing_device_input_routing_options"> + <item msgid="4582190415045337003">"Hearing aid microphone"</item> + <item msgid="8501466270452446450">"This phone\'s microphone"</item> + </string-array> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selected"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Surroundings"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Left"</string> @@ -582,6 +587,7 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"When you’re sharing an app, anything shown or played in that app is visible to <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Share screen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> has disabled this option"</string> + <string name="media_projection_entry_app_permission_dialog_single_app_not_supported" msgid="4860247304058870233">"Not supported by the app"</string> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choose app to share"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Cast your screen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast one app"</string> @@ -979,6 +985,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Drag here to remove"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"You need at least <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tiles"</string> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Time"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Show hours, minutes, and seconds"</item> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 1fee916f670e..7b8f98237c7a 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Couldn\'t update preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selected"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Surroundings"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Left"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"When you\'re sharing an app, anything shown or played in that app is visible to <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. So be careful with things like passwords, payment details, messages, photos, audio and video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Share screen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> has disabled this option"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choose app to share"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Cast your screen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast one app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Drag here to remove"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"You need at least <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tiles"</string> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Time"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Show hours, minutes and seconds"</item> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 1fee916f670e..7b8f98237c7a 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Couldn\'t update preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selected"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Surroundings"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Left"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"When you\'re sharing an app, anything shown or played in that app is visible to <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. So be careful with things like passwords, payment details, messages, photos, audio and video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Share screen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> has disabled this option"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choose app to share"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Cast your screen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast one app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Drag here to remove"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"You need at least <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tiles"</string> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Time"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Show hours, minutes and seconds"</item> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 486b43a2e867..1b15b1b4fe40 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para vincular un dispositivo nuevo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"No se pudo actualizar el ajuste predeterminado"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Ajuste predeterminado"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Seleccionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Sonido envolvente"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Izquierda"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Cuando compartes una app, todo lo que se muestre o reproduzca en ella será visible en <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Compartir pantalla"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> inhabilitó esta opción"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Elige la app para compartir"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"¿Quieres transmitir la pantalla?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmitir una app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastra aquí para quitar"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Necesitas al menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tarjetas"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Hora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos y segundos"</item> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index ecd3fdab13aa..2311b48b6570 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para emparejar un nuevo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"No se ha podido actualizar el preajuste"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preajuste"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Seleccionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Alrededores"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Izquierda"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Cuando compartes una aplicación, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> puede ver todo lo que se muestra o reproduce en ella. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Compartir pantalla"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ha inhabilitado esta opción"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Elige la aplicación que quieres compartir"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"¿Enviar tu pantalla?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Enviar una aplicación"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastra aquí para quitar una función"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Necesitas al menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> recuadros"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Hora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos y segundos"</item> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 2928c96b9689..9d221715da7e 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Uue seadme sidumiseks klõpsake"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Eelseadistust ei saanud värskendada"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Eelseadistus"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Valitud"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ümbritsevad helid"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vasakule"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Rakenduse jagamisel on kogu rakenduses kuvatav või esitatav sisu nähtav rakendusele <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Jaga ekraani"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> on selle valiku keelanud"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Vali jagamiseks rakendus"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Kas kanda ekraanikuva üle?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Ühe rakenduse ülekandmine"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Lohistage eemaldamiseks siia"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Teil on vaja vähemalt <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> paani"</string> <string name="qs_edit" msgid="5583565172803472437">"Muutmine"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Kellaaeg"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Kuva tunnid, minutid ja sekundid"</item> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 99dec017c0f4..443632bb543a 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Egin klik beste gailu bat parekatzeko"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ezin izan da eguneratu aurrezarpena"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Aurrezarpena"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Hautatuta"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ingurunea"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Ezkerrekoa"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Aplikazio bat partekatzen ari zarenean, aplikazio horretan agertzen den edo bertan erreproduzitzen ari den guztia ikusi dezake <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Partekatu pantaila"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak aukera desgaitu du"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Aukeratu zein aplikazio partekatu nahi duzun"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Pantaila igorri nahi duzu?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Igorri aplikazio bat"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Kentzeko, arrastatu hona"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"<xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> lauza behar dituzu gutxienez"</string> <string name="qs_edit" msgid="5583565172803472437">"Editatu"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ordua"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Erakutsi orduak, minutuak eta segundoak"</item> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index db76009629c4..58f35d1d8511 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"برای جفت کردن دستگاه جدید، کلیک کنید"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"پیشتنظیم بهروزرسانی نشد"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"پیشتنظیم"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"انتخابشده"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"پیرامون"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"چپ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"وقتی برنامهای را همرسانی میکنید، هر چیزی که در آن برنامه نمایش داده شود یا پخش شود برای <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> قابلمشاهده خواهد بود. درنتیجه مراقب چیزهایی مثل گذرواژهها، جزئیات پرداخت، پیامها، عکسها، و صدا و تصویر باشید."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"همرسانی صفحهنمایش"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g>این گزینه را غیرفعال کرده است"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"برنامهای را برای همرسانی انتخاب کنید"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"محتوای صفحهنمایش شما پخش شود؟"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"پخش کردن محتوای یک برنامه"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"زمان"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ساعت، دقیقه و ثانیه نشان داده شود"</item> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 8df9aeb04f92..1b767db0ca57 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -421,6 +421,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Muodosta uusi laitepari klikkaamalla"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Esiasetusta ei voitu muuttaa"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Esiasetus"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Valittu"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ympäristö"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vasen"</string> @@ -584,6 +588,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kun jaat sovelluksen, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> näkee kaiken sovelluksessa näkyvän tai toistetun sisällön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Jaa näyttö"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> on poistanut vaihtoehdon käytöstä"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Valitse jaettava sovellus"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Striimataanko näyttö?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Striimaa yksi sovellus"</string> @@ -982,6 +988,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Poista vetämällä tähän."</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"<xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> kiekkoa on vähimmäismäärä"</string> <string name="qs_edit" msgid="5583565172803472437">"Muokkaa"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Aika"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Näytä tunnit, minuutit ja sekunnit"</item> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 9bd16d975d74..2a315e453cae 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquez ici pour associer un nouvel appareil"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Impossible de mettre à jour le préréglage"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Préréglage"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Sélectionné"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Environnement"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Gauche"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Lorsque vous partagez une appli, tout ce qui s\'y affiche ou s\'y joue est visible par <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Par conséquent, soyez prudent avec les mots de passe, les détails du mode de paiement, les messages, les photos et les contenus audio et vidéo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Partager l\'écran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> a désactivé cette option"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choisir l\'appli à partager"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Diffuser votre écran?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Diffuser une appli"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Faites glisser les tuiles ici pour les retirer"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Vous avez besoin d\'au moins <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tuiles"</string> <string name="qs_edit" msgid="5583565172803472437">"Modifier"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Heure"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Afficher les heures, les minutes et les secondes"</item> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 63ac0cab4b17..d7e9d446bec1 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquer pour associer un nouvel appareil"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Impossible de mettre à jour les préréglages"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Préréglage"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Sélectionné"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Sons environnants"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Gauche"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Lorsque vous partagez une appli, tout ce qui est affiché ou lu dans celle-ci est visible par <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Faites donc attention aux éléments tels que les mots de passe, les détails du mode de paiement, les messages, les photos et les contenus audio et vidéo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Partager l\'écran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> a désactivé cette option"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Choisir l\'appli à partager"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Caster votre écran ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Caster une appli"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Faites glisser les blocs ici pour les supprimer"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Au minimum <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tuiles sont nécessaires"</string> <string name="qs_edit" msgid="5583565172803472437">"Modifier"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Heure"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Afficher les heures, les minutes et les secondes"</item> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 80da559ba1c5..f4a4ceb526dc 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic para vincular un novo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Non se puido actualizar a configuración predeterminada"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Configuración predeterminada"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Elemento seleccionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ambiente"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Esquerdo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Se compartes toda a pantalla, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> poderá ver todo o contido que apareza ou se reproduza nesa aplicación. Ten coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como co contido de audio e de vídeo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Compartir pantalla"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> desactivou esta opción"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Escoller unha aplicación para compartir"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Queres emitir a túa pantalla?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Emitir unha aplicación"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastra o elemento ata aquí para quitalo"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Como mínimo ten que haber <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> mosaicos"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Hora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos e segundos"</item> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 17bcdf091f9e..2a8fe315647e 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -252,10 +252,8 @@ <string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> થી કનેક્ટ થયાં."</string> <string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> થી કનેક્ટ કરેલ."</string> <string name="accessibility_expand_group" msgid="521237935987978624">"ગ્રૂપને મોટું કરો."</string> - <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) --> - <skip /> - <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) --> - <skip /> + <string name="accessibility_add_device_to_group" msgid="5446422960697860806">"ડિવાઇસને ગ્રૂપમાં ઉમેરો."</string> + <string name="accessibility_remove_device_from_group" msgid="3114694270949142228">"ડિવાઇસને ગ્રૂપમાંથી કાઢી નાખો."</string> <string name="accessibility_open_application" msgid="1749126077501259712">"ઍપ્લિકેશન ખોલો."</string> <string name="accessibility_not_connected" msgid="4061305616351042142">"કનેક્ટ થયેલું નથી."</string> <string name="data_connection_roaming" msgid="375650836665414797">"રોમિંગ"</string> @@ -333,8 +331,7 @@ <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ઇનપુટ"</string> <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"સાંભળવામાં મદદ આપતા યંત્રો"</string> <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ચાલુ કરી રહ્યાં છીએ…"</string> - <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) --> - <skip /> + <string name="quick_settings_brightness_unable_adjust_msg" msgid="4124028416057617517">"બ્રાઇટનેસ ગોઠવી શકાતી નથી કારણ કે તે લોકપ્રિય ઍપ દ્વારા નિયંત્રિત કરવામાં આવી રહી છે"</string> <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ઑટો રોટેટ"</string> <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ઑટો રોટેટ સ્ક્રીન"</string> <string name="quick_settings_location_label" msgid="2621868789013389163">"લોકેશન"</string> @@ -422,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"નવા ડિવાઇસ સાથે જોડાણ કરવા માટે ક્લિક કરો"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"પ્રીસેટ અપડેટ કરી શક્યા નથી"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"પ્રીસેટ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"પસંદ કરી છે"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"આસપાસના અવાજો"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ડાબે"</string> @@ -585,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"જ્યારે તમે કોઈ ઍપને શેર કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી બધી વસ્તુ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ને દેખાય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"સ્ક્રીન શેર કરો"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> દ્વારા આ વિકલ્પ બંધ કરવામાં આવ્યો છે"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"શેર કરવા માટે ઍપ પસંદ કરો"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"તમારી સ્ક્રીનને કાસ્ટ કરીએ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"એક ઍપને કાસ્ટ કરો"</string> @@ -983,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"સમય"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"કલાક, મિનિટ અને સેકન્ડ બતાવો"</item> @@ -1344,7 +1349,7 @@ <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ટાઇલ ઉમેરો"</string> <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ટાઇલ ઉમેરશો નહીં"</string> <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"વપરાશકર્તા પસંદ કરો"</string> - <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# ઍપ સક્રિય છે}one{# ઍપ સક્રિય છે}other{# ઍપ સક્રિય છે}}"</string> + <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# ઍપ ઍક્ટિવ છે}one{# ઍપ ઍક્ટિવ છે}other{# ઍપ ઍક્ટિવ છે}}"</string> <string name="fgs_dot_content_description" msgid="2865071539464777240">"નવી માહિતી"</string> <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"સક્રિય ઍપ"</string> <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"જ્યારે તમે આ ઍપનો ઉપયોગ ન કરતા હો, ત્યારે પણ તે સક્રિય અને ચાલતી હોય છે. આનાથી તેની કાર્યક્ષમતામાં સુધારો થાય છે, પરંતુ બૅટરીની આવરદાને અસર પણ થઈ શકે છે."</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index f4c05ba2f8c5..922794daa24b 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नया डिवाइस जोड़ने के लिए क्लिक करें"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"प्रीसेट अपडेट नहीं किया जा सका"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"प्रीसेट"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"चुना गया"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"आस-पास का वॉल्यूम"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"बाईं ओर के वॉल्यूम के लिए"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"जब कोई ऐप्लिकेशन शेयर किया जाता है, तो उस ऐप्लिकेशन में दिख रहा या चलाया जा रहा पूरा कॉन्टेंट <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> पर दिखता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, ऑडियो, और वीडियो को लेकर सावधानी बरतें."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"स्क्रीन शेयर करें"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ने इस विकल्प को बंद कर दिया है"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"शेयर करने के लिए ऐप्लिकेशन चुनें"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"क्या स्क्रीन को कास्ट करना है?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"एक ऐप्लिकेशन को कास्ट करें"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"समय"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"घंटे, मिनट और सेकंड दिखाएं"</item> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 9d2509404a8c..3213d59dadf9 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili novi uređaj"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ažuriranje unaprijed definiranih postavki nije uspjelo"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Unaprijed definirana postavka"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Odabrano"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okruženje"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Lijevo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kada dijelite aplikaciju, sve što se prikazuje ili reproducira u toj aplikaciji bit će vidljivo aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Dijeljenje zaslona"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> onemogućila je ovu opciju"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Odaberite aplikaciju za dijeljenje"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Želite li emitirati zaslon?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Emitiranje jedne aplikacije"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Povucite ovdje za uklanjanje"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Potrebno je barem <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> pločica"</string> <string name="qs_edit" msgid="5583565172803472437">"Uređivanje"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Vrijeme"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Prikaži sate, minute i sekunde"</item> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index bdeececfd9ae..4327594260fc 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kattintson új eszköz párosításához"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Nem sikerült frissíteni a beállításkészletet"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Beállításkészlet"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Kiválasztva"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Környezet"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Bal"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Alkalmazás megosztása közben az adott appban megjelenített vagy lejátszott minden tartalom látható a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> számára. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Képernyő megosztása"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> letiltotta ezt a beállítást"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Válassza ki a megosztani kívánt alkalmazást"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Átküldi a képernyőt?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Egyetlen app átküldése"</string> @@ -794,8 +800,7 @@ <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"Be: Arcalapú"</string> <string name="inline_done_button" msgid="6043094985588909584">"Kész"</string> <string name="inline_ok_button" msgid="603075490581280343">"Alkalmaz"</string> - <!-- no translation found for inline_turn_off_notifications (2653064779176881329) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="2653064779176881329">"Kikapcsolás"</string> <string name="notification_silence_title" msgid="8608090968400832335">"Néma"</string> <string name="notification_alert_title" msgid="3656229781017543655">"Alapértelmezett"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"Automatikus"</string> @@ -980,6 +985,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Húzza ide az eltávolításhoz"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Legalább <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> kártya szükséges"</string> <string name="qs_edit" msgid="5583565172803472437">"Szerkesztés"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Idő"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Óra, perc és másodperc megjelenítése"</item> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index d448486faf64..eaff82423bd8 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Սեղմեք՝ նոր սարք զուգակցելու համար"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Չհաջողվեց թարմացնել կարգավորումների հավաքածուն"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Կարգավորումների հավաքածու"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Ընտրված է"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Շրջակայք"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Ձախ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Երբ դուք որևէ հավելված եք հեռարձակում, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին տեսանելի կլինի այն ամենը, ինչ ցուցադրվում կամ նվագարկվում է այդ հավելվածում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ցուցադրել էկրանը"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ն անջատել է այս ընտրանքը"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Հավելվածի ընտրություն՝ կիսվելու համար"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Հեռարձակե՞լ ձեր էկրանը"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Հեռարձակել մեկ հավելված"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ժամ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Ցույց տալ ժամերը, րոպեները և վայրկյանները"</item> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 5867bf7c5cc6..763f76754b74 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menyambungkan perangkat baru"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Tidak dapat memperbarui preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Dipilih"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Suara sekitar"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kiri"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Jika Anda membagikan aplikasi, semua hal yang ditampilkan atau diputar di aplikasi tersebut akan terlihat oleh <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Bagikan layar"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah menonaktifkan opsi ini"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pilih aplikasi yang akan dibagikan"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Transmisikan layar?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmisikan satu aplikasi"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Tarik ke sini untuk menghapus"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Anda membutuhkan setidaknya <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> kartu"</string> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Waktu"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Tampilkan jam, menit, dan detik"</item> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index f949400bf09d..970a9130135a 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Smelltu til að para nýtt tæki"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Tókst ekki að uppfæra forstillingu"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Forstilling"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Valið"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Umhverfi"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vinstri"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Þegar þú deilir forriti er allt sem sést eða er spilað í því forriti sýnilegt <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Deila skjá"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> slökkti á þessum valkosti"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Velja forrit til að deila"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Varpa skjánum?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Varpa einu forriti"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Dragðu hingað til að fjarlægja"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Flísarnar mega ekki vera færri en <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Breyta"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tími"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Sýna klukkustundir, mínútur og sekúndur"</item> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 708fa78bedff..7323037cb00b 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic per accoppiare un nuovo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Impossibile aggiornare preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selezionato"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Audio ambientale"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Sinistra"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quando condividi un\'app, tutto ciò che viene mostrato o riprodotto al suo interno è visibile a <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Presta quindi attenzione a password, dati di pagamento, messaggi, foto, audio e video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Condividi schermo"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ha disattivato questa opzione"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Scegli l\'app da condividere"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Trasmettere lo schermo?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Trasmetti un\'app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Trascina qui per rimuovere"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Occorrono almeno <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> schede"</string> <string name="qs_edit" msgid="5583565172803472437">"Modifica"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostra ore, minuti e secondi"</item> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 35500fbc4107..3ee24a3d5a75 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"צריך ללחוץ כדי להתאים מכשיר חדש"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"לא ניתן לעדכן את ההגדרה הקבועה מראש"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"הגדרה קבועה מראש"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"נבחר"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"הרעשים בסביבה"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"שמאל"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"כשמשתפים אפליקציה, כל מה שרואים או מפעילים בה מופיע גם ב-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. מומלץ להיזהר ולא לחשוף פרטים אישיים כמו סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"שיתוף המסך"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> השביתה את האפשרות הזו"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"בחירת אפליקציה לשיתוף"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"להפעיל Cast של המסך?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"הפעלת Cast של אפליקציה אחת"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"שעה"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"הצגת שעות, דקות ושניות"</item> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index fc792b6f9850..1e85479ca0eb 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"クリックすると、新しいデバイスをペア設定できます"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"プリセットを更新できませんでした"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"プリセット"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"選択中"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"周囲の音"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"左"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"アプリを共有すると、そのアプリで表示または再生される内容が <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> にすべて公開されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"画面を共有"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> がこのオプションを無効にしています"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"共有するアプリを選択"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"画面をキャストしますか?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"1 つのアプリをキャスト"</string> @@ -794,8 +800,7 @@ <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"ON - 顔ベース"</string> <string name="inline_done_button" msgid="6043094985588909584">"完了"</string> <string name="inline_ok_button" msgid="603075490581280343">"適用"</string> - <!-- no translation found for inline_turn_off_notifications (2653064779176881329) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="2653064779176881329">"OFF にする"</string> <string name="notification_silence_title" msgid="8608090968400832335">"サイレント"</string> <string name="notification_alert_title" msgid="3656229781017543655">"デフォルト"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"自動"</string> @@ -980,6 +985,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"時間"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"時間、分、秒を表示"</item> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index e13a1b3a3bd8..0a25f83d1185 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"დააწკაპუნეთ ახალი მოწყობილობის დასაწყვილებლად"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"წინასწარ დაყენებული პარამეტრების განახლება ვერ მოხერხდა"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"წინასწარ დაყენებული"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"არჩეულია"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"გარემოცვა"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"მარცხენა"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"აპის გაზიარებისას <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ხედავს ყველაფერს, რაც ჩანს ან უკრავს ამ აპში. ამიტომ სიფრთხილე გამოიჩინეთ ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ეკრანის გაზიარება"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g>-მა გათიშა ეს ვარიანტი"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"გაზიარებისთვის აპის არჩევა"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"გსურთ თქვენი ეკრანის ტრანსლირება?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ერთი აპის ტრანსლირება"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"დრო"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"საათების, წუთებისა და წამების ჩვენება"</item> @@ -1249,7 +1257,7 @@ <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"ხელმისაწვდომი მოწყობილობები გამომავალი აუდიოსთვის."</string> <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"ხმა"</string> <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string> - <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"დინამიკები და დისპლეები"</string> + <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"დინამიკები და ეკრანები"</string> <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"შემოთავაზებული მოწყობილობები"</string> <string name="media_input_group_title" msgid="2057057473860783021">"შემავალი"</string> <string name="media_output_group_title" msgid="6789001895863332576">"გამომავალი"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 5fc8b47869b7..c7e8d81f4e45 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Жаңа құрылғыны жұптау үшін басыңыз."</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Параметрлер жинағын жаңарту мүмкін болмады."</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Параметрлер жинағы"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Таңдалды"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Айнала"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Сол жақ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Қолданбаны бөліскен кезде, онда көрінетін не ойнатылатын барлық контент <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> қолданбасында көрсетіледі. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды, фотосуреттерді және аудио мен бейнені ашқанда сақ болыңыз."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Экранды бөлісу"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы осы опцияны өшірді."</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Бөлісетін қолданба экранын таңдау"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Экранды трансляциялау керек пе?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Бір қолданба экранын трансляциялау"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Уақыт"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Сағаттарды, минуттарды және секундтарды көрсету"</item> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 579c509dd6db..349e34a2c8cd 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ចុច ដើម្បីផ្គូផ្គងឧបករណ៍ថ្មី"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"មិនអាចប្ដូរការកំណត់ជាមុនបានទេ"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"កំណត់ជាមុន"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"បានជ្រើសរើស"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"មជ្ឈដ្ឋានជុំវិញ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ឆ្វេង"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"នៅពេលអ្នកបង្ហាញកម្មវិធីណាមួយ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> មើលឃើញអ្វីគ្រប់យ៉ាងដែលបង្ហាញ ឬចាក់ក្នុងកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"បង្ហាញអេក្រង់"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> បានបិទជម្រើសនេះ"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ជ្រើសរើសកម្មវិធីដើម្បីចែករំលែក"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"បញ្ជូនអេក្រង់របស់អ្នកឬ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"បញ្ជូនកម្មវិធីមួយ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ម៉ោង"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"បង្ហាញម៉ោង នាទី និងវិនាទី"</item> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index c84b33baed10..0fa4c2476151 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ಪ್ರಿಸೆಟ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ಪ್ರಿಸೆಟ್"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"ಆ್ಯಂಬಿಯೆಂಟ್ ವಾಲ್ಯೂಮ್"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ಎಡ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್ನಲ್ಲಿ ತೋರಿಸಿರುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡಿದ ಏನಾದರೂ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಗೆ ಗೋಚರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್ವರ್ಡ್ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಮತ್ತು ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಬಗ್ಗೆ ಜಾಗರೂಕರಾಗಿರಿ."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ಸ್ಕ್ರೀನ್ ಹಂಚಿಕೊಳ್ಳಿ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಈ ಆಯ್ಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದೆ"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ಹಂಚಿಕೊಳ್ಳಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಿತ್ತರಿಸಬೇಕೇ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ಒಂದು ಆ್ಯಪ್ ಅನ್ನು ಬಿತ್ತರಿಸಿ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ಸಮಯ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ಗಂಟೆಗಳು, ನಿಮಿಷಗಳು, ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು"</item> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 048050cf53df..2b9fc89af8b4 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"새 기기와 페어링하려면 클릭하세요"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"사전 설정을 업데이트할 수 없음"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"미리 설정"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"선택됨"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"주변 소리"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"왼쪽"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"앱을 공유하면 앱에 표시되거나 앱에서 재생되는 모든 항목이 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>에 표시됩니다. 따라서 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"화면 공유"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 이 옵션을 사용 중지했습니다."</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"공유할 앱 선택"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"화면을 전송하시겠습니까?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"앱 1개 전송"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"시간"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"시간, 분, 초 표시"</item> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index e6b108126012..b1f6f484ed59 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Жаңы түзмөк кошуу үчүн басыңыз"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Алдын ала коюлган параметрлер жаңыртылган жок"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Алдын ала коюлган параметрлер"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Тандалды"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Айланадагы үндөр"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Сол"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Колдонмону бөлүшкөндө, андагы нерселер <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосуна көрүнөт. Андыктан сырсөздөр, төлөмдүн чоо-жайы, билдирүүлөр, сүрөттөр, аудио жана видеолор менен этият болуңуз."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Экранды бөлүшүү"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> бул параметрди өчүрүп койду"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Бөлүшүү үчүн колдонмо тандоо"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Экранды башка түзмөккө чыгарасызбы?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Бир колдонмону чыгаруу"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Убакыт"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Сааттар, мүнөттөр жана секунддар"</item> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index e7229e8f3704..c2a4e8fad79b 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ຄລິກເພື່ອຈັບຄູ່ອຸປະກອນໃໝ່"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ບໍ່ສາມາດອັບເດດການຕັ້ງຄ່າລ່ວງໜ້າໄດ້"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ຄ່າທີ່ກຳນົດລ່ວງໜ້າ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ເລືອກແລ້ວ"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"ສຽງແວດລ້ອມ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ຊ້າຍ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ເມື່ອທ່ານແບ່ງປັນແອັບຂອງທ່ານ, ຄົນອື່ນຈະເບິ່ງເຫັນທຸກຢ່າງທີ່ສະແດງ ຫຼື ຫຼິ້ນໃນແອັບໃນ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ, ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ແບ່ງປັນໜ້າຈໍ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ປິດການນຳໃຊ້ຕົວເລືອກນີ້ແລ້ວ"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ເລືອກແອັບທີ່ຈະແບ່ງປັນ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ສົ່ງສັນຍານໜ້າຈໍຂອງທ່ານບໍ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ສົ່ງສັນຍານແອັບ 1 ລາຍການ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ເວລາ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ສະແດງຊົ່ວໂມງ, ນາທີ ແລະ ວິນາທີ"</item> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 6563cb97f35d..48ab51b46e57 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Spustelėkite, kad susietumėte naują įrenginį"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Išankstinių nustatymų atnaujinti nepavyko"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Išankstiniai nustatymai"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Pasirinkta"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Aplinka"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kairė"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kai bendrinate programą, „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ matomas visas toje programoje rodomas ar leidžiamas turinys. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Bendrinti ekraną"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Programoje „<xliff:g id="APP_NAME">%1$s</xliff:g>“ ši parinktis išjungta"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Norimos bendrinti programos pasirinkimas"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Perduoti ekraną?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Perduoti vieną programą"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Vilkite čia, jei norite pašalinti"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Turi būti bent <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> išklotinės elem."</string> <string name="qs_edit" msgid="5583565172803472437">"Redaguoti"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Laikas"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Rodyti valandas, minutes ir sekundes"</item> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 0c030b7029f9..e5c407f30b6c 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Noklikšķiniet, lai savienotu pārī jaunu ierīci"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Nevarēja atjaunināt pirmsiestatījumu"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Pirmsiestatījums"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Atlasīts"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Apkārtnes skaņas"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Pa kreisi"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kopīgojot lietotni, lietotnei <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ir pieejams viss kopīgotajā lietotnē parādītais vai atskaņotais saturs. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Kopīgot ekrānu"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> tika atspējota šī opcija"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Lietotnes izvēlēšanās kopīgošanai"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Vai apraidīt ekrānu?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Apraidīt vienu lietotni"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Lai noņemtu vienumus, velciet tos šeit."</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Nepieciešami vismaz <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> elementi"</string> <string name="qs_edit" msgid="5583565172803472437">"Rediģēt"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Laiks"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Rādīt stundas, minūtes un sekundes"</item> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index b798f457ee8b..e546fb584ed3 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликнете за да спарите нов уред"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Не можеше да се ажурира зададената вредност"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Зададени вредности"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Избрано"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Опкружување"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Лево"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Додека споделувате апликација, сѐ што се прикажува или пушта на таа апликација е видливо за <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Сподели екран"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ја оневозможи опцијава"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Изберете апликација за споделување"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Да се емитува вашиот екран?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Емитувајте една апликација"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Време"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Прикажи часови, минути и секунди"</item> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index eb7da33b02d2..17b1c3d9d49c 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"പുതിയ ഉപകരണം ജോടിയാക്കാൻ ക്ലിക്ക് ചെയ്യുക"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"പ്രീസെറ്റ് അപ്ഡേറ്റ് ചെയ്യാനായില്ല"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"പ്രീസെറ്റ്"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"തിരഞ്ഞെടുത്തു"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"സറൗണ്ടിംഗ്സ്"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ഇടത്"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"നിങ്ങളുടെ ആപ്പ് പങ്കിടുമ്പോൾ, ആ ആപ്പിൽ കാണിക്കുന്നതോ പ്ലേ ചെയ്യുന്നതോ ആയ എല്ലാ കാര്യങ്ങളും <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് ദൃശ്യമാകും. അതിനാൽ പാസ്വേഡുകൾ, പേയ്മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങളിൽ ശ്രദ്ധ പുലർത്തുക."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"സ്ക്രീൻ പങ്കിടുക"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ഈ ഓപ്ഷൻ പ്രവർത്തനരഹിതമാക്കി"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"പങ്കിടാൻ ആപ്പ് തിരഞ്ഞെടുക്കുക"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"നിങ്ങളുടെ സ്ക്രീൻ കാസ്റ്റ് ചെയ്യണോ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ഒരു ആപ്പ് കാസ്റ്റ് ചെയ്യുക"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"സമയം"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"മണിക്കൂറും മിനിറ്റും സെക്കൻഡും കാണിക്കുക"</item> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 3adddc2d27ad..ba7baf4ae5b0 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Шинэ төхөөрөмж хослуулахын тулд товшино уу"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Урьдчилсан тохируулгыг шинэчилж чадсангүй"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Урьдчилсан тохируулга"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Сонгосон"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Орчин тойрон"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Зүүн"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Таныг апп хуваалцаж байхад тухайн аппад харуулж эсвэл тоглуулж буй аливаа зүйл <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-д харагдана. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио, видео зэрэг зүйлд болгоомжтой хандаарай."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Дэлгэцийг хуваалцах"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> энэ сонголтыг идэвхгүй болгосон"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Хуваалцах апп сонгох"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Дэлгэцээ дамжуулах уу?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Нэг апп дамжуулах"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Цаг"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Цаг, минут, секундийг харуулах"</item> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 08ef7b2e9cfc..d6d8e1cfa70d 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नवीन डिव्हाइस पेअर करण्यासाठी क्लिक करा"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"प्रीसेट अपडेट करता आले नाही"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"प्रीसेट"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"निवडला आहे"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"जवळपासचे"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"डावे"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"तुम्ही अॅप शेअर करता, तेव्हा त्या अॅपमध्ये दाखवल्या किंवा प्ले होणाऱ्या कोणत्याही गोष्टी <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> साठी दृश्यमान असतात. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"स्क्रीन शेअर करा"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> हा पर्याय बंद केला आहे"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"शेअर करण्यासाठी अॅप निवडा"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"तुमची स्क्रीन कास्ट करायची आहे का?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"एक अॅप कास्ट करा"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"वेळ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"तास, मिनिटे आणि सेकंद दर्शवा"</item> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 5aec75608f76..2aa5068557d6 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menggandingkan peranti baharu"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Tidak dapat mengemaskinikan pratetapan"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Pratetapan"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Dipilih"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Persekitaran"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kiri"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Apabila anda berkongsi apl, apa-apa sahaja kandungan yang dipaparkan atau dimainkan dalam apl tersebut boleh dilihat oleh <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Kongsi skrin"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah melumpuhkan pilihan ini"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pilih apl untuk dikongsi"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Hantar skrin anda?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Hantar satu apl"</string> @@ -794,8 +800,7 @@ <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"Hidup - Berasaskan wajah"</string> <string name="inline_done_button" msgid="6043094985588909584">"Selesai"</string> <string name="inline_ok_button" msgid="603075490581280343">"Guna"</string> - <!-- no translation found for inline_turn_off_notifications (2653064779176881329) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="2653064779176881329">"Matikan"</string> <string name="notification_silence_title" msgid="8608090968400832335">"Senyap"</string> <string name="notification_alert_title" msgid="3656229781017543655">"Lalai"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"Automatik"</string> @@ -980,6 +985,8 @@ <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> <string name="qs_edit" msgid="5583565172803472437">"Edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Masa"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Tunjukkan jam, minit dan saat"</item> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 98f937b377e1..70f8259df0a7 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"စက်အသစ် တွဲချိတ်ရန် နှိပ်ပါ"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"အသင့်သုံးကို အပ်ဒိတ်လုပ်၍မရပါ"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ကြိုတင်သတ်မှတ်ချက်"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ရွေးထားသည်"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"ဝန်းကျင်အသံ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ဘယ်"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"အက်ပ်ကို မျှဝေနေချိန်တွင် ယင်းအက်ပ်တွင် ပြထားသော (သို့) ဖွင့်ထားသော အရာအားလုံးကို <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> က မြင်နိုင်သည်။ စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"စခရင် မျှဝေရန်"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် ဤရွေးစရာကို ပိတ်ထားသည်"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"မျှဝေရန် အက်ပ်ရွေးခြင်း"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"သင့်ဖန်သားပြင်ကို ကာစ်လုပ်မလား။"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"အက်ပ်တစ်ခုကို ကာစ်လုပ်ရန်"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"အချိန်"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"နာရီ၊ မိနစ်နှင့် စက္ကန့်ကိုပြပါ"</item> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 627ab44fba26..82aeb65157d3 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klikk for å koble til en ny enhet"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Kunne ikke oppdatere forhåndsinnstillingen"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Forhåndsinnstilling"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Valgt"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgivelser"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Venstre"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Når du deler en app, er alt som vises eller spilles av i appen, synlig for <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Del skjermen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> har deaktivert dette alternativet"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Velg app å dele"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Vil du caste skjermen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Cast én app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Dra hit for å fjerne"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Du trenger minst <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> infobrikker"</string> <string name="qs_edit" msgid="5583565172803472437">"Endre"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tid"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Vis timer, minutter og sekunder"</item> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 6090ca509036..78164a250f42 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नयाँ डिभाइसमा कनेक्ट गर्न क्लिक गर्नुहोस्"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"प्रिसेट अपडेट गर्न सकिएन"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"पूर्वनिर्धारित"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"चयन गरिएको छ"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"वरपरका आवाज"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"बायाँ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"तपाईंले यो एप सेयर गरिरहेका बेला यो एपमा देखाइने वा प्ले गरिने सबै सामग्री <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> मा देखिन्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"स्क्रिन सेयर गर्नुहोस्"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले यो विकल्प अफ गर्नुभएको छ"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"सेयर गर्न छनौट गर्नुहोस्"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"स्क्रिन कास्ट गर्ने हो?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"एउटा एप कास्ट गर्नुहोस्"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"समय"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"घन्टा, मिनेट, र सेकेन्ड देखाउनुहोस्"</item> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index ebe9ad475229..fe6f34814279 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nieuw apparaat te koppelen"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Kan voorinstelling niet updaten"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Voorinstelling"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Geselecteerd"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgevingsgeluid"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Links"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Als je een app deelt, is alles dat wordt getoond of afgespeeld in die app zichtbaar voor <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Scherm delen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Voor <xliff:g id="APP_NAME">%1$s</xliff:g> staat deze optie uit"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"App kiezen om te delen"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Je scherm casten?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Eén app casten"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Sleep hier naartoe om te verwijderen"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Je hebt minimaal <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tegels nodig"</string> <string name="qs_edit" msgid="5583565172803472437">"Bewerken"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tijd"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Uren, minuten en seconden tonen"</item> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 8569c7aaad2e..fa16f28f15a8 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ନୂଆ ଡିଭାଇସ ପେୟାର କରିବାକୁ କ୍ଲିକ କରନ୍ତୁ"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ପ୍ରିସେଟକୁ ଅପଡେଟ କରାଯାଇପାରିଲା ନାହିଁ"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ପ୍ରିସେଟ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ଚୟନ କରାଯାଇଛି"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"ପରିପାର୍ଶ୍ୱ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ବାମ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ଆପଣ ଏକ ଆପ ସେୟାର କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛି <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>କୁ ଦେଖାଯାଏ। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ସ୍କ୍ରିନ ସେୟାର କରନ୍ତୁ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଏହି ବିକଳ୍ପକୁ ଅକ୍ଷମ କରିଛି"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ସେୟାର କରିବାକୁ ଆପ ବାଛନ୍ତୁ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ କାଷ୍ଟ କରିବେ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ଗୋଟିଏ ଆପକୁ କାଷ୍ଟ କରନ୍ତୁ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ସମୟ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ଘଣ୍ଟା, ମିନିଟ୍ ଏବଂ ସେକେଣ୍ଡ ଦେଖାନ୍ତୁ"</item> @@ -1249,7 +1257,7 @@ <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"ଅଡିଓ ଆଉଟପୁଟ ପାଇଁ ଉପଲବ୍ଧ ଡିଭାଇସଗୁଡ଼ିକ।"</string> <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"ଭଲ୍ୟୁମ"</string> <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string> - <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ସ୍ପିକର ଏବଂ ଡିସପ୍ଲେଗୁଡ଼ିକ"</string> + <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ସ୍ପିକର ଏବଂ ଡିସପ୍ଲେ"</string> <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ପ୍ରସ୍ତାବିତ ଡିଭାଇସଗୁଡ଼ିକ"</string> <string name="media_input_group_title" msgid="2057057473860783021">"ଇନପୁଟ"</string> <string name="media_output_group_title" msgid="6789001895863332576">"ଆଉଟପୁଟ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index c7735a21b25b..98d56e34a6b0 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"\'ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ\' \'ਤੇ ਕਲਿੱਕ ਕਰੋ"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ਪ੍ਰੀਸੈੱਟ ਨੂੰ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ਪ੍ਰੀਸੈੱਟ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ਚੁਣਿਆ ਗਿਆ"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"ਆਲੇ-ਦੁਆਲੇ"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ਖੱਬੇ"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ਕਿਸੇ ਐਪ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਦੌਰਾਨ, ਉਸ ਐਪ \'ਤੇ ਦਿਖ ਰਹੀ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨੂੰ ਦਿਖਣਯੋਗ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਵਾਸਤੇ ਸਾਵਧਾਨ ਰਹੋ।"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ਸਕ੍ਰੀਨ ਸਾਂਝੀ ਕਰੋ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਨੇ ਇਸ ਵਿਕਲਪ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ਸਾਂਝਾ ਕਰਨ ਲਈ ਐਪ ਚੁਣੋ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ਕੀ ਸਕ੍ਰੀਨ ਨੂੰ ਕਾਸਟ ਕਰਨਾ ਹੈ?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ਇੱਕ ਐਪ ਨੂੰ ਕਾਸਟ ਕਰੋ"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"ਸਮਾਂ"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"ਘੰਟੇ, ਮਿੰਟ, ਅਤੇ ਸਕਿੰਟ ਦਿਖਾਓ"</item> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 7c490736651c..cdf30a992f49 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknij, aby sparować nowe urządzenie"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Nie udało się zaktualizować gotowego ustawienia"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Gotowe ustawienie"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Wybrano"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Otoczenie"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Po lewej"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kiedy udostępniasz obraz z aplikacji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, widoczne jest wszystko to, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Udostępnij ekran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ma wyłączoną tę opcję"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Wybierz aplikację do udostępniania"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Włączyć przesyłanie treści z ekranu?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Przesyłanie obrazu z 1 aplikacji"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Przeciągnij tutaj, by usunąć"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimalna liczba kafelków to <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Edytuj"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Godzina"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Pokazuj godziny, minuty i sekundy"</item> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 40b85cc0da14..d9bbaf064da1 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Não foi possível atualizar a predefinição"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Predefinição"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selecionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Som ambiente"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Lado esquerdo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quando você compartilha um aplicativo, todas as informações mostradas ou abertas nele ficam visíveis para o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Compartilhar tela"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> desativou essa opção"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Escolha um app para compartilhar"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Transmitir a tela?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmitir um app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arraste aqui para remover"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"É preciso haver pelo menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> blocos"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Horas"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos e segundos"</item> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 934c7176d4a3..913f5b3be8bd 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para sincronizar um novo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Não foi possível atualizar a predefinição"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Predefinição"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selecionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ambiente"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Esquerda"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quando está a partilhar uma app, tudo o que é mostrado ou reproduzido nessa app é visível para a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Partilhar ecrã"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> desativou esta opção"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Escolha uma app para partilhar"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Transmitir o ecrã?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmitir uma app"</string> @@ -794,8 +800,7 @@ <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"Ativada – Com base no rosto"</string> <string name="inline_done_button" msgid="6043094985588909584">"Concluído"</string> <string name="inline_ok_button" msgid="603075490581280343">"Aplicar"</string> - <!-- no translation found for inline_turn_off_notifications (2653064779176881329) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="2653064779176881329">"Desativar"</string> <string name="notification_silence_title" msgid="8608090968400832335">"Silencioso"</string> <string name="notification_alert_title" msgid="3656229781017543655">"Predefinição"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"Automática"</string> @@ -980,6 +985,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastar para aqui para remover"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Necessita de, pelo menos, <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> cartões"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Hora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos e segundos"</item> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 40b85cc0da14..d9bbaf064da1 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Não foi possível atualizar a predefinição"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Predefinição"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selecionado"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Som ambiente"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Lado esquerdo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quando você compartilha um aplicativo, todas as informações mostradas ou abertas nele ficam visíveis para o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Compartilhar tela"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> desativou essa opção"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Escolha um app para compartilhar"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Transmitir a tela?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmitir um app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arraste aqui para remover"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"É preciso haver pelo menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> blocos"</string> <string name="qs_edit" msgid="5583565172803472437">"Editar"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Horas"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Mostrar horas, minutos e segundos"</item> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 3f8324e3b7f3..906ee09405c3 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Dă clic pentru a asocia un nou dispozitiv"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Nu s-a putut actualiza presetarea"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Presetare"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Selectat"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Împrejurimi"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Stânga"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Când permiți accesul la o aplicație, orice conținut se afișează sau se redă în aplicație este vizibil pentru <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Permite accesul la ecran"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> a dezactivat această opțiune"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Alege aplicația de trimis"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Proiectezi ecranul?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Proiectează o aplicație"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Trage aici pentru a elimina"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Ai nevoie de cel puțin <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> carduri"</string> <string name="qs_edit" msgid="5583565172803472437">"Editează"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Oră"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Afișează orele, minutele și secundele"</item> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 450d048da5bf..ee9d755088ed 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Нажмите, чтобы подключить новое устройство"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Не удалось обновить набор настроек."</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Набор настроек"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Выбрано"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Окружающие звуки"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Левый"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"При показе приложения все, что в нем происходит, будет видно в приложении \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\". Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Показать экран"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" отключило эту возможность"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Выбор приложения для демонстрации"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Начать трансляцию экрана?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Транслировать одно приложение"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Время"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Часы, минуты и секунды"</item> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index c6326f27c478..583d8842b189 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"නව උපාංගය යුගල කිරීමට ක්ලික් කරන්න"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"පෙර සැකසීම යාවත්කාලීන කළ නොහැකි විය"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"පෙරසැකසුම"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"තෝරන ලදි"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"වටපිටාව"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"වම"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ඔබ යෙදුමක් බෙදා ගන්නා විට, එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයක් <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> වෙත දෘශ්යමාන වේ. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවිඩ, ඡායාරූප, සහ ශ්රව්ය සහ දෘශ්ය වැනි දේවල් පිළිබඳ ප්රවේශම් වන්න."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"තිරය බෙදා ගන්න"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> මෙම විකල්පය අබල කර ඇත"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"බෙදා ගැනීමට යෙදුම තෝරන්න"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ඔබේ තිරය විකාශය කරන්න ද?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"එක් යෙදුමක් විකාශය කරන්න"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"වේලාව"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"පැය, මිනිත්තු, සහ තත්පර පෙන්වන්න"</item> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index fe1dbbd926d1..206e10c6245d 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zariadenie"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Predvoľbu sa nepodarilo aktualizovať"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Predvoľba"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Vybrané"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okolie"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vľavo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Pri zdieľaní aplikácie vidí aplikácia <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> všetko, čo sa v zdieľanej aplikácii zobrazuje alebo prehráva. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Zdieľať obrazovku"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> túto možnosť zakázala"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Vyberte aplikáciu, do ktorej chcete zdieľať"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Chcete prenášať obrazovku?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Prenášať jednu aplikáciu"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Presunutím sem odstránite"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimálny počet vyžadovaných dlaždíc: <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Upraviť"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Čas"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Zobrazovať hodiny, minúty a sekundy"</item> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 22d21bc47731..1c1ff03c3dcf 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite za seznanitev nove naprave"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Prednastavljenih vrednosti ni bilo mogoče posodobiti"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Prednastavljeno"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Izbrano"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Okolica"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Levo"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Pri deljenju aplikacije je aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vidno vse, kar je prikazano ali predvajano v tej aplikaciji. Zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Deli zaslon"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogočila to možnost"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Izbira aplikacije za deljenje"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Želite predvajati vsebino zaslona?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Predvajanje ene aplikacije"</string> @@ -794,8 +800,7 @@ <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"Vklopljeno – na podlagi obraza"</string> <string name="inline_done_button" msgid="6043094985588909584">"Končano"</string> <string name="inline_ok_button" msgid="603075490581280343">"Uporabi"</string> - <!-- no translation found for inline_turn_off_notifications (2653064779176881329) --> - <skip /> + <string name="inline_turn_off_notifications" msgid="2653064779176881329">"Izklopi"</string> <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> @@ -980,6 +985,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Če želite odstraniti, povlecite sem"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Imeti morate vsaj toliko ploščic: <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Uredi"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ura"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Prikaži ure, minute in sekunde"</item> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 203b9faa6730..c68e7a81a02c 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliko për të çiftuar një pajisje të re"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Paravendosja nuk mund të përditësohej"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Paravendosja"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Zgjedhur"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Ambienti rrethues"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Majtas"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kur ti ndan një aplikacion, çdo gjë që shfaqet ose luhet në atë aplikacion është e dukshme për <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ndaj ekranin"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> e ka çaktivizuar këtë opsion"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Zgjidh aplikacionin për të ndarë"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Të transmetohet ekrani yt?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Transmeto një aplikacion"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Zvarrit këtu për ta hequr"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Të duhen të paktën <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> pllakëza"</string> <string name="qs_edit" msgid="5583565172803472437">"Redakto"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Ora"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Shfaq orët, minutat dhe sekondat"</item> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 97ca62a420c3..46d83528114f 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликните да бисте упарили нов уређај"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ажурирање задатих подешавања није успело"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Унапред одређена подешавања"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Изабрано"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Окружење"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Лево"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Када делите апликацију, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> види сав садржај који се приказује или пушта у њој. Зато пазите на лозинке, информације о плаћању, поруке, слике, аудио и видео садржај."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Дели екран"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је онемогућила ову опцију"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Одаберите апликацију за дељење"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Желите да пребаците екран?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Пребаци једну апликацију"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Време"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Прикажи сате, минуте и секунде"</item> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 4cdc37d72176..ed0daf9da04b 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicka för att parkoppla en ny enhet"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Det gick inte att uppdatera förinställningen"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Förinställning"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Markerad"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgivningsläge"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Vänster"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"När du delar en app är allt som visas eller spelas upp i appen synligt för <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton, ljud och video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Dela skärmen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inaktiverat alternativet"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Välj en app att dela"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Vill du casta skärmen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Casta en app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Ta bort genom att dra här"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minst <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> rutor måste finnas kvar"</string> <string name="qs_edit" msgid="5583565172803472437">"Redigera"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Tid"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Visa timmar, minuter och sekunder"</item> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 1cb61fdbab01..da390fb459ac 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Bofya ili uunganishe kifaa kipya"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Imeshindwa kusasisha mipangilio iliyowekwa mapema"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Mipangilio iliyowekwa mapema"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Umechagua"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Mazingira"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kushoto"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Unaporuhusu ufikiaji wa programu, chochote kinachoonyeshwa au kuchezwa katika programu hiyo kitaonekana kwa <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha, sauti na video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ruhusu ufikiaji wa skrini"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> imezima chaguo hili"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Chagua programu utakayoruhusu ifikiwe"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Ungependa kutuma maudhui yaliyo katika skrini yako?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Tuma maudhui ya programu moja"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Buruta hapa ili uondoe"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Unahitaji angalau vigae <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Badilisha"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Wakati"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Onyesha saa, dakika na sekunde"</item> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 3109a13290af..0c7aa40868cb 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"புதிய சாதனத்தை இணைக்க கிளிக் செய்யலாம்"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"முன்னமைவைப் புதுப்பிக்க முடியவில்லை"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"முன்னமைவு"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"தேர்ந்தெடுக்கப்பட்டது"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"சுற்றுப்புறங்கள்"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"இடது"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ஓர் ஆப்ஸைப் பகிரும்போது, அதில் காட்டப்படும்/பிளே செய்யப்படும் அனைத்தும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> இல் தெரியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"திரையைப் பகிர்"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் இந்த விருப்பத்தை முடக்கியுள்ளது"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"பகிர ஆப்ஸைத் தேர்வுசெய்க"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"உங்கள் திரையை அலைபரப்ப வேண்டுமா?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ஓர் ஆப்ஸை அலைபரப்பு"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"நேரம்"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"மணிநேரம், நிமிடங்கள், வினாடிகளைக் காட்டு"</item> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 1bf3ab2e913f..972c64ab7f26 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"కొత్త పరికరాన్ని పెయిర్ చేయడానికి క్లిక్ చేయండి"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ప్రీసెట్ను అప్డేట్ చేయడం సాధ్యపడలేదు"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ప్రీసెట్"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"ఎంచుకోబడింది"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"పరిసరాలు"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ఎడమ వైపునకు"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"మీరు యాప్ను షేర్ చేసేటప్పుడు, సంబంధిత యాప్లో కనిపించేవి లేదా ప్లే అయ్యేవన్నీ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>కు కనిపిస్తాయి. కాబట్టి పాస్వర్డ్లు, పేమెంట్ వివరాలు, మెసేజ్లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"స్క్రీన్ను షేర్ చేయండి"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ఈ ఆప్షన్ను డిజేబుల్ చేసింది"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"షేర్ చేయడానికి యాప్ను ఎంచుకోండి"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"మీ స్క్రీన్ను ప్రసారం చేయాలా?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ఒక యాప్ను ప్రసారం చేయండి"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"సమయం"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"గంటలు, నిమిషాలు మరియు సెకన్లను చూపు"</item> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 99aca811b873..a4f14473e004 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"คลิกเพื่อจับคู่อุปกรณ์ใหม่"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"ไม่สามารถอัปเดตค่าที่กำหนดล่วงหน้า"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"ค่าที่กำหนดล่วงหน้า"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"เลือกแล้ว"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"เสียงแวดล้อม"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"ซ้าย"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"เมื่อกำลังแชร์แอป <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะมองเห็นทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"แชร์หน้าจอ"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ปิดใช้ตัวเลือกนี้"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"เลือกแอปที่จะแชร์"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"แคสต์หน้าจอของคุณไหม"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"แคสต์แอปเดียว"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"เวลา"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"แสดงชั่วโมง นาที และวินาที"</item> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 726cf21e84e4..1f251758db94 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"I-click para magpares ng bagong device"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Hindi ma-update ang preset"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Preset"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Napili"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Paligid"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kaliwa"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kapag nagshe-share ka ng app, makikita ng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ang kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ibahagi ang screen"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Na-disable ng <xliff:g id="APP_NAME">%1$s</xliff:g> ang opsyong ito"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pumili ng app na ishe-share"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"I-cast ang iyong screen?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Mag-cast ng isang app"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"I-drag dito upang alisin"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Kailangan mo ng kahit <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> (na) tile"</string> <string name="qs_edit" msgid="5583565172803472437">"I-edit"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Oras"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Ipakita ang oras, minuto at segundo"</item> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index a68bc74df470..4748cc4dad54 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz eşlemek için tıklayın"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Hazır ayar güncellenemedi"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Hazır Ayar"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Seçili"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Çevredeki sesler"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Sol"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, bir uygulamayı paylaştığınızda o uygulamada gösterilen veya oynatılan her şeyi görebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ekranı paylaş"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu seçeneği devre dışı bıraktı"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Paylaşılacak uygulamayı seçin"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Ekranınız yayınlansın mı?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"1 uygulamayı yayınla"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Kaldırmak için buraya sürükleyin"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"En az <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> kutu gerekiyor"</string> <string name="qs_edit" msgid="5583565172803472437">"Düzenle"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Saat"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Saati, dakikayı ve saniyeyi göster"</item> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 2e0229393897..d89467cf5e23 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Натисніть, щоб підключити новий пристрій"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Не вдалось оновити набір налаштувань"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Набір налаштувань"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Вибрано"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Звуки оточення"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Ліворуч"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Коли ви показуєте вікно додатка, увесь контент, що відображається або відтворюється в ньому, стає видимим у додатку <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Тому будьте обережні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Показати екран"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> вимкнув цю опцію"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Виберіть додаток для показу"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Транслювати екран?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Транслювати один додаток"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Час"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Показувати години, хвилини та секунди"</item> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index c5a96096a86b..51950e099640 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"نئے آلے کا جوڑا بنانے کے لیے کلک کریں"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"پہلے سے ترتیب شدہ کو اپ ڈیٹ نہیں کیا جا سکا"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"پہلے سے ترتیب شدہ"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"منتخب کردہ"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"اطراف"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"دائیں"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"آپ کے کسی ایپ کا اشتراک کرنے پر اس ایپ میں دکھائی گئی یا چلائی گئی ہر چیز <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کیلئے مرئی ہو جاتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"اسکرین کا اشتراک کریں"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> نے اس اختیار کو غیر فعال کر دیا ہے"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"اشتراک کرنے کیلئے ایپ منتخب کریں"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"اپنی اسکرین کاسٹ کریں؟"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ایک ایپ کاسٹ کریں"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"وقت"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"گھنٹے، منٹ اور سیکنڈ دکھائیں"</item> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index fee0eb9c5473..8d750dd8ad08 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yangi qurilmani ulash uchun bosing"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Andoza yangilanmadi"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Andoza"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Tanlangan"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Atrof-muhit"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Chap"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Ilovani namoyish qilayotganingizda oʻsha ilova ichida koʻrsatilayotgan yoki ijro qilinayotganlar <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ga koʻrinadi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ekranni namoyish qilish"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu sozlamani faolsizlantirgan"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Ulashiladigan ilovani tanlash"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Ekraningiz uzatilsinmi?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Bitta ilovani uzatish"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"O‘chirish uchun bu yerga torting"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Kamida <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> ta katakcha lozim"</string> <string name="qs_edit" msgid="5583565172803472437">"Tahrirlash"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Vaqt"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Soat, daqiqa va soniyalar ko‘rsatilsin"</item> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index c79eef76e6e4..300dea9bb021 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Nhấp để ghép nối thiết bị mới"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Không cập nhật được giá trị đặt trước"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Chế độ đặt sẵn"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Đã chọn"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Âm lượng xung quanh"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Trái"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Khi bạn chia sẻ một ứng dụng, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ thấy được mọi nội dung hiển thị hoặc phát trong ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Chia sẻ màn hình"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> đã tắt lựa chọn này"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Chọn ứng dụng để chia sẻ"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Truyền màn hình?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Truyền một ứng dụng"</string> @@ -980,6 +986,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Kéo vào đây để xóa"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Bạn cần ít nhất <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> ô"</string> <string name="qs_edit" msgid="5583565172803472437">"Chỉnh sửa"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Thời gian"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Hiển thị giờ, phút và giây"</item> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index f0f55a827930..dacca692fb65 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"点击即可与新设备配对"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"无法更新预设"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"预设"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"已选择"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"周围声音"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"左侧"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"当您共享一个应用时,该应用中显示或播放的所有内容均对“<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>”可见。因此,请务必小心操作,谨防泄露密码、付款信息、消息、照片、音频、视频等。"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"共享屏幕"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”已停用此选项"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"选择要分享的应用"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"投放您的屏幕?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"投放单个应用"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"时间"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"显示小时、分钟和秒"</item> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index caac7437b4e0..afc33d9611b9 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"㩒一下就可以配對新裝置"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"無法更新預設"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"預設"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"揀咗"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"環境聲音"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"左"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"當你分享應用程式時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可看到該應用程式中顯示或播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"分享螢幕畫面"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已停用此選項"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"選擇要分享的應用程式"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"要投放螢幕嗎?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"投放一個應用程式"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"時間"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"顯示小時、分鐘和秒"</item> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index d3a5544ac694..3ea590a17188 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -419,6 +419,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"按一下即可配對新裝置"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"無法更新預設設定"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"預設"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"已選取"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"環境"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"左"</string> @@ -582,6 +586,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"當你分享應用程式畫面時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可存取該應用程式顯示或播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"分享畫面"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已停用此選項"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"選擇要分享的應用程式"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"要投放畫面嗎?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"投放一個應用程式"</string> @@ -980,6 +986,8 @@ <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> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"時間"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"顯示小時、分鐘和秒"</item> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 08657d1bfe54..767adbb25c25 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -421,6 +421,10 @@ <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Chofoza ukuze ubhangqe idivayisi entsha"</string> <string name="hearing_devices_presets_error" msgid="350363093458408536">"Ayikwazanga ukubuyekeza ukusetha ngaphambilini"</string> <string name="hearing_devices_preset_label" msgid="7878267405046232358">"Ukusetha ngaphambilini"</string> + <!-- no translation found for hearing_devices_input_routing_label (730396728151232306) --> + <skip /> + <!-- no translation found for hearing_device_input_routing_options:0 (4582190415045337003) --> + <!-- no translation found for hearing_device_input_routing_options:1 (8501466270452446450) --> <string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Okukhethiwe"</string> <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Izindawo ezizungezile"</string> <string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Kwesokunxele"</string> @@ -584,6 +588,8 @@ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Uma wabelana nge-app, noma yini eboniswayo noma edlalwayo kuleyo app ibonakala ku-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yenkokhelo, imilayezo, izithombe, nomsindo nevidiyo."</string> <string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Yabelana ngesikrini"</string> <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ivale le nketho"</string> + <!-- no translation found for media_projection_entry_app_permission_dialog_single_app_not_supported (4860247304058870233) --> + <skip /> <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Khetha i-app yokwabelana"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Sakaza isikrini sakho?"</string> <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Sakaza i-app eyodwa"</string> @@ -982,6 +988,8 @@ <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Hudulela lapha ukuze ususe"</string> <string name="drag_to_remove_disabled" msgid="933046987838658850">"Udinga okungenani amathayela angu-<xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string> <string name="qs_edit" msgid="5583565172803472437">"Hlela"</string> + <!-- no translation found for qs_edit_tiles (2105215324060865035) --> + <skip /> <string name="tuner_time" msgid="2450785840990529997">"Isikhathi"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"Bonisa amahora, amaminithi, namasekhondi"</item> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 7895ff7b90f6..a479f1841ca4 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -19,7 +19,8 @@ <style name="TextAppearance.StatusBar.Clock" parent="@*android:style/TextAppearance.StatusBar.Icon"> <item name="android:textSize">@dimen/status_bar_clock_size</item> - <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item> + <item name="android:fontFamily" android:featureFlag="!com.android.systemui.status_bar_font_updates">@*android:string/config_headlineFontFamilyMedium</item> + <item name="android:fontFamily" android:featureFlag="com.android.systemui.status_bar_font_updates">"variable-label-large-emphasized"</item> <item name="android:textColor">@color/status_bar_clock_color</item> <item name="android:fontFeatureSettings">tnum</item> </style> diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index 089466707298..d017754ae653 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -778,18 +778,26 @@ public class SwipeHelper implements Gefingerpoken, Dumpable { protected boolean swipedFarEnough() { float translation = getTranslation(mTouchedView); - return Math.abs(translation) > SWIPED_FAR_ENOUGH_SIZE_FRACTION * getSize( - mTouchedView); + return Math.abs(translation) > SWIPED_FAR_ENOUGH_SIZE_FRACTION * getSize(mTouchedView); } public boolean isDismissGesture(MotionEvent ev) { float translation = getTranslation(mTouchedView); return ev.getActionMasked() == MotionEvent.ACTION_UP && !mFalsingManager.isUnlockingDisabled() - && !isFalseGesture() && (swipedFastEnough() || swipedFarEnough()) + && !isFalseGesture() && isSwipeDismissible() && mCallback.canChildBeDismissedInDirection(mTouchedView, translation > 0); } + /** Can the swipe gesture on the touched view be considered as a dismiss intention */ + public boolean isSwipeDismissible() { + if (magneticNotificationSwipes()) { + return mCallback.isMagneticViewDetached(mTouchedView) || swipedFastEnough(); + } else { + return swipedFastEnough() || swipedFarEnough(); + } + } + /** Returns true if the gesture should be rejected. */ public boolean isFalseGesture() { boolean falsingDetected = mCallback.isAntiFalsingNeeded(); @@ -970,6 +978,13 @@ public class SwipeHelper implements Gefingerpoken, Dumpable { void onMagneticInteractionEnd(View view, float velocity); /** + * Determine if a view managed by magnetic interactions is magnetically detached + * @param view The magnetic view + * @return if the view is detached according to its magnetic state. + */ + boolean isMagneticViewDetached(View view); + + /** * Called when the child is long pressed and available to start drag and drop. * * @param v the view that was long pressed. diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java index 14b13d105482..24b955152093 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java @@ -286,7 +286,9 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate, mLaunchSourceId); final Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_DETAILS_SETTINGS) .putExtra(Intent.EXTRA_COMPONENT_NAME, - ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()); + ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString()) + .setPackage(mQSSettingsPackageRepository.getSettingsPackageName()); + mActivityStarter.postStartActivityDismissingKeyguard(intent, /* delay= */ 0, mDialogTransitionAnimator.createActivityTransitionController( dialog)); @@ -588,9 +590,7 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate, com.android.internal.R.color.materialColorOnPrimaryContainer)); } text.setText(item.getToolName()); - Intent intent = item.getToolIntent() - .setPackage(mQSSettingsPackageRepository.getSettingsPackageName()); - + Intent intent = item.getToolIntent(); view.setOnClickListener(v -> { final String name = intent.getComponent() != null ? intent.getComponent().flattenToString() diff --git a/packages/SystemUI/src/com/android/systemui/dagger/PerDisplayRepositoriesModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/PerDisplayRepositoriesModule.kt index 3520439fda88..a8f21885907b 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/PerDisplayRepositoriesModule.kt +++ b/packages/SystemUI/src/com/android/systemui/dagger/PerDisplayRepositoriesModule.kt @@ -19,6 +19,7 @@ package com.android.systemui.dagger import com.android.app.displaylib.DefaultDisplayOnlyInstanceRepositoryImpl import com.android.app.displaylib.PerDisplayInstanceRepositoryImpl import com.android.app.displaylib.PerDisplayRepository +import com.android.systemui.display.data.repository.PerDisplayCoroutineScopeRepositoryModule import com.android.systemui.model.SysUIStateInstanceProvider import com.android.systemui.model.SysUiState import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround @@ -26,7 +27,7 @@ import dagger.Module import dagger.Provides /** This module is meant to contain all the code to create the various [PerDisplayRepository<>]. */ -@Module +@Module(includes = [PerDisplayCoroutineScopeRepositoryModule::class]) class PerDisplayRepositoriesModule { @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/display/DisplayModule.kt b/packages/SystemUI/src/com/android/systemui/display/DisplayModule.kt index 908d0aafb2b9..32b69e5423ba 100644 --- a/packages/SystemUI/src/com/android/systemui/display/DisplayModule.kt +++ b/packages/SystemUI/src/com/android/systemui/display/DisplayModule.kt @@ -29,10 +29,10 @@ import com.android.systemui.display.data.repository.DeviceStateRepository import com.android.systemui.display.data.repository.DeviceStateRepositoryImpl import com.android.systemui.display.data.repository.DisplayRepository import com.android.systemui.display.data.repository.DisplayRepositoryImpl -import com.android.systemui.display.data.repository.DisplayScopeRepository -import com.android.systemui.display.data.repository.DisplayScopeRepositoryImpl import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepository import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepositoryImpl +import com.android.systemui.display.data.repository.DisplaysWithDecorationsRepository +import com.android.systemui.display.data.repository.DisplaysWithDecorationsRepositoryImpl import com.android.systemui.display.data.repository.FocusedDisplayRepository import com.android.systemui.display.data.repository.FocusedDisplayRepositoryImpl import com.android.systemui.display.data.repository.PerDisplayRepoDumpHelper @@ -76,14 +76,17 @@ interface DisplayModule { focusedDisplayRepository: FocusedDisplayRepositoryImpl ): FocusedDisplayRepository - @Binds fun displayScopeRepository(impl: DisplayScopeRepositoryImpl): DisplayScopeRepository - @Binds fun displayWindowPropertiesRepository( impl: DisplayWindowPropertiesRepositoryImpl ): DisplayWindowPropertiesRepository @Binds + fun displaysWithDecorationsRepository( + impl: DisplaysWithDecorationsRepositoryImpl + ): DisplaysWithDecorationsRepository + + @Binds fun dumpRegistrationLambda(helper: PerDisplayRepoDumpHelper): PerDisplayRepository.InitCallback @Binds @@ -94,20 +97,6 @@ interface DisplayModule { @Provides @SysUISingleton @IntoMap - @ClassKey(DisplayScopeRepositoryImpl::class) - fun displayScopeRepoCoreStartable( - repoImplLazy: Lazy<DisplayScopeRepositoryImpl> - ): CoreStartable { - return if (StatusBarConnectedDisplays.isEnabled) { - repoImplLazy.get() - } else { - CoreStartable.NOP - } - } - - @Provides - @SysUISingleton - @IntoMap @ClassKey(DisplayWindowPropertiesRepository::class) fun displayWindowPropertiesRepoAsCoreStartable( repoLazy: Lazy<DisplayWindowPropertiesRepositoryImpl> diff --git a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt index 051fe7e5517c..01bbf2d57dd6 100644 --- a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt @@ -16,95 +16,25 @@ package com.android.systemui.display.data.repository -import android.annotation.SuppressLint -import android.view.IWindowManager import com.android.app.displaylib.DisplayRepository as DisplayRepositoryFromLib import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.dagger.qualifiers.Background -import com.android.systemui.statusbar.CommandQueue import javax.inject.Inject -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.merge -import kotlinx.coroutines.flow.scan -import kotlinx.coroutines.flow.stateIn -/** Repository for providing access to display related information and events. */ -interface DisplayRepository : DisplayRepositoryFromLib { - - /** A [StateFlow] that maintains a set of display IDs that should have system decorations. */ - val displayIdsWithSystemDecorations: StateFlow<Set<Int>> -} +/** + * Repository for providing access to display related information and events. + * + * This is now just an interface that extends [DisplayRepositoryFromLib] to avoid changing all the + * imports in sysui using this interface. + */ +interface DisplayRepository : DisplayRepositoryFromLib, DisplaysWithDecorationsRepository @SysUISingleton -@SuppressLint("SharedFlowCreation") class DisplayRepositoryImpl @Inject constructor( - private val commandQueue: CommandQueue, - private val windowManager: IWindowManager, - @Background bgApplicationScope: CoroutineScope, private val displayRepositoryFromLib: com.android.app.displaylib.DisplayRepository, -) : DisplayRepositoryFromLib by displayRepositoryFromLib, DisplayRepository { - - private val decorationEvents: Flow<Event> = callbackFlow { - val callback = - object : CommandQueue.Callbacks { - override fun onDisplayAddSystemDecorations(displayId: Int) { - trySend(Event.Add(displayId)) - } - - override fun onDisplayRemoveSystemDecorations(displayId: Int) { - trySend(Event.Remove(displayId)) - } - } - commandQueue.addCallback(callback) - awaitClose { commandQueue.removeCallback(callback) } - } - - private val initialDisplayIdsWithDecorations: Set<Int> = - displayIds.value.filter { windowManager.shouldShowSystemDecors(it) }.toSet() - - /** - * A [StateFlow] that maintains a set of display IDs that should have system decorations. - * - * Updates to the set are triggered by: - * - Adding displays via [CommandQueue.Callbacks.onDisplayAddSystemDecorations]. - * - Removing displays via [CommandQueue.Callbacks.onDisplayRemoveSystemDecorations]. - * - Removing displays via [displayRemovalEvent] emissions. - * - * The set is initialized with displays that qualify for system decorations based on - * [WindowManager.shouldShowSystemDecors]. - */ - override val displayIdsWithSystemDecorations: StateFlow<Set<Int>> = - merge(decorationEvents, displayRemovalEvent.map { Event.Remove(it) }) - .scan(initialDisplayIdsWithDecorations) { displayIds: Set<Int>, event: Event -> - when (event) { - is Event.Add -> displayIds + event.displayId - is Event.Remove -> displayIds - event.displayId - } - } - .distinctUntilChanged() - .stateIn( - scope = bgApplicationScope, - started = SharingStarted.WhileSubscribed(), - initialValue = initialDisplayIdsWithDecorations, - ) - - private sealed class Event(val displayId: Int) { - class Add(displayId: Int) : Event(displayId) - - class Remove(displayId: Int) : Event(displayId) - } - - private companion object { - const val TAG = "DisplayRepository" - } -} + private val displaysWithDecorationsRepositoryImpl: DisplaysWithDecorationsRepository, +) : + DisplayRepositoryFromLib by displayRepositoryFromLib, + DisplaysWithDecorationsRepository by displaysWithDecorationsRepositoryImpl, + DisplayRepository diff --git a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayScopeRepository.kt b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayScopeRepository.kt index d912b6a13d0f..ac59b16bfe3c 100644 --- a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayScopeRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayScopeRepository.kt @@ -17,60 +17,58 @@ package com.android.systemui.display.data.repository import android.view.Display -import com.android.systemui.CoreStartable +import com.android.app.displaylib.PerDisplayInstanceProviderWithTeardown +import com.android.app.displaylib.PerDisplayInstanceRepositoryImpl +import com.android.app.displaylib.PerDisplayRepository import com.android.systemui.coroutines.newTracingContext import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background -import com.android.systemui.statusbar.core.StatusBarConnectedDisplays -import java.util.concurrent.ConcurrentHashMap +import dagger.Module +import dagger.Provides import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel -import com.android.app.tracing.coroutines.launchTraced as launch /** - * Provides per display instances of [CoroutineScope]. These will remain active as long as the - * display is connected, and automatically cancelled when the display is removed. + * Provides per display instances of [CoroutineScope]. + * + * This is used to create a [PerDisplayRepository] of [CoroutineScope] */ -interface DisplayScopeRepository { - fun scopeForDisplay(displayId: Int): CoroutineScope -} - @SysUISingleton -class DisplayScopeRepositoryImpl +class DisplayScopeRepositoryInstanceProvider @Inject constructor( @Background private val backgroundApplicationScope: CoroutineScope, @Background private val backgroundDispatcher: CoroutineDispatcher, - private val displayRepository: DisplayRepository, -) : DisplayScopeRepository, CoreStartable { - - private val perDisplayScopes = ConcurrentHashMap<Int, CoroutineScope>() - - override fun scopeForDisplay(displayId: Int): CoroutineScope { - return perDisplayScopes.computeIfAbsent(displayId) { createScopeForDisplay(displayId) } - } - - override fun start() { - StatusBarConnectedDisplays.unsafeAssertInNewMode() - backgroundApplicationScope.launch { - displayRepository.displayRemovalEvent.collect { displayId -> - val scope = perDisplayScopes.remove(displayId) - scope?.cancel("Display $displayId has been removed.") - } - } - } +) : PerDisplayInstanceProviderWithTeardown<CoroutineScope> { - private fun createScopeForDisplay(displayId: Int): CoroutineScope { + override fun createInstance(displayId: Int): CoroutineScope { return if (displayId == Display.DEFAULT_DISPLAY) { // The default display is connected all the time, therefore we can optimise by reusing // the application scope, and don't need to create a new scope. backgroundApplicationScope } else { - CoroutineScope( - backgroundDispatcher + newTracingContext("DisplayScope$displayId") - ) + CoroutineScope(backgroundDispatcher + newTracingContext("DisplayScope$displayId")) } } + + override fun destroyInstance(instance: CoroutineScope) { + instance.cancel("DisplayContext has been cancelled.") + } +} + +@Module +object PerDisplayCoroutineScopeRepositoryModule { + @SysUISingleton + @Provides + fun provideDisplayCoroutineScopeRepository( + repositoryFactory: PerDisplayInstanceRepositoryImpl.Factory<CoroutineScope>, + instanceProvider: DisplayScopeRepositoryInstanceProvider, + ): PerDisplayRepository<CoroutineScope> { + return repositoryFactory.create( + debugName = "CoroutineScopePerDisplayRepo", + instanceProvider, + ) + } } diff --git a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplaysWithDecorationsRepository.kt b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplaysWithDecorationsRepository.kt new file mode 100644 index 000000000000..f4a2ed48f295 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplaysWithDecorationsRepository.kt @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.display.data.repository + +import android.view.IWindowManager +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Background +import com.android.systemui.statusbar.CommandQueue +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.merge +import kotlinx.coroutines.flow.scan +import kotlinx.coroutines.flow.stateIn + +/** Provides the displays with decorations. */ +interface DisplaysWithDecorationsRepository { + /** A [StateFlow] that maintains a set of display IDs that should have system decorations. */ + val displayIdsWithSystemDecorations: StateFlow<Set<Int>> +} + +@SysUISingleton +class DisplaysWithDecorationsRepositoryImpl +@Inject +constructor( + private val commandQueue: CommandQueue, + private val windowManager: IWindowManager, + @Background bgApplicationScope: CoroutineScope, + displayRepository: com.android.app.displaylib.DisplayRepository, +) : DisplaysWithDecorationsRepository { + + private val decorationEvents: Flow<Event> = callbackFlow { + val callback = + object : CommandQueue.Callbacks { + override fun onDisplayAddSystemDecorations(displayId: Int) { + trySend(Event.Add(displayId)) + } + + override fun onDisplayRemoveSystemDecorations(displayId: Int) { + trySend(Event.Remove(displayId)) + } + } + commandQueue.addCallback(callback) + awaitClose { commandQueue.removeCallback(callback) } + } + + private val initialDisplayIdsWithDecorations: Set<Int> = + displayRepository.displayIds.value + .filter { windowManager.shouldShowSystemDecors(it) } + .toSet() + + /** + * A [StateFlow] that maintains a set of display IDs that should have system decorations. + * + * Updates to the set are triggered by: + * - Adding displays via [CommandQueue.Callbacks.onDisplayAddSystemDecorations]. + * - Removing displays via [CommandQueue.Callbacks.onDisplayRemoveSystemDecorations]. + * - Removing displays via [displayRemovalEvent] emissions. + * + * The set is initialized with displays that qualify for system decorations based on + * [WindowManager.shouldShowSystemDecors]. + */ + override val displayIdsWithSystemDecorations: StateFlow<Set<Int>> = + merge(decorationEvents, displayRepository.displayRemovalEvent.map { Event.Remove(it) }) + .scan(initialDisplayIdsWithDecorations) { displayIds: Set<Int>, event: Event -> + when (event) { + is Event.Add -> displayIds + event.displayId + is Event.Remove -> displayIds - event.displayId + } + } + .distinctUntilChanged() + .stateIn( + scope = bgApplicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = initialDisplayIdsWithDecorations, + ) + + private sealed class Event(val displayId: Int) { + class Add(displayId: Int) : Event(displayId) + + class Remove(displayId: Int) : Event(displayId) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/display/data/repository/PerDisplayStore.kt b/packages/SystemUI/src/com/android/systemui/display/data/repository/PerDisplayStore.kt index 46048868f503..8756c8813df6 100644 --- a/packages/SystemUI/src/com/android/systemui/display/data/repository/PerDisplayStore.kt +++ b/packages/SystemUI/src/com/android/systemui/display/data/repository/PerDisplayStore.kt @@ -68,7 +68,7 @@ abstract class PerDisplayStoreImpl<T>( * displays. */ override fun forDisplay(displayId: Int): T? { - if (displayRepository.getDisplay(displayId) == null) { + if (displayRepository.getDisplay(displayId) == null) { Log.e(TAG, "<${instanceClass.simpleName}>: Display with id $displayId doesn't exist.") return null } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java index 9def81a89e3a..2b16e198b1b1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java @@ -18,7 +18,6 @@ package com.android.systemui.doze; import static com.android.systemui.doze.DozeMachine.State.DOZE; import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED; -import static com.android.systemui.Flags.dozeuiSchedulingAlarmsBackgroundExecution; import android.app.AlarmManager; import android.content.Context; @@ -84,13 +83,7 @@ public class DozeUi implements DozeMachine.Part { mBgExecutor = bgExecutor; mCanAnimateTransition = !params.getDisplayNeedsBlanking(); mDozeParameters = params; - if (dozeuiSchedulingAlarmsBackgroundExecution()) { - mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", - bgHandler); - } else { - mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", - handler); - } + mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", bgHandler); mDozeLog = dozeLog; } @@ -184,7 +177,7 @@ public class DozeUi implements DozeMachine.Part { mTimeTickScheduled = true; long time = System.currentTimeMillis(); - long delta = roundToNextMinute(time) - System.currentTimeMillis(); + long delta = roundToNextMinute(time) - time; boolean scheduled = mTimeTicker.schedule(delta, AlarmTimeout.MODE_RESCHEDULE_IF_SCHEDULED); if (scheduled) { mDozeLog.traceTimeTickScheduled(time, time + delta); @@ -224,14 +217,8 @@ public class DozeUi implements DozeMachine.Part { private void onTimeTick() { verifyLastTimeTick(); - if (dozeuiSchedulingAlarmsBackgroundExecution()) { - mHandler.post(mHost::dozeTimeTick); - } else { - mHost.dozeTimeTick(); - } - // Keep wakelock until a frame has been pushed. - mHandler.post(mWakeLock.wrap(() -> {})); + mHandler.post(mWakeLock.wrap(mHost::dozeTimeTick)); mTimeTickScheduled = false; scheduleTimeTick(); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 4755e2845587..6db2ebc0df2c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1744,6 +1744,9 @@ public class KeyguardViewMediator implements CoreStartable, mJavaAdapter.alwaysCollectFlow( mWallpaperRepository.getWallpaperSupportsAmbientMode(), this::setWallpaperSupportsAmbientMode); + mJavaAdapter.alwaysCollectFlow( + mKeyguardInteractor.getDozeTimeTick(), + this::triggerTimeUpdate); } @Override @@ -4056,6 +4059,10 @@ public class KeyguardViewMediator implements CoreStartable, mWallpaperSupportsAmbientMode = supportsAmbientMode; } + private void triggerTimeUpdate(long timeInMillis) { + mUpdateMonitor.triggerTimeUpdate(); + } + private static class StartKeyguardExitAnimParams { @WindowManager.TransitionOldType int mTransit; 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 237ec7cfce7f..6cda192c4198 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -22,6 +22,7 @@ import static android.view.MotionEvent.TOOL_TYPE_FINGER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; import static com.android.systemui.Flags.edgebackGestureHandlerGetRunningTasksBackground; +import static com.android.systemui.Flags.predictiveBackDelayWmTransition; import static com.android.systemui.classifier.Classifier.BACK_GESTURE; import static com.android.systemui.navigationbar.gestural.Utilities.isTrackpadThreeFingerSwipe; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TOUCHPAD_GESTURES_DISABLED; @@ -1182,6 +1183,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack return; } else if (dx > dy && dx > mTouchSlop) { if (mAllowGesture) { + if (!predictiveBackDelayWmTransition() && mBackAnimation != null) { + mBackAnimation.onThresholdCrossed(); + } if (mBackAnimation == null) { pilferPointers(); } @@ -1197,7 +1201,8 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack // forward touch mEdgeBackPlugin.onMotionEvent(ev); dispatchToBackAnimation(ev); - if (mBackAnimation != null && mThresholdCrossed && !mLastFrameThresholdCrossed) { + if (predictiveBackDelayWmTransition() && mBackAnimation != null + && mThresholdCrossed && !mLastFrameThresholdCrossed) { mBackAnimation.onThresholdCrossed(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index 2bacee12db8a..9940ae523b60 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -16,12 +16,15 @@ package com.android.systemui.statusbar +import android.annotation.SuppressLint import android.app.ActivityManager import android.content.res.Resources +import android.os.Build import android.os.SystemProperties import android.os.Trace import android.os.Trace.TRACE_TAG_APP import android.util.IndentingPrintWriter +import android.util.Log import android.util.MathUtils import android.view.CrossWindowBlurListeners import android.view.CrossWindowBlurListeners.CROSS_WINDOW_BLUR_SUPPORTED @@ -45,7 +48,7 @@ open class BlurUtils @Inject constructor( private val crossWindowBlurListeners: CrossWindowBlurListeners, dumpManager: DumpManager ) : Dumpable { - val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius).toFloat(); + val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius).toFloat() val maxBlurRadius = if (Flags.notificationShadeBlur()) { blurConfig.maxBlurRadiusPx } else { @@ -55,6 +58,9 @@ open class BlurUtils @Inject constructor( private var lastAppliedBlur = 0 private var earlyWakeupEnabled = false + /** When this is true, early wakeup flag is not reset on surface flinger when blur drops to 0 */ + private var persistentEarlyWakeupRequired = false + init { dumpManager.registerDumpable(this) } @@ -91,11 +97,8 @@ open class BlurUtils @Inject constructor( return } if (lastAppliedBlur == 0 && radius != 0) { - Trace.asyncTraceForTrackBegin( - TRACE_TAG_APP, TRACK_NAME, "eEarlyWakeup (prepareBlur)", 0) - earlyWakeupEnabled = true createTransaction().use { - it.setEarlyWakeupStart() + earlyWakeupStart(it, "eEarlyWakeup (prepareBlur)") it.apply() } } @@ -116,19 +119,15 @@ open class BlurUtils @Inject constructor( if (shouldBlur(radius)) { it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) if (!earlyWakeupEnabled && lastAppliedBlur == 0 && radius != 0) { - Trace.asyncTraceForTrackBegin( - TRACE_TAG_APP, - TRACK_NAME, - "eEarlyWakeup (applyBlur)", - 0 - ) - it.setEarlyWakeupStart() - earlyWakeupEnabled = true + earlyWakeupStart(it, "eEarlyWakeup (applyBlur)") } - if (earlyWakeupEnabled && lastAppliedBlur != 0 && radius == 0) { - it.setEarlyWakeupEnd() - Trace.asyncTraceForTrackEnd(TRACE_TAG_APP, TRACK_NAME, 0) - earlyWakeupEnabled = false + if ( + earlyWakeupEnabled && + lastAppliedBlur != 0 && + radius == 0 && + !persistentEarlyWakeupRequired + ) { + earlyWakeupEnd(it, "applyBlur") } lastAppliedBlur = radius } @@ -137,6 +136,26 @@ open class BlurUtils @Inject constructor( } } + private fun v(verboseLog: String) { + if (isLoggable) Log.v(TAG, verboseLog) + } + + @SuppressLint("MissingPermission") + private fun earlyWakeupStart(transaction: SurfaceControl.Transaction, traceMethodName: String) { + v("earlyWakeupStart from $traceMethodName") + Trace.asyncTraceForTrackBegin(TRACE_TAG_APP, TRACK_NAME, traceMethodName, 0) + transaction.setEarlyWakeupStart() + earlyWakeupEnabled = true + } + + @SuppressLint("MissingPermission") + private fun earlyWakeupEnd(transaction: SurfaceControl.Transaction, loggingContext: String) { + v("earlyWakeupEnd from $loggingContext") + transaction.setEarlyWakeupEnd() + Trace.asyncTraceForTrackEnd(TRACE_TAG_APP, TRACK_NAME, 0) + earlyWakeupEnabled = false + } + @VisibleForTesting open fun createTransaction(): SurfaceControl.Transaction { return SurfaceControl.Transaction() @@ -177,7 +196,39 @@ open class BlurUtils @Inject constructor( } } + /** + * Enables/disables the early wakeup flag on surface flinger. Keeps the early wakeup flag on + * until it reset by passing false to this method. + */ + fun setPersistentEarlyWakeup(persistentWakeup: Boolean, viewRootImpl: ViewRootImpl?) { + persistentEarlyWakeupRequired = persistentWakeup + if (viewRootImpl == null || !supportsBlursOnWindows()) return + if (persistentEarlyWakeupRequired) { + if (earlyWakeupEnabled) return + createTransaction().use { + earlyWakeupStart(it, "setEarlyWakeup") + it.apply() + } + } else { + if (!earlyWakeupEnabled) return + if (lastAppliedBlur > 0) { + Log.w( + TAG, + "resetEarlyWakeup invoked when lastAppliedBlur $lastAppliedBlur is " + + "non-zero, this means that the early wakeup signal was reset while blur" + + " was still active", + ) + } + createTransaction().use { + earlyWakeupEnd(it, "resetEarlyWakeup") + it.apply() + } + } + } + companion object { const val TRACK_NAME = "BlurUtils" + private const val TAG = "BlurUtils" + private val isLoggable = Log.isLoggable(TAG, Log.VERBOSE) || Build.isDebuggable() } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt index 922afc7825c4..9cae6c135fb0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt @@ -329,6 +329,7 @@ constructor( cookie, component, launchCujType = Cuj.CUJ_STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP, + returnCujType = Cuj.CUJ_STATUS_BAR_APP_RETURN_TO_CALL_CHIP, ) { override suspend fun createController( forLaunch: Boolean diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt index 7964950a2917..499e3ae2fa5b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt @@ -16,10 +16,10 @@ package com.android.systemui.statusbar.core +import com.android.app.displaylib.PerDisplayRepository import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.display.data.repository.DisplayRepository -import com.android.systemui.display.data.repository.DisplayScopeRepository import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore import com.android.systemui.statusbar.data.repository.StatusBarPerDisplayStoreImpl import com.android.systemui.statusbar.phone.AutoHideControllerStore @@ -40,7 +40,7 @@ constructor( private val statusBarModeRepositoryStore: StatusBarModeRepositoryStore, private val initializerStore: StatusBarInitializerStore, private val autoHideControllerStore: AutoHideControllerStore, - private val displayScopeRepository: DisplayScopeRepository, + private val displayScopeRepository: PerDisplayRepository<CoroutineScope>, private val statusBarWindowStateRepositoryStore: StatusBarWindowStateRepositoryStore, ) : StatusBarPerDisplayStoreImpl<StatusBarOrchestrator>( @@ -59,10 +59,10 @@ constructor( val statusBarWindowController = statusBarWindowControllerStore.forDisplay(displayId) ?: return null val autoHideController = autoHideControllerStore.forDisplay(displayId) ?: return null + val displayScope = displayScopeRepository[displayId] ?: return null return factory.create( displayId, - // TODO: b/398825844 - Handle nullness to prevent leaking CoroutineScope. - displayScopeRepository.scopeForDisplay(displayId), + displayScope, statusBarWindowStateRepositoryStore.forDisplay(displayId), statusBarModeRepository, statusBarInitializer, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/LightBarControllerStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/LightBarControllerStore.kt index 3c0d6c3b8df3..b257c2bfc29a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/LightBarControllerStore.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/LightBarControllerStore.kt @@ -16,11 +16,11 @@ package com.android.systemui.statusbar.data.repository +import com.android.app.displaylib.PerDisplayRepository import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.display.data.repository.DisplayRepository -import com.android.systemui.display.data.repository.DisplayScopeRepository import com.android.systemui.display.data.repository.PerDisplayStore import com.android.systemui.statusbar.phone.LightBarController import com.android.systemui.statusbar.phone.LightBarControllerImpl @@ -41,7 +41,7 @@ constructor( @Background backgroundApplicationScope: CoroutineScope, displayRepository: DisplayRepository, private val factory: LightBarControllerImpl.Factory, - private val displayScopeRepository: DisplayScopeRepository, + private val displayScopeRepository: PerDisplayRepository<CoroutineScope>, private val statusBarModeRepositoryStore: StatusBarModeRepositoryStore, private val darkIconDispatcherStore: DarkIconDispatcherStore, ) : @@ -55,13 +55,9 @@ constructor( val darkIconDispatcher = darkIconDispatcherStore.forDisplay(displayId) ?: return null val statusBarModePerDisplayRepository = statusBarModeRepositoryStore.forDisplay(displayId) ?: return null + val displayScope = displayScopeRepository[displayId] ?: return null return factory - .create( - displayId, - displayScopeRepository.scopeForDisplay(displayId), - darkIconDispatcher, - statusBarModePerDisplayRepository, - ) + .create(displayId, displayScope, darkIconDispatcher, statusBarModePerDisplayRepository) .also { it.start() } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotViewControllerStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotViewControllerStore.kt index 32dc8407ac90..f3c68553abfd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotViewControllerStore.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotViewControllerStore.kt @@ -16,11 +16,11 @@ package com.android.systemui.statusbar.data.repository +import com.android.app.displaylib.PerDisplayRepository import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.display.data.repository.DisplayRepository -import com.android.systemui.display.data.repository.DisplayScopeRepository import com.android.systemui.display.data.repository.PerDisplayStore import com.android.systemui.display.data.repository.SingleDisplayStore import com.android.systemui.statusbar.core.StatusBarConnectedDisplays @@ -44,7 +44,7 @@ constructor( @Background backgroundApplicationScope: CoroutineScope, displayRepository: DisplayRepository, private val factory: PrivacyDotViewControllerImpl.Factory, - private val displayScopeRepository: DisplayScopeRepository, + private val displayScopeRepository: PerDisplayRepository<CoroutineScope>, private val statusBarConfigurationControllerStore: StatusBarConfigurationControllerStore, private val contentInsetsProviderStore: StatusBarContentInsetsProviderStore, ) : @@ -58,11 +58,8 @@ constructor( val configurationController = statusBarConfigurationControllerStore.forDisplay(displayId) ?: return null val contentInsetsProvider = contentInsetsProviderStore.forDisplay(displayId) ?: return null - return factory.create( - displayScopeRepository.scopeForDisplay(displayId), - configurationController, - contentInsetsProvider, - ) + val displayScope = displayScopeRepository[displayId] ?: return null + return factory.create(displayScope, configurationController, contentInsetsProvider) } override suspend fun onDisplayRemovalAction(instance: PrivacyDotViewController) { 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 292f74a65554..f36a0cf51b97 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 @@ -19,6 +19,8 @@ package com.android.systemui.statusbar.notification.row; import static com.android.systemui.Flags.notificationColorUpdateLogger; import static com.android.systemui.Flags.physicalNotificationMovement; +import static java.lang.Math.abs; + import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; @@ -29,6 +31,7 @@ import android.util.FloatProperty; import android.util.IndentingPrintWriter; import android.util.Log; import android.view.View; +import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.FrameLayout; @@ -110,14 +113,27 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable, Ro protected SpringAnimation mMagneticAnimator = new SpringAnimation( this /* object */, DynamicAnimation.TRANSLATION_X); + private int mTouchSlop; + protected MagneticRowListener mMagneticRowListener = new MagneticRowListener() { @Override - public void setMagneticTranslation(float translation) { - if (mMagneticAnimator.isRunning()) { - mMagneticAnimator.animateToFinalPosition(translation); - } else { + public void setMagneticTranslation(float translation, boolean trackEagerly) { + if (!mMagneticAnimator.isRunning()) { setTranslation(translation); + return; + } + + if (trackEagerly) { + float delta = abs(getTranslation() - translation); + if (delta > mTouchSlop) { + mMagneticAnimator.animateToFinalPosition(translation); + } else { + mMagneticAnimator.cancel(); + setTranslation(translation); + } + } else { + mMagneticAnimator.animateToFinalPosition(translation); } } @@ -183,6 +199,7 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable, Ro private void initDimens() { mContentShift = getResources().getDimensionPixelSize( R.dimen.shelf_transform_content_shift); + mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java index 977936fa34fc..c03dc279888f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java @@ -46,7 +46,6 @@ import com.android.systemui.Flags; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.res.R; import com.android.systemui.statusbar.AlphaOptimizedImageView; -import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; @@ -363,7 +362,9 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl final float dismissThreshold = getDismissThreshold(); final boolean snappingToDismiss = delta < -dismissThreshold || delta > dismissThreshold; if (mSnappingToDismiss != snappingToDismiss) { - getMenuView().performHapticFeedback(CLOCK_TICK); + if (!Flags.magneticNotificationSwipes()) { + getMenuView().performHapticFeedback(CLOCK_TICK); + } } mSnappingToDismiss = snappingToDismiss; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManager.kt index aa6951715755..48cff7497e3c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManager.kt @@ -33,12 +33,12 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow interface MagneticNotificationRowManager { /** - * Set the swipe threshold in pixels. After crossing the threshold, the magnetic target detaches - * and the magnetic neighbors snap back. + * Notifies a change in the device density. The density can be used to compute the values of + * thresholds in pixels. * - * @param[threshold] Swipe threshold in pixels. + * @param[density] The device density. */ - fun setSwipeThresholdPx(thresholdPx: Float) + fun onDensityChange(density: Float) /** * Set the magnetic and roundable targets of a magnetic swipe interaction. @@ -87,6 +87,9 @@ interface MagneticNotificationRowManager { */ fun onMagneticInteractionEnd(row: ExpandableNotificationRow, velocity: Float? = null) + /** Determine if the given [ExpandableNotificationRow] has been magnetically detached. */ + fun isMagneticRowSwipeDetached(row: ExpandableNotificationRow): Boolean + /* Reset any roundness that magnetic targets may have */ fun resetRoundness() @@ -104,12 +107,15 @@ interface MagneticNotificationRowManager { /** Detaching threshold in dp */ const val MAGNETIC_DETACH_THRESHOLD_DP = 56 + /** Re-attaching threshold in dp */ + const val MAGNETIC_ATTACH_THRESHOLD_DP = 40 + /* An empty implementation of a manager */ @JvmStatic val Empty: MagneticNotificationRowManager get() = object : MagneticNotificationRowManager { - override fun setSwipeThresholdPx(thresholdPx: Float) {} + override fun onDensityChange(density: Float) {} override fun setMagneticAndRoundableTargets( swipingRow: ExpandableNotificationRow, @@ -127,6 +133,10 @@ interface MagneticNotificationRowManager { velocity: Float?, ) {} + override fun isMagneticRowSwipeDetached( + row: ExpandableNotificationRow + ): Boolean = false + override fun resetRoundness() {} override fun reset() {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt index 5a23f7cc2861..6e8b2226b4f6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt @@ -47,6 +47,7 @@ constructor( private set private var magneticDetachThreshold = Float.POSITIVE_INFINITY + private var magneticAttachThreshold = 0f // Has the roundable target been set for the magnetic view that is being swiped. val isSwipedViewRoundableSet: Boolean @@ -57,13 +58,25 @@ constructor( SpringForce().setStiffness(DETACH_STIFFNESS).setDampingRatio(DETACH_DAMPING_RATIO) private val snapForce = SpringForce().setStiffness(SNAP_BACK_STIFFNESS).setDampingRatio(SNAP_BACK_DAMPING_RATIO) + private val attachForce = + SpringForce().setStiffness(ATTACH_STIFFNESS).setDampingRatio(ATTACH_DAMPING_RATIO) // Multiplier applied to the translation of a row while swiped val swipedRowMultiplier = MAGNETIC_TRANSLATION_MULTIPLIERS[MAGNETIC_TRANSLATION_MULTIPLIERS.size / 2] - override fun setSwipeThresholdPx(thresholdPx: Float) { - magneticDetachThreshold = thresholdPx + /** + * An offset applied to input translation that increases on subsequent re-attachments of a + * detached magnetic view. This helps keep computations consistent when the drag gesture input + * and the swiped notification don't share the same origin point after a re-attaching animation. + */ + private var translationOffset = 0f + + override fun onDensityChange(density: Float) { + magneticDetachThreshold = + density * MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP + magneticAttachThreshold = + density * MagneticNotificationRowManager.MAGNETIC_ATTACH_THRESHOLD_DP } override fun setMagneticAndRoundableTargets( @@ -72,6 +85,7 @@ constructor( sectionsManager: NotificationSectionsManager, ) { if (currentState == State.IDLE) { + translationOffset = 0f updateMagneticAndRoundableTargets(swipingRow, stackScrollLayout, sectionsManager) currentState = State.TARGETS_SET } else { @@ -121,36 +135,36 @@ constructor( val canTargetBeDismissed = currentMagneticListeners.swipedListener()?.canRowBeDismissed() ?: false + val correctedTranslation = translation - translationOffset when (currentState) { State.IDLE -> { logger.logMagneticRowTranslationNotSet(currentState, row.getLoggingKey()) return false } State.TARGETS_SET -> { - pullTargets(translation, canTargetBeDismissed) + pullTargets(correctedTranslation, canTargetBeDismissed) currentState = State.PULLING } State.PULLING -> { - updateRoundness(translation) + updateRoundness(correctedTranslation) if (canTargetBeDismissed) { - pullDismissibleRow(translation) + pullDismissibleRow(correctedTranslation) } else { - pullTargets(translation, canSwipedBeDismissed = false) + pullTargets(correctedTranslation, canSwipedBeDismissed = false) } } State.DETACHED -> { - val swiped = currentMagneticListeners.swipedListener() - swiped?.setMagneticTranslation(translation) + translateDetachedRow(correctedTranslation) } } return true } - private fun updateRoundness(translation: Float) { + private fun updateRoundness(translation: Float, animate: Boolean = false) { val normalizedTranslation = abs(swipedRowMultiplier * translation) / magneticDetachThreshold notificationRoundnessManager.setRoundnessForAffectedViews( /* roundness */ normalizedTranslation.coerceIn(0f, MAX_PRE_DETACH_ROUNDNESS), - /* animate */ false, + animate, ) } @@ -232,7 +246,28 @@ constructor( ) } + private fun translateDetachedRow(translation: Float) { + val targetTranslation = swipedRowMultiplier * translation + val crossedThreshold = abs(targetTranslation) <= magneticAttachThreshold + if (crossedThreshold) { + translationOffset += translation + updateRoundness(translation = 0f, animate = true) + currentMagneticListeners.swipedListener()?.let { attach(it) } + currentState = State.PULLING + } else { + val swiped = currentMagneticListeners.swipedListener() + swiped?.setMagneticTranslation(translation, trackEagerly = false) + } + } + + private fun attach(listener: MagneticRowListener) { + listener.cancelMagneticAnimations() + listener.triggerMagneticForce(endTranslation = 0f, attachForce) + msdlPlayer.playToken(MSDLToken.SWIPE_THRESHOLD_INDICATOR) + } + override fun onMagneticInteractionEnd(row: ExpandableNotificationRow, velocity: Float?) { + translationOffset = 0f if (row.isSwipedTarget()) { when (currentState) { State.PULLING -> { @@ -254,9 +289,13 @@ constructor( } } + override fun isMagneticRowSwipeDetached(row: ExpandableNotificationRow): Boolean = + row.isSwipedTarget() && currentState == State.DETACHED + override fun resetRoundness() = notificationRoundnessManager.clear() override fun reset() { + translationOffset = 0f currentMagneticListeners.forEach { it?.cancelMagneticAnimations() it?.cancelTranslationAnimations() @@ -300,6 +339,8 @@ constructor( private const val DETACH_DAMPING_RATIO = 0.95f private const val SNAP_BACK_STIFFNESS = 550f private const val SNAP_BACK_DAMPING_RATIO = 0.6f + private const val ATTACH_STIFFNESS = 800f + private const val ATTACH_DAMPING_RATIO = 0.95f // Maximum value of corner roundness that gets applied during the pre-detach dragging private const val MAX_PRE_DETACH_ROUNDNESS = 0.8f diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticRowListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticRowListener.kt index 5959ef1e093b..344dab4369f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticRowListener.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticRowListener.kt @@ -21,8 +21,17 @@ import androidx.dynamicanimation.animation.SpringForce /** A listener that responds to magnetic forces applied to an [ExpandableNotificationRow] */ interface MagneticRowListener { - /** Set a translation due to a magnetic attachment. */ - fun setMagneticTranslation(translation: Float) + /** + * Set a translation due to a magnetic attachment. + * + * If a magnetic animation is running, [trackEagerly] decides if the new translation is applied + * immediately or if the animation finishes first. When applying the translation immediately, + * the change in translation must be greater than a touch slop threshold. + * + * @param[translation] Incoming gesture translation. + * @param[trackEagerly] Whether we eagerly track the incoming translation or not. + */ + fun setMagneticTranslation(translation: Float, trackEagerly: Boolean = true) /** * Trigger the magnetic behavior when the row detaches or snaps back from its magnetic diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index f3d8ee245540..612c19fc6696 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -486,15 +486,22 @@ public class NotificationStackScrollLayoutController implements Dumpable { } @Override + public boolean isMagneticViewDetached(View view) { + if (view instanceof ExpandableNotificationRow row) { + return mMagneticNotificationRowManager.isMagneticRowSwipeDetached(row); + } else { + return false; + } + } + + @Override public float getTotalTranslationLength(View animView) { return mView.getTotalTranslationLength(animView); } @Override public void onDensityScaleChange(float density) { - mMagneticNotificationRowManager.setSwipeThresholdPx( - density * MagneticNotificationRowManager.MAGNETIC_DETACH_THRESHOLD_DP - ); + mMagneticNotificationRowManager.onDensityChange(density); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java index c5a846e1da05..5105e55b0a5c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java @@ -255,12 +255,13 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc int menuSnapTarget = menuRow.getMenuSnapTarget(); boolean isNonFalseMenuRevealingGesture = isMenuRevealingGestureAwayFromMenu && !isFalseGesture(); + boolean isMagneticViewDetached = mCallback.isMagneticViewDetached(animView); if ((isNonDismissGestureTowardsMenu || isNonFalseMenuRevealingGesture) && menuSnapTarget != 0) { // Menu has not been snapped to previously and this is menu revealing gesture snapOpen(animView, menuSnapTarget, velocity); menuRow.onSnapOpen(); - } else if (isDismissGesture && !gestureTowardsMenu) { + } else if (isDismissGesture && (!gestureTowardsMenu || isMagneticViewDetached)) { dismiss(animView, velocity); menuRow.onDismiss(); } else { @@ -272,6 +273,7 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc private void handleSwipeFromOpenState(MotionEvent ev, View animView, float velocity, NotificationMenuRowPlugin menuRow) { boolean isDismissGesture = isDismissGesture(ev); + boolean isMagneticViewDetached = mCallback.isMagneticViewDetached(animView); final boolean withinSnapMenuThreshold = menuRow.isWithinSnapMenuThreshold(); @@ -280,7 +282,7 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc // Haven't moved enough to unsnap from the menu menuRow.onSnapOpen(); snapOpen(animView, menuRow.getMenuSnapTarget(), velocity); - } else if (isDismissGesture && !menuRow.shouldSnapBack()) { + } else if (isDismissGesture && (!menuRow.shouldSnapBack() || isMagneticViewDetached)) { // Only dismiss if we're not moving towards the menu dismiss(animView, velocity); menuRow.onDismiss(); diff --git a/packages/SystemUI/src/com/android/systemui/util/AlarmTimeout.java b/packages/SystemUI/src/com/android/systemui/util/AlarmTimeout.java index a791376a48d5..38ac5e6be2e1 100644 --- a/packages/SystemUI/src/com/android/systemui/util/AlarmTimeout.java +++ b/packages/SystemUI/src/com/android/systemui/util/AlarmTimeout.java @@ -26,7 +26,6 @@ import android.os.SystemClock; */ public class AlarmTimeout implements AlarmManager.OnAlarmListener { - public static final int MODE_CRASH_IF_SCHEDULED = 0; public static final int MODE_IGNORE_IF_SCHEDULED = 1; public static final int MODE_RESCHEDULE_IF_SCHEDULED = 2; @@ -48,17 +47,11 @@ public class AlarmTimeout implements AlarmManager.OnAlarmListener { * Schedules an alarm in {@code timeout} milliseconds in the future. * * @param timeout How long to wait from now. - * @param mode {@link #MODE_CRASH_IF_SCHEDULED}, {@link #MODE_IGNORE_IF_SCHEDULED} or - * {@link #MODE_RESCHEDULE_IF_SCHEDULED}. + * @param mode {@link #MODE_IGNORE_IF_SCHEDULED} or {@link #MODE_RESCHEDULE_IF_SCHEDULED}. * @return {@code true} when scheduled successfully, {@code false} otherwise. */ public boolean schedule(long timeout, int mode) { switch (mode) { - case MODE_CRASH_IF_SCHEDULED: - if (mScheduled) { - throw new IllegalStateException(mTag + " timeout is already scheduled"); - } - break; case MODE_IGNORE_IF_SCHEDULED: if (mScheduled) { return false; diff --git a/packages/SystemUI/src/com/android/systemui/window/ui/WindowRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/window/ui/WindowRootViewBinder.kt index 06532bc0cc2a..fd642f99ef54 100644 --- a/packages/SystemUI/src/com/android/systemui/window/ui/WindowRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/window/ui/WindowRootViewBinder.kt @@ -59,6 +59,15 @@ object WindowRootViewBinder { ) { viewModel -> try { Log.d(TAG, "Launching coroutines that update window root view state") + launchTraced("early-wakeup") { + viewModel.isPersistentEarlyWakeupRequired.collect { wakeupRequired -> + blurUtils.setPersistentEarlyWakeup( + wakeupRequired, + view.rootView?.viewRootImpl, + ) + } + } + launchTraced("WindowBlur") { var wasUpdateScheduledForThisFrame = false var lastScheduledBlurRadius = 0 diff --git a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt index e60e85335f7a..e4b3ec7c40a3 100644 --- a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt @@ -19,13 +19,16 @@ package com.android.systemui.window.ui.viewmodel import android.os.Build import android.util.Log import com.android.systemui.Flags +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.ui.transitions.GlanceableHubTransition import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition +import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf @@ -41,6 +44,8 @@ constructor( primaryBouncerTransitions: Set<@JvmSuppressWildcards PrimaryBouncerTransition>, glanceableHubTransitions: Set<@JvmSuppressWildcards GlanceableHubTransition>, private val blurInteractor: WindowRootViewBlurInteractor, + private val keyguardInteractor: KeyguardInteractor, + private val shadeInteractor: ShadeInteractor, ) { private val bouncerBlurRadiusFlows = @@ -70,6 +75,24 @@ constructor( } } + val isPersistentEarlyWakeupRequired = + blurInteractor.isBlurCurrentlySupported + .flatMapLatest { blurSupported -> + if (blurSupported) { + combine( + keyguardInteractor.isKeyguardShowing, + shadeInteractor.isUserInteracting, + shadeInteractor.isAnyExpanded, + ) { keyguardShowing, userDraggingShade, anyExpanded -> + keyguardShowing || userDraggingShade || anyExpanded + } + } else { + flowOf(false) + } + } + .distinctUntilChanged() + .logIfPossible("isPersistentEarlyWakeupRequired") + val isBlurOpaque = blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported -> if (blurSupported) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index 8105ae0960ad..206654abcaaa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -101,7 +101,6 @@ import com.android.systemui.dreams.ui.viewmodel.DreamViewModel; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.SystemPropertiesHelper; -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionBootInteractor; import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.log.SessionTracker; @@ -207,7 +206,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { private @Mock ShadeWindowLogger mShadeWindowLogger; private @Mock SelectedUserInteractor mSelectedUserInteractor; private @Mock UserTracker.Callback mUserTrackerCallback; - private @Mock KeyguardInteractor mKeyguardInteractor; private @Mock KeyguardTransitionBootInteractor mKeyguardTransitionBootInteractor; private @Captor ArgumentCaptor<KeyguardStateController.Callback> mKeyguardStateControllerCallback; @@ -1499,7 +1497,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { mSystemPropertiesHelper, () -> mock(WindowManagerLockscreenVisibilityManager.class), mSelectedUserInteractor, - mKeyguardInteractor, + mKosmos.getKeyguardInteractor(), mKeyguardTransitionBootInteractor, mKosmos::getCommunalSceneInteractor, mock(WindowManagerOcclusionManager.class)); diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryKosmos.kt index ff4ba61b6965..208eabc44073 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayScopeRepositoryKosmos.kt @@ -16,11 +16,13 @@ package com.android.systemui.display.data.repository +import com.android.app.displaylib.PerDisplayRepository import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testDispatcher +import kotlinx.coroutines.CoroutineScope val Kosmos.fakeDisplayScopeRepository by Kosmos.Fixture { FakeDisplayScopeRepository(testDispatcher) } -var Kosmos.displayScopeRepository: DisplayScopeRepository by +var Kosmos.displayScopeRepository: PerDisplayRepository<CoroutineScope> by Kosmos.Fixture { fakeDisplayScopeRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayScopeRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayScopeRepository.kt index 3c2592471694..84c9abfba803 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayScopeRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayScopeRepository.kt @@ -16,15 +16,18 @@ package com.android.systemui.display.data.repository +import com.android.app.displaylib.PerDisplayRepository import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope -class FakeDisplayScopeRepository(private val dispatcher: CoroutineDispatcher) : - DisplayScopeRepository { +class FakeDisplayScopeRepository( + private val dispatcher: CoroutineDispatcher, + override val debugName: String = "FakeDisplayScopeRepository", +) : PerDisplayRepository<CoroutineScope> { private val perDisplayScopes = mutableMapOf<Int, CoroutineScope>() - override fun scopeForDisplay(displayId: Int): CoroutineScope { + override fun get(displayId: Int): CoroutineScope { return perDisplayScopes.computeIfAbsent(displayId) { CoroutineScope(dispatcher) } } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/PerDisplayStoreKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/PerDisplayStoreKosmos.kt index 4b516e9c74bc..161e06295852 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/PerDisplayStoreKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/PerDisplayStoreKosmos.kt @@ -16,6 +16,8 @@ package com.android.systemui.display.data.repository +import com.android.app.displaylib.DisplayInstanceLifecycleManager +import com.android.app.displaylib.FakeDisplayInstanceLifecycleManager import com.android.app.displaylib.PerDisplayInstanceProviderWithTeardown import com.android.app.displaylib.PerDisplayInstanceRepositoryImpl import com.android.systemui.dump.dumpManager @@ -69,13 +71,25 @@ val Kosmos.fakePerDisplayInstanceProviderWithTeardown by Kosmos.Fixture { FakePerDisplayInstanceProviderWithTeardown() } val Kosmos.perDisplayDumpHelper by Kosmos.Fixture { PerDisplayRepoDumpHelper(dumpManager) } +val Kosmos.fakeDisplayInstanceLifecycleManager by + Kosmos.Fixture { FakeDisplayInstanceLifecycleManager() } + val Kosmos.fakePerDisplayInstanceRepository by Kosmos.Fixture { - PerDisplayInstanceRepositoryImpl( - debugName = "fakePerDisplayInstanceRepository", - instanceProvider = fakePerDisplayInstanceProviderWithTeardown, - testScope.backgroundScope, - displayRepository, - perDisplayDumpHelper, - ) + { lifecycleManager: DisplayInstanceLifecycleManager? -> + PerDisplayInstanceRepositoryImpl( + debugName = "fakePerDisplayInstanceRepository", + instanceProvider = fakePerDisplayInstanceProviderWithTeardown, + lifecycleManager, + testScope.backgroundScope, + displayRepository, + perDisplayDumpHelper, + ) + } } + +fun Kosmos.createPerDisplayInstanceRepository( + overrideLifecycleManager: DisplayInstanceLifecycleManager? = null +): PerDisplayInstanceRepositoryImpl<TestPerDisplayInstance> { + return fakePerDisplayInstanceRepository(overrideLifecycleManager) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelKosmos.kt index 5a02bfbacd35..e56f32f3534f 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelKosmos.kt @@ -16,9 +16,11 @@ package com.android.systemui.window.ui.viewmodel +import com.android.systemui.keyguard.domain.interactor.keyguardInteractor import com.android.systemui.keyguard.ui.transitions.FakeBouncerTransition import com.android.systemui.keyguard.ui.transitions.FakeGlanceableHubTransition import com.android.systemui.kosmos.Kosmos +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor import org.mockito.internal.util.collections.Sets @@ -38,5 +40,7 @@ val Kosmos.windowRootViewModel by fakeBouncerTransitions, fakeGlanceableHubTransitions, windowRootViewBlurInteractor, + keyguardInteractor, + shadeInteractor, ) } diff --git a/packages/WallpaperBackup/Android.bp b/packages/WallpaperBackup/Android.bp index b8e0d427f3d8..b0c0c3a5d455 100644 --- a/packages/WallpaperBackup/Android.bp +++ b/packages/WallpaperBackup/Android.bp @@ -48,7 +48,9 @@ android_test { static_libs: [ "androidx.test.core", "androidx.test.rules", + "flag-junit", "mockito-target-minus-junit4", + "platform-test-annotations", "truth", ], resource_dirs: ["test/res"], diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java index 44ea9a2848ac..a80a64d6daba 100644 --- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java +++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java @@ -16,6 +16,7 @@ package com.android.wallpaperbackup; +import static android.app.Flags.liveWallpaperContentHandling; import static android.app.WallpaperManager.FLAG_LOCK; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.app.WallpaperManager.ORIENTATION_UNKNOWN; @@ -27,6 +28,7 @@ import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_WALLPAPE import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_QUOTA_EXCEEDED; import static com.android.window.flags.Flags.multiCrop; +import android.annotation.Nullable; import android.app.AppGlobals; import android.app.WallpaperManager; import android.app.backup.BackupAgent; @@ -35,6 +37,7 @@ import android.app.backup.BackupDataOutput; import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger.BackupRestoreError; import android.app.backup.FullBackupDataOutput; +import android.app.wallpaper.WallpaperDescription; import android.content.ComponentName; import android.content.Context; import android.content.SharedPreferences; @@ -493,11 +496,13 @@ public class WallpaperBackupAgent extends BackupAgent { // First parse the live component name so that we know for logging if we care about // logging errors with the image restore. - ComponentName wpService = parseWallpaperComponent(infoStage, "wp"); - mSystemHasLiveComponent = wpService != null; + Pair<ComponentName, WallpaperDescription> wpService = parseWallpaperComponent(infoStage, + "wp"); + mSystemHasLiveComponent = wpService.first != null; - ComponentName kwpService = parseWallpaperComponent(infoStage, "kwp"); - mLockHasLiveComponent = kwpService != null; + Pair<ComponentName, WallpaperDescription> kwpService = parseWallpaperComponent( + infoStage, "kwp"); + mLockHasLiveComponent = kwpService.first != null; boolean separateLockWallpaper = mLockHasLiveComponent || lockImageStage.exists(); // if there's no separate lock wallpaper, apply the system wallpaper to both screens. @@ -586,25 +591,39 @@ public class WallpaperBackupAgent extends BackupAgent { } @VisibleForTesting - void updateWallpaperComponent(ComponentName wpService, int which) + void updateWallpaperComponent(Pair<ComponentName, WallpaperDescription> wpService, int which) throws IOException { - if (servicePackageExists(wpService)) { - Slog.i(TAG, "Using wallpaper service " + wpService); - mWallpaperManager.setWallpaperComponentWithFlags(wpService, which); - if ((which & FLAG_LOCK) != 0) { - mEventLogger.onLockLiveWallpaperRestored(wpService); - } - if ((which & FLAG_SYSTEM) != 0) { - mEventLogger.onSystemLiveWallpaperRestored(wpService); + WallpaperDescription description = wpService.second; + boolean hasDescription = (liveWallpaperContentHandling() && description != null); + ComponentName component = hasDescription ? description.getComponent() : wpService.first; + if (servicePackageExists(component)) { + if (hasDescription) { + Slog.i(TAG, "Using wallpaper description " + description); + mWallpaperManager.setWallpaperComponentWithDescription(description, which); + if ((which & FLAG_LOCK) != 0) { + mEventLogger.onLockLiveWallpaperRestoredWithDescription(description); + } + if ((which & FLAG_SYSTEM) != 0) { + mEventLogger.onSystemLiveWallpaperRestoredWithDescription(description); + } + } else { + Slog.i(TAG, "Using wallpaper service " + component); + mWallpaperManager.setWallpaperComponentWithFlags(component, which); + if ((which & FLAG_LOCK) != 0) { + mEventLogger.onLockLiveWallpaperRestored(component); + } + if ((which & FLAG_SYSTEM) != 0) { + mEventLogger.onSystemLiveWallpaperRestored(component); + } } } else { // If we've restored a live wallpaper, but the component doesn't exist, // we should log it as an error so we can easily identify the problem // in reports from users - if (wpService != null) { + if (component != null) { // TODO(b/268471749): Handle delayed case - applyComponentAtInstall(wpService, which); - Slog.w(TAG, "Wallpaper service " + wpService + " isn't available. " + applyComponentAtInstall(component, description, which); + Slog.w(TAG, "Wallpaper service " + component + " isn't available. " + " Will try to apply later"); } } @@ -697,7 +716,6 @@ public class WallpaperBackupAgent extends BackupAgent { * (thereby preserving the center point). Then finally, adding any leftover image real-estate * (i.e. space left over on the horizontal axis) to add parallax effect. Parallax is only added * if was present in the old device's settings. - * */ private Rect findNewCropfromOldCrop(Rect oldCrop, Point oldDisplaySize, boolean oldRtl, Point newDisplaySize, Point bitmapSize, boolean newRtl) { @@ -976,10 +994,12 @@ public class WallpaperBackupAgent extends BackupAgent { return cropHints; } - private ComponentName parseWallpaperComponent(File wallpaperInfo, String sectionTag) { + private Pair<ComponentName, WallpaperDescription> parseWallpaperComponent(File wallpaperInfo, + String sectionTag) { ComponentName name = null; + WallpaperDescription description = null; try (FileInputStream stream = new FileInputStream(wallpaperInfo)) { - final XmlPullParser parser = Xml.resolvePullParser(stream); + final TypedXmlPullParser parser = Xml.resolvePullParser(stream); int type; do { @@ -991,6 +1011,7 @@ public class WallpaperBackupAgent extends BackupAgent { name = (parsedName != null) ? ComponentName.unflattenFromString(parsedName) : null; + description = parseWallpaperDescription(parser, name); break; } } @@ -998,9 +1019,30 @@ public class WallpaperBackupAgent extends BackupAgent { } catch (Exception e) { // Whoops; can't process the info file at all. Report failure. Slog.w(TAG, "Failed to parse restored component: " + e.getMessage()); - return null; + return new Pair<>(null, null); } - return name; + return new Pair<>(name, description); + } + + // Copied from com.android.server.wallpaper.WallpaperDataParser + private WallpaperDescription parseWallpaperDescription(TypedXmlPullParser parser, + ComponentName component) throws XmlPullParserException, IOException { + + WallpaperDescription description = null; + int type = parser.next(); + if (type == XmlPullParser.START_TAG && "description".equals(parser.getName())) { + // Always read the description if it's there - there may be one from a previous save + // with content handling enabled even if it's enabled now + description = WallpaperDescription.restoreFromXml(parser); + if (liveWallpaperContentHandling()) { + // null component means that wallpaper was last saved without content handling, so + // populate description from saved component + if (description.getComponent() == null) { + description = description.toBuilder().setComponent(component).build(); + } + } + } + return description; } private int getAttributeInt(XmlPullParser parser, String name, int defValue) { @@ -1037,14 +1079,16 @@ public class WallpaperBackupAgent extends BackupAgent { // Intentionally blank } - private void applyComponentAtInstall(ComponentName componentName, int which) { - PackageMonitor packageMonitor = getWallpaperPackageMonitor( - componentName, which); + private void applyComponentAtInstall(ComponentName componentName, + @Nullable WallpaperDescription description, int which) { + PackageMonitor packageMonitor = getWallpaperPackageMonitor(componentName, description, + which); packageMonitor.register(getBaseContext(), null, UserHandle.ALL, true); } @VisibleForTesting - PackageMonitor getWallpaperPackageMonitor(ComponentName componentName, int which) { + PackageMonitor getWallpaperPackageMonitor(ComponentName componentName, + @Nullable WallpaperDescription description, int which) { return new PackageMonitor() { @Override public void onPackageAdded(String packageName, int uid) { @@ -1068,7 +1112,33 @@ public class WallpaperBackupAgent extends BackupAgent { return; } - if (componentName.getPackageName().equals(packageName)) { + boolean useDescription = (liveWallpaperContentHandling() && description != null + && description.getComponent() != null); + if (useDescription && description.getComponent().getPackageName().equals( + packageName)) { + Slog.d(TAG, "Applying description " + description); + boolean success = mWallpaperManager.setWallpaperComponentWithDescription( + description, which); + WallpaperEventLogger logger = new WallpaperEventLogger( + mBackupManager.getDelayedRestoreLogger()); + if (success) { + if ((which & FLAG_SYSTEM) != 0) { + logger.onSystemLiveWallpaperRestoredWithDescription(description); + } + if ((which & FLAG_LOCK) != 0) { + logger.onLockLiveWallpaperRestoredWithDescription(description); + } + } else { + if ((which & FLAG_SYSTEM) != 0) { + logger.onSystemLiveWallpaperRestoreFailed( + WallpaperEventLogger.ERROR_SET_DESCRIPTION_EXCEPTION); + } + if ((which & FLAG_LOCK) != 0) { + logger.onLockLiveWallpaperRestoreFailed( + WallpaperEventLogger.ERROR_SET_DESCRIPTION_EXCEPTION); + } + } + } else if (componentName.getPackageName().equals(packageName)) { Slog.d(TAG, "Applying component " + componentName); boolean success = mWallpaperManager.setWallpaperComponentWithFlags( componentName, which); @@ -1191,4 +1261,4 @@ public class WallpaperBackupAgent extends BackupAgent { void setBackupManagerForTesting(BackupManager backupManager) { mBackupManager = backupManager; } -}
\ No newline at end of file +} diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java index b25f95ab1936..69469e427266 100644 --- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java +++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java @@ -16,12 +16,14 @@ package com.android.wallpaperbackup; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WallpaperInfo; import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger; import android.app.backup.BackupRestoreEventLogger.BackupRestoreDataType; import android.app.backup.BackupRestoreEventLogger.BackupRestoreError; +import android.app.wallpaper.WallpaperDescription; import android.content.ComponentName; import com.android.internal.annotations.VisibleForTesting; @@ -53,6 +55,16 @@ public class WallpaperEventLogger { @VisibleForTesting static final String WALLPAPER_LIVE_LOCK = "wlp_live_lock"; + /* Live component used as system (or home) screen wallpaper */ + @BackupRestoreDataType + @VisibleForTesting + static final String WALLPAPER_DESCRIPTION_SYSTEM = "wlp_description_system"; + + /* Live component used as lock screen wallpaper */ + @BackupRestoreDataType + @VisibleForTesting + static final String WALLPAPER_DESCRIPTION_LOCK = "wlp_description_lock"; + @BackupRestoreError static final String ERROR_INELIGIBLE = "ineligible"; @BackupRestoreError @@ -64,6 +76,8 @@ public class WallpaperEventLogger { @BackupRestoreError static final String ERROR_SET_COMPONENT_EXCEPTION = "exception_in_set_component"; @BackupRestoreError + static final String ERROR_SET_DESCRIPTION_EXCEPTION = "exception_in_set_description"; + @BackupRestoreError static final String ERROR_LIVE_PACKAGE_NOT_INSTALLED = "live_pkg_not_installed_in_restore"; private final BackupRestoreEventLogger mLogger; @@ -115,11 +129,11 @@ public class WallpaperEventLogger { } void onSystemImageWallpaperRestored() { - logRestoreSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null); + logRestoreSuccessInternal(WALLPAPER_IMG_SYSTEM, (ComponentName) null); } void onLockImageWallpaperRestored() { - logRestoreSuccessInternal(WALLPAPER_IMG_LOCK, /* liveComponentWallpaperInfo */ null); + logRestoreSuccessInternal(WALLPAPER_IMG_LOCK, (ComponentName) null); } void onSystemLiveWallpaperRestored(ComponentName wpService) { @@ -146,6 +160,13 @@ public class WallpaperEventLogger { logRestoreFailureInternal(WALLPAPER_LIVE_LOCK, error); } + void onSystemLiveWallpaperRestoredWithDescription(@NonNull WallpaperDescription description) { + logRestoreSuccessInternal(WALLPAPER_DESCRIPTION_SYSTEM, description); + } + + void onLockLiveWallpaperRestoredWithDescription(@NonNull WallpaperDescription description) { + logRestoreSuccessInternal(WALLPAPER_DESCRIPTION_LOCK, description); + } /** @@ -168,15 +189,17 @@ public class WallpaperEventLogger { */ void onRestoreException(Exception exception) { String error = exception.getClass().getName(); - if (!mProcessedDataTypes.contains(WALLPAPER_IMG_SYSTEM) && !mProcessedDataTypes.contains( - WALLPAPER_LIVE_SYSTEM)) { + if (!(mProcessedDataTypes.contains(WALLPAPER_IMG_SYSTEM) || mProcessedDataTypes.contains( + WALLPAPER_LIVE_SYSTEM) || mProcessedDataTypes.contains( + WALLPAPER_DESCRIPTION_SYSTEM))) { mLogger.logItemsRestoreFailed(WALLPAPER_IMG_SYSTEM, /* count */ 1, error); } - if (!mProcessedDataTypes.contains(WALLPAPER_IMG_LOCK) && !mProcessedDataTypes.contains( - WALLPAPER_LIVE_LOCK)) { + if (!(mProcessedDataTypes.contains(WALLPAPER_IMG_LOCK) || mProcessedDataTypes.contains( + WALLPAPER_LIVE_LOCK) || mProcessedDataTypes.contains(WALLPAPER_DESCRIPTION_LOCK))) { mLogger.logItemsRestoreFailed(WALLPAPER_IMG_LOCK, /* count */ 1, error); } } + private void logBackupSuccessInternal(@BackupRestoreDataType String which, @Nullable WallpaperInfo liveComponentWallpaperInfo) { mLogger.logItemsBackedUp(which, /* count */ 1); @@ -197,6 +220,13 @@ public class WallpaperEventLogger { mProcessedDataTypes.add(which); } + private void logRestoreSuccessInternal(@BackupRestoreDataType String which, + @NonNull WallpaperDescription description) { + mLogger.logItemsRestored(which, /* count */ 1); + logRestoredLiveWallpaperDescription(which, description); + mProcessedDataTypes.add(which); + } + private void logRestoreFailureInternal(@BackupRestoreDataType String which, @BackupRestoreError String error) { mLogger.logItemsRestoreFailed(which, /* count */ 1, error); @@ -216,4 +246,11 @@ public class WallpaperEventLogger { mLogger.logRestoreMetadata(wallpaperType, wpService.getClassName()); } } + + private void logRestoredLiveWallpaperDescription(@BackupRestoreDataType String wallpaperType, + WallpaperDescription description) { + if (description != null) { + mLogger.logRestoreMetadata(wallpaperType, description.toString()); + } + } } diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java index f5fb644502ab..c9f1b5857d10 100644 --- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java +++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java @@ -16,6 +16,7 @@ package com.android.wallpaperbackup; +import static android.app.Flags.FLAG_LIVE_WALLPAPER_CONTENT_HANDLING; import static android.app.WallpaperManager.FLAG_LOCK; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; @@ -27,6 +28,8 @@ import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_INELIGIBLE; import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_METADATA; import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_WALLPAPER; import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_QUOTA_EXCEEDED; +import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_DESCRIPTION_LOCK; +import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_DESCRIPTION_SYSTEM; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_LOCK; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_SYSTEM; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_LOCK; @@ -54,6 +57,7 @@ import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger; import android.app.backup.BackupRestoreEventLogger.DataTypeResult; import android.app.backup.FullBackupDataOutput; +import android.app.wallpaper.WallpaperDescription; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -63,7 +67,10 @@ import android.graphics.Rect; import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.UserHandle; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.service.wallpaper.WallpaperService; +import android.util.Pair; import android.util.SparseArray; import android.util.Xml; @@ -79,6 +86,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; @@ -113,12 +121,15 @@ public class WallpaperBackupAgentTest { @Mock private BackupManager mBackupManager; - @Rule - public TemporaryFolder mTemporaryFolder = new TemporaryFolder(); - private ContextWithServiceOverrides mContext; private IsolatedWallpaperBackupAgent mWallpaperBackupAgent; private ComponentName mWallpaperComponent; + private WallpaperDescription mWallpaperDescription; + + private final TemporaryFolder mTemporaryFolder = new TemporaryFolder(); + + @Rule + public RuleChain mRuleChain = RuleChain.outerRule(new SetFlagsRule()).around(mTemporaryFolder); @Before public void setUp() { @@ -135,6 +146,8 @@ public class WallpaperBackupAgentTest { BackupAnnotations.OperationType.BACKUP); mWallpaperComponent = new ComponentName(TEST_WALLPAPER_PACKAGE, ""); + mWallpaperDescription = new WallpaperDescription.Builder().setComponent( + mWallpaperComponent).setId("id").build(); } @After @@ -366,11 +379,128 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_systemAndLock() throws IOException { - mWallpaperBackupAgent.mIsDeviceInRestore = true; - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + public void testUpdateWallpaperComponent_immediate_systemAndLock() throws IOException { + mWallpaperBackupAgent.mPackageExists = true; + + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); + assertThat(mWallpaperBackupAgent.mGetPackageMonitorCallCount).isEqualTo(0); + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_LOCK); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + public void testUpdateWallpaperComponent_immediate_systemOnly() + throws IOException { + mWallpaperBackupAgent.mPackageExists = true; + + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), + /* which */ FLAG_SYSTEM); + + assertThat(mWallpaperBackupAgent.mGetPackageMonitorCallCount).isEqualTo(0); + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_LOCK); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithFlags(mWallpaperComponent, FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_immediate_systemAndLock() + throws IOException { + mWallpaperBackupAgent.mPackageExists = true; + + mWallpaperBackupAgent.updateWallpaperComponent( + new Pair<>(mWallpaperComponent, mWallpaperDescription), /* which */ + FLAG_LOCK | FLAG_SYSTEM); + + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithDescription(mWallpaperDescription, + FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_LOCK); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_immediate_systemOnly() throws IOException { + mWallpaperBackupAgent.mPackageExists = true; + + mWallpaperBackupAgent.updateWallpaperComponent( + new Pair<>(mWallpaperComponent, mWallpaperDescription), /* which */ FLAG_SYSTEM); + + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_LOCK); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, + FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_delayed_systemAndLock() + throws IOException { + mWallpaperBackupAgent.mIsDeviceInRestore = true; + mWallpaperBackupAgent.updateWallpaperComponent( + new Pair<>(mWallpaperComponent, mWallpaperDescription), /* which */ + FLAG_LOCK | FLAG_SYSTEM); + + // Imitate wallpaper component installation. + mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, + /* uid */0); + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithDescription(mWallpaperDescription, + FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_LOCK); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_delayed_systemOnly() throws IOException { + mWallpaperBackupAgent.mIsDeviceInRestore = true; + + mWallpaperBackupAgent.updateWallpaperComponent( + new Pair<>(mWallpaperComponent, mWallpaperDescription), /* which */ FLAG_SYSTEM); + + // Imitate wallpaper component installation. + mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, + /* uid */0); + + verify(mWallpaperManager, times(1)) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_SYSTEM); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, FLAG_LOCK); + verify(mWallpaperManager, never()) + .setWallpaperComponentWithDescription(mWallpaperDescription, + FLAG_LOCK | FLAG_SYSTEM); + verify(mWallpaperManager, never()).clear(anyInt()); + } + + @Test + public void testUpdateWallpaperComponent_delayed_systemAndLock() throws IOException { + mWallpaperBackupAgent.mIsDeviceInRestore = true; + + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), + /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); @@ -384,13 +514,12 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_systemOnly() + public void testUpdateWallpaperComponent_delayed_systemOnly() throws IOException { mWallpaperBackupAgent.mIsDeviceInRestore = true; - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_SYSTEM); - // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); @@ -405,11 +534,11 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_deviceNotInRestore_doesNotApply() + public void testUpdateWallpaperComponent_delayed_deviceNotInRestore_doesNotApply() throws IOException { mWallpaperBackupAgent.mIsDeviceInRestore = false; - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate wallpaper component installation. @@ -421,11 +550,11 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_differentPackageInstalled_doesNotApply() + public void testUpdateWallpaperComponent_delayed_differentPackageInstalled_doesNotApply() throws IOException { mWallpaperBackupAgent.mIsDeviceInRestore = false; - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate "wrong" wallpaper component installation. @@ -745,9 +874,8 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_delayedRestore_logsSuccess() throws Exception { + public void testUpdateWallpaperComponent_delayed_succeeds_logsSuccess() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; - when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(true); when(mWallpaperManager.setWallpaperComponentWithFlags(any(), eq(FLAG_LOCK | FLAG_SYSTEM))) .thenReturn(true); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( @@ -755,7 +883,7 @@ public class WallpaperBackupAgentTest { when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, @@ -771,15 +899,41 @@ public class WallpaperBackupAgentTest { @Test - public void testUpdateWallpaperComponent_delayedRestoreFails_logsFailure() throws Exception { + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_delayed_succeeds_logsSuccess() throws Exception { + mWallpaperBackupAgent.mIsDeviceInRestore = true; + when(mWallpaperManager.setWallpaperComponentWithDescription(any(), + eq(FLAG_LOCK | FLAG_SYSTEM))).thenReturn(true); + BackupRestoreEventLogger logger = new BackupRestoreEventLogger( + BackupAnnotations.OperationType.RESTORE); + when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); + mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); + + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(null, mWallpaperDescription), + /* which */ FLAG_LOCK | FLAG_SYSTEM); + // Imitate wallpaper component installation. + mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, + /* uid */0); + + DataTypeResult system = getLoggingResult(WALLPAPER_DESCRIPTION_SYSTEM, + logger.getLoggingResults()); + DataTypeResult lock = getLoggingResult(WALLPAPER_DESCRIPTION_LOCK, + logger.getLoggingResults()); + assertThat(system).isNotNull(); + assertThat(system.getSuccessCount()).isEqualTo(1); + assertThat(lock).isNotNull(); + assertThat(lock.getSuccessCount()).isEqualTo(1); + } + + @Test + public void testUpdateWallpaperComponent_delayed_fails_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; - when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(false); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, @@ -793,7 +947,29 @@ public class WallpaperBackupAgentTest { } @Test - public void testUpdateWallpaperComponent_delayedRestore_packageNotInstalled_logsFailure() + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void testUpdateWallpaperDescription_delayed_fails_logsFailure() throws Exception { + mWallpaperBackupAgent.mIsDeviceInRestore = true; + BackupRestoreEventLogger logger = new BackupRestoreEventLogger( + BackupAnnotations.OperationType.RESTORE); + when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); + mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); + + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(null, mWallpaperDescription), + /* which */ FLAG_LOCK | FLAG_SYSTEM); + // Imitate wallpaper component installation. + mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, + /* uid */0); + + DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); + assertThat(system).isNotNull(); + assertThat(system.getFailCount()).isEqualTo(1); + assertThat(system.getErrors()).containsKey( + WallpaperEventLogger.ERROR_SET_DESCRIPTION_EXCEPTION); + } + + @Test + public void testUpdateWallpaperComponent_delayed_packageNotInstalled_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = false; BackupRestoreEventLogger logger = new BackupRestoreEventLogger( @@ -801,7 +977,7 @@ public class WallpaperBackupAgentTest { when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); - mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, + mWallpaperBackupAgent.updateWallpaperComponent(new Pair<>(mWallpaperComponent, null), /* which */ FLAG_LOCK | FLAG_SYSTEM); // Imitate wallpaper component installation. @@ -990,6 +1166,8 @@ public class WallpaperBackupAgentTest { List<File> mBackedUpFiles = new ArrayList<>(); PackageMonitor mWallpaperPackageMonitor; boolean mIsDeviceInRestore = false; + boolean mPackageExists = false; + int mGetPackageMonitorCallCount = 0; @Override protected void backupFile(File file, FullBackupDataOutput data) { @@ -998,7 +1176,7 @@ public class WallpaperBackupAgentTest { @Override boolean servicePackageExists(ComponentName comp) { - return false; + return mPackageExists; } @Override @@ -1007,8 +1185,11 @@ public class WallpaperBackupAgentTest { } @Override - PackageMonitor getWallpaperPackageMonitor(ComponentName componentName, int which) { - mWallpaperPackageMonitor = super.getWallpaperPackageMonitor(componentName, which); + PackageMonitor getWallpaperPackageMonitor(ComponentName componentName, + WallpaperDescription description, int which) { + mGetPackageMonitorCallCount++; + mWallpaperPackageMonitor = super.getWallpaperPackageMonitor(componentName, description, + which); return mWallpaperPackageMonitor; } diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java index 383bf2f68217..09aa23e713a5 100644 --- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java +++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java @@ -16,6 +16,10 @@ package com.android.wallpaperbackup; +import static android.app.Flags.FLAG_LIVE_WALLPAPER_CONTENT_HANDLING; + +import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_DESCRIPTION_LOCK; +import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_DESCRIPTION_SYSTEM; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_LOCK; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_SYSTEM; import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_LOCK; @@ -31,16 +35,20 @@ import android.app.WallpaperInfo; import android.app.backup.BackupAnnotations; import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger; +import android.app.wallpaper.WallpaperDescription; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.service.wallpaper.WallpaperService; import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -63,6 +71,10 @@ public class WallpaperEventLoggerTest { private WallpaperEventLogger mWallpaperEventLogger; private WallpaperInfo mWallpaperInfo; + private WallpaperDescription mWallpaperDescription; + + @Rule + public SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Before public void setUp() throws Exception { @@ -73,6 +85,8 @@ public class WallpaperEventLoggerTest { mWallpaperInfo = getWallpaperInfo(); mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent); + mWallpaperDescription = new WallpaperDescription.Builder().setComponent( + mWallpaperInfo.getComponent()).build(); } @Test @@ -263,6 +277,19 @@ public class WallpaperEventLoggerTest { } @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void onSystemLiveWallpaperRestoredWithDescription_logsSuccess() { + setUpLoggerForRestore(); + + mWallpaperEventLogger.onSystemLiveWallpaperRestoredWithDescription(mWallpaperDescription); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType( + WALLPAPER_DESCRIPTION_SYSTEM); + + assertThat(result).isNotNull(); + assertThat(result.getSuccessCount()).isEqualTo(1); + } + + @Test public void onLockLiveWallpaperRestored_logsSuccess() { setUpLoggerForRestore(); @@ -274,6 +301,17 @@ public class WallpaperEventLoggerTest { } @Test + public void onLockLiveWallpaperRestoredWithDescription_logsSuccess() { + setUpLoggerForRestore(); + + mWallpaperEventLogger.onLockLiveWallpaperRestoredWithDescription(mWallpaperDescription); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_DESCRIPTION_LOCK); + + assertThat(result).isNotNull(); + assertThat(result.getSuccessCount()).isEqualTo(1); + } + + @Test public void onImgWallpaperRestored_nullInfo_doesNotLogMetadata() { setUpLoggerForRestore(); @@ -286,7 +324,7 @@ public class WallpaperEventLoggerTest { @Test - public void onLiveWallpaperRestored_logsMetadata() { + public void onSystemLiveWallpaperRestored_logsMetadata() { setUpLoggerForRestore(); mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent()); @@ -296,6 +334,19 @@ public class WallpaperEventLoggerTest { assertThat(result.getMetadataHash()).isNotNull(); } + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void onSystemLiveWallpaperRestoredDescription_logsMetadata() { + setUpLoggerForRestore(); + + mWallpaperEventLogger.onSystemLiveWallpaperRestoredWithDescription(mWallpaperDescription); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType( + WALLPAPER_DESCRIPTION_SYSTEM); + + assertThat(result).isNotNull(); + assertThat(result.getMetadataHash()).isNotNull(); + } + @Test public void onSystemImgWallpaperRestoreFailed_logsFail() { @@ -373,7 +424,7 @@ public class WallpaperEventLoggerTest { } @Test - public void onWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() { + public void onSystemWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() { setUpLoggerForRestore(); mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent()); @@ -383,6 +434,41 @@ public class WallpaperEventLoggerTest { assertThat(result).isNull(); } + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void onSystemWallpaperRestoreException_descriptionProcessed_doesNotLogForSameImgType() { + setUpLoggerForRestore(); + mWallpaperEventLogger.onSystemLiveWallpaperRestoredWithDescription(mWallpaperDescription); + + mWallpaperEventLogger.onRestoreException(new Exception()); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); + + assertThat(result).isNull(); + } + + @Test + public void onLockWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() { + setUpLoggerForRestore(); + mWallpaperEventLogger.onLockLiveWallpaperRestored(mWallpaperInfo.getComponent()); + + mWallpaperEventLogger.onRestoreException(new Exception()); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); + + assertThat(result).isNull(); + } + + @Test + @EnableFlags(FLAG_LIVE_WALLPAPER_CONTENT_HANDLING) + public void onLockWallpaperRestoreException_descriptionProcessed_doesNotLogForSameImgType() { + setUpLoggerForRestore(); + mWallpaperEventLogger.onLockLiveWallpaperRestoredWithDescription(mWallpaperDescription); + + mWallpaperEventLogger.onRestoreException(new Exception()); + BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); + + assertThat(result).isNull(); + } + private BackupRestoreEventLogger.DataTypeResult getLogsForType(String dataType) { for (BackupRestoreEventLogger.DataTypeResult result : mEventLogger.getLoggingResults()) { if ((result.getDataType()).equals(dataType)) { diff --git a/ravenwood/scripts/ravenwood-stats-collector.sh b/ravenwood/scripts/ravenwood-stats-collector.sh index b83216af95fe..c2bf8d82e272 100755 --- a/ravenwood/scripts/ravenwood-stats-collector.sh +++ b/ravenwood/scripts/ravenwood-stats-collector.sh @@ -29,21 +29,46 @@ mkdir -p $out_dir mkdir -p $keep_all_dir mkdir -p $dump_dir -# Where the input files are. -path=$ANDROID_BUILD_TOP/out/host/linux-x86/testcases/ravenwood-stats-checker/x86_64/ -timestamp="$(date --iso-8601=seconds)" +stats_checker_module="ravenwood-stats-checker" +minfo=$OUT/module-info.json -m() { - ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@" -} +timestamp="$(date --iso-8601=seconds)" -# Building this will generate the files we need. -m ravenwood-stats-checker +# First, use jq to get the output files from the checker module. This will be something like this: +# +# --- +# out/host/linux-x86/nativetest64/ravenwood-stats-checker/framework-configinfrastructure_apis.csv +# out/host/linux-x86/nativetest64/ravenwood-stats-checker/framework-configinfrastructure_dump.txt +# : +# out/host/linux-x86/nativetest64/ravenwood-stats-checker/hoststubgen_services.core_stats.csv +# out/host/linux-x86/nativetest64/ravenwood-stats-checker/ravenwood-stats-checker +# --- +# Then, use grep to find the script's path (the last line in the above examle) +script_path="$( + jq -r ".\"$stats_checker_module\".installed | .[]" $minfo | + grep '/ravenwood-stats-checker$' +)" + +if [[ "$script_path" == "" ]] ; then + echo "Error: $stats_checker_module script not found from $minfo" + exit 1 +fi + +# This is the directory where our input files are. +script_dir="$ANDROID_BUILD_TOP/$(dirname "$script_path")" + +# Clear it before (re-)buildign the script, to make sure we won't have stale files. +rm -fr "$script_dir" + +# Then build it, which will also collect the input files in the same dir. +echo "Collecting the input files..." +m "$stats_checker_module" # Start... -cd $path +echo "Files directory is: $script_dir" +cd "$script_dir" dump() { local jar=$1 @@ -55,6 +80,7 @@ dump() { collect_stats() { local out="$1" + local desc="$2" { # Copy the header, with the first column appended. echo -n "Jar,Generated Date," @@ -66,11 +92,12 @@ collect_stats() { dump "framework-statsd" framework-statsd_stats.csv } > "$out" - echo "Stats CVS created at $out" + echo "Stats CVS created at $out$desc" } collect_apis() { local out="$1" + local desc="$2" { # Copy the header, with the first column appended. echo -n "Jar,Generated Date," @@ -82,12 +109,12 @@ collect_apis() { dump "framework-statsd" framework-statsd_apis.csv } > "$out" - echo "API CVS created at $out" + echo "API CVS created at $out$desc" } -collect_stats $stats -collect_apis $apis +collect_stats $stats " (import it as 'ravenwood_stats')" +collect_apis $apis " (import it as 'ravenwood_supported_apis')" cp *keep_all.txt $keep_all_dir echo "Keep all files created at:" diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/HostStubGenStats.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/HostStubGenStats.kt index 9045db210495..ea8c25b6833c 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/HostStubGenStats.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/HostStubGenStats.kt @@ -15,13 +15,24 @@ */ package com.android.hoststubgen +import com.android.hoststubgen.asm.ClassNodes import com.android.hoststubgen.asm.getOuterClassNameFromFullClassName import com.android.hoststubgen.asm.getPackageNameFromFullClassName import com.android.hoststubgen.filters.FilterPolicyWithReason +import com.android.hoststubgen.filters.StatsLabel import org.objectweb.asm.Opcodes import java.io.PrintWriter -open class HostStubGenStats { +/** + * TODO This is for the legacy API coverage stats CSV that shows how many APIs are "supported" + * in each class with some heuristics. We created [ApiDumper] later, which dumpps all methods + * with the "supported" status. We should update the coverage dashboard to use the [ApiDumper] + * output and remove this class, once we port all the heuristics to [ApiDumper] as well. + * (For example, this class ignores non-public and/or abstract methods, but [ApiDumper] shows + * all of them in the same way. We should probably mark them as "Boring" or maybe "Ignore" + * for [ApiDumper]) + */ +open class HostStubGenStats(val classes: ClassNodes) { data class Stats( var supported: Int = 0, var total: Int = 0, @@ -30,14 +41,6 @@ open class HostStubGenStats { private val stats = mutableMapOf<String, Stats>() - data class Api( - val fullClassName: String, - val methodName: String, - val methodDesc: String, - ) - - private val apis = mutableListOf<Api>() - fun onVisitPolicyForMethod( fullClassName: String, methodName: String, @@ -45,16 +48,16 @@ open class HostStubGenStats { policy: FilterPolicyWithReason, access: Int ) { - if (policy.policy.isSupported) { - apis.add(Api(fullClassName, methodName, descriptor)) - } - // Ignore methods that aren't public if ((access and Opcodes.ACC_PUBLIC) == 0) return // Ignore methods that are abstract if ((access and Opcodes.ACC_ABSTRACT) != 0) return + // Ignore methods where policy isn't relevant - if (policy.isIgnoredForStats) return + val statsLabel = policy.statsLabel + if (statsLabel == StatsLabel.Ignored) return + + val cn = classes.findClass(fullClassName) ?: return val packageName = getPackageNameFromFullClassName(fullClassName) val className = getOuterClassNameFromFullClassName(fullClassName) @@ -70,7 +73,7 @@ open class HostStubGenStats { val packageStats = stats.getOrPut(packageName) { Stats() } val classStats = packageStats.children.getOrPut(className) { Stats() } - if (policy.policy.isSupported) { + if (statsLabel == StatsLabel.Supported) { packageStats.supported += 1 classStats.supported += 1 } diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/dumper/ApiDumper.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/dumper/ApiDumper.kt index 5e4e70f0cbaa..bb8cdccafaa6 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/dumper/ApiDumper.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/dumper/ApiDumper.kt @@ -25,6 +25,7 @@ import com.android.hoststubgen.csvEscape import com.android.hoststubgen.filters.FilterPolicy import com.android.hoststubgen.filters.FilterPolicyWithReason import com.android.hoststubgen.filters.OutputFilter +import com.android.hoststubgen.filters.StatsLabel import com.android.hoststubgen.log import org.objectweb.asm.Type import org.objectweb.asm.tree.ClassNode @@ -44,7 +45,10 @@ class ApiDumper( val descriptor: String, ) - private val javaStandardApiPolicy = FilterPolicy.Keep.withReason("Java standard API") + private val javaStandardApiPolicy = FilterPolicy.Keep.withReason( + "Java standard API", + StatsLabel.Supported, + ) private val shownMethods = mutableSetOf<MethodKey>() @@ -53,7 +57,7 @@ class ApiDumper( */ fun dump() { pw.printf("PackageName,ClassName,FromSubclass,DeclareClass,MethodName,MethodDesc" + - ",Supported,Policy,Reason\n") + ",Supported,Policy,Reason,SupportedLabel\n") classes.forEach { classNode -> shownMethods.clear() @@ -68,23 +72,36 @@ class ApiDumper( methodClassName: String, methodName: String, methodDesc: String, - policy: FilterPolicyWithReason, + classPolicy: FilterPolicyWithReason, + methodPolicy: FilterPolicyWithReason, ) { + if (methodPolicy.statsLabel == StatsLabel.Ignored) { + return + } + // Label hack -- if the method is supported, but the class is boring, then the + // method is boring too. + var methodLabel = methodPolicy.statsLabel + if (methodLabel == StatsLabel.SupportedButBoring + && classPolicy.statsLabel == StatsLabel.SupportedButBoring) { + methodLabel = classPolicy.statsLabel + } + pw.printf( - "%s,%s,%d,%s,%s,%s,%d,%s,%s\n", + "%s,%s,%d,%s,%s,%s,%d,%s,%s,%s\n", csvEscape(classPackage), csvEscape(className), if (isSuperClass) { 1 } else { 0 }, csvEscape(methodClassName), csvEscape(methodName), csvEscape(methodDesc), - if (policy.policy.isSupported) { 1 } else { 0 }, - policy.policy, - csvEscape(policy.reason), + methodLabel.statValue, + methodPolicy.policy, + csvEscape(methodPolicy.reason), + methodLabel, ) } - private fun isDuplicate(methodName: String, methodDesc: String): Boolean { + private fun shownAlready(methodName: String, methodDesc: String): Boolean { val methodKey = MethodKey(methodName, methodDesc) if (shownMethods.contains(methodKey)) { @@ -98,6 +115,12 @@ class ApiDumper( dumpClass: ClassNode, methodClass: ClassNode, ) { + val classPolicy = filter.getPolicyForClass(dumpClass.name) + if (classPolicy.statsLabel == StatsLabel.Ignored) { + return + } + log.d("Class ${dumpClass.name} -- policy $classPolicy") + val pkg = getPackageNameFromFullClassName(dumpClass.name).toHumanReadableClassName() val cls = getClassNameFromFullClassName(dumpClass.name).toHumanReadableClassName() @@ -112,23 +135,23 @@ class ApiDumper( } } // If we already printed the method from a subclass, don't print it. - if (isDuplicate(method.name, method.desc)) { + if (shownAlready(method.name, method.desc)) { return@forEach } - val policy = filter.getPolicyForMethod(methodClass.name, method.name, method.desc) + val methodPolicy = filter.getPolicyForMethod(methodClass.name, method.name, method.desc) // Let's skip "Remove" APIs. Ideally we want to print it, just to make the CSV // complete, we still need to hide methods substituted (== @RavenwoodReplace) methods // and for now we don't have an easy way to detect it. - if (policy.policy == FilterPolicy.Remove) { + if (methodPolicy.policy == FilterPolicy.Remove) { return@forEach } val renameTo = filter.getRenameTo(methodClass.name, method.name, method.desc) dumpMethod(pkg, cls, isSuperClass, methodClass.name.toHumanReadableClassName(), - renameTo ?: method.name, method.desc, policy) + renameTo ?: method.name, method.desc, classPolicy, methodPolicy) } // Dump super class methods. @@ -155,10 +178,13 @@ class ApiDumper( dump(dumpClass, methodClass) return } - if (methodClassName.startsWith("java/") || - methodClassName.startsWith("javax/") - ) { - dumpStandardClass(dumpClass, methodClassName) + + // Dump overriding methods from Java standard classes, except for the Object methods, + // which are obvious. + if (methodClassName.startsWith("java/") || methodClassName.startsWith("javax/")) { + if (methodClassName != "java/lang/Object") { + dumpStandardClass(dumpClass, methodClassName) + } return } log.w("Super class or interface $methodClassName (used by ${dumpClass.name}) not found.") @@ -188,12 +214,12 @@ class ApiDumper( val methodDesc = Type.getMethodDescriptor(method) // If we already printed the method from a subclass, don't print it. - if (isDuplicate(methodName, methodDesc)) { + if (shownAlready(methodName, methodDesc)) { return@forEach } dumpMethod(pkg, cls, true, methodClassName, - methodName, methodDesc, javaStandardApiPolicy) + methodName, methodDesc, javaStandardApiPolicy, javaStandardApiPolicy) } } catch (e: ClassNotFoundException) { log.w("JVM type $methodClassName (used by ${dumpClass.name}) not found.") diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicy.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicy.kt index 81c26ffdf1f4..c3c870f59347 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicy.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicy.kt @@ -155,7 +155,10 @@ enum class FilterPolicy(val policyStringOrPrefix: String) { /** * Create a [FilterPolicyWithReason] with a given reason. */ - fun withReason(reason: String): FilterPolicyWithReason { - return FilterPolicyWithReason(this, reason) + fun withReason( + reason: String, + statsLabelOverride: StatsLabel? = null, + ): FilterPolicyWithReason { + return FilterPolicyWithReason(this, reason, statsLabelOverride = statsLabelOverride) } } diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicyWithReason.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicyWithReason.kt index b10165b835f2..7358a0bfb3e6 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicyWithReason.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/FilterPolicyWithReason.kt @@ -16,32 +16,54 @@ package com.android.hoststubgen.filters /** + * How each entry should be handled on the dashboard. + */ +enum class StatsLabel(val statValue: Int, val label: String) { + /** Entry shouldn't show up in the dashboard. */ + Ignored(-1, ""), + + /** Entry should be shown as "not supported" */ + NotSupported(0, "NotSupported"), + + /** + * Entry should be shown as "supported", but are too "boring" to show on the dashboard, + * e.g. annotation classes. + */ + SupportedButBoring(1, "Boring"), + + /** Entry should be shown as "supported" */ + Supported(2, "Supported"), +} + +/** * Captures a [FilterPolicy] with a human-readable reason. */ data class FilterPolicyWithReason ( - val policy: FilterPolicy, - val reason: String = "", + val policy: FilterPolicy, + val reason: String = "", + private val statsLabelOverride: StatsLabel? = null ) { /** * Return a new [FilterPolicy] with an updated reason, while keeping the original reason * as an "inner-reason". */ - fun wrapReason(reason: String): FilterPolicyWithReason { - return FilterPolicyWithReason(policy, "$reason [inner-reason: ${this.reason}]") + fun wrapReason(reason: String, statsLabelOverride: StatsLabel? = null): FilterPolicyWithReason { + return FilterPolicyWithReason( + policy, + "$reason [inner-reason: ${this.reason}]", + statsLabelOverride = statsLabelOverride, + ) } override fun toString(): String { - return "[$policy - reason: $reason]" + return "[$policy/$statsLabel - reason: $reason]" } - /** Returns whether this policy should be ignored for stats. */ - val isIgnoredForStats: Boolean - get() { - return reason.contains("anonymous-inner-class") - || reason.contains("is-annotation") - || reason.contains("is-enum") - || reason.contains("is-synthetic-method") - || reason.contains("special-class") - || reason.contains("substitute-to") + val statsLabel: StatsLabel get() { + statsLabelOverride?.let { return it } + if (policy.isSupported) { + return StatsLabel.Supported } + return StatsLabel.NotSupported + } } diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/ImplicitOutputFilter.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/ImplicitOutputFilter.kt index d44d016f7c5b..1145da635606 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/ImplicitOutputFilter.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/ImplicitOutputFilter.kt @@ -48,7 +48,11 @@ class ImplicitOutputFilter( // If the outer class needs to be in impl, it should be in impl too. val outerPolicy = outermostFilter.getPolicyForClass(cn.outerClass) if (outerPolicy.policy.needsInOutput) { - return FilterPolicy.KeepClass.withReason("anonymous-inner-class") + // We keep this class, but don't need to show it in the dashboard. + return FilterPolicy.KeepClass.withReason( + "anonymous-inner-class", + StatsLabel.Ignored, + ) } } return null @@ -62,6 +66,15 @@ class ImplicitOutputFilter( // Use the implicit policy, if any. getClassImplicitPolicy(cn)?.let { return it } + // If it's an annotation class and we need to keep it, then + // change the reason to hide it from the stats. + if (cn.isAnnotation() && fallback.policy.needsInOutput) { + return FilterPolicy.KeepClass.withReason( + "is-annotation", + StatsLabel.Ignored, + ) + } + return fallback } @@ -102,14 +115,20 @@ class ImplicitOutputFilter( if (cn.isEnum()) { mn?.let { mn -> if (isAutoGeneratedEnumMember(mn)) { - return memberPolicy.withReason(classPolicy.reason).wrapReason("is-enum") + return memberPolicy.withReason(classPolicy.reason).wrapReason( + "is-enum", + StatsLabel.Ignored, + ) } } } // Keep (or stub) all members of annotations. if (cn.isAnnotation()) { - return memberPolicy.withReason(classPolicy.reason).wrapReason("is-annotation") + return memberPolicy.withReason(classPolicy.reason).wrapReason( + "is-annotation", + StatsLabel.Ignored, + ) } mn?.let { @@ -117,7 +136,8 @@ class ImplicitOutputFilter( // For synthetic methods (such as lambdas), let's just inherit the class's // policy. return memberPolicy.withReason(classPolicy.reason).wrapReason( - "is-synthetic-method" + "is-synthetic-method", + StatsLabel.Ignored, ) } } diff --git a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/KeepNativeFilter.kt b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/KeepNativeFilter.kt index 00e7d77fa6e7..57309b49a2cd 100644 --- a/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/KeepNativeFilter.kt +++ b/ravenwood/tools/hoststubgen/lib/com/android/hoststubgen/filters/KeepNativeFilter.kt @@ -22,6 +22,9 @@ import com.android.hoststubgen.asm.isNative * For native methods that weren't handled by outer filters, we keep it so that * native method registration will not crash at runtime. Ideally we shouldn't need * this, but in practice unsupported native method registrations do occur. + * + * Native methods kept by this filter will all have a "Keep" policy, but they won't show + * up as "supported" in the stats dashboard beucase we set reallySupported to false. */ class KeepNativeFilter( private val classes: ClassNodes, @@ -34,7 +37,7 @@ class KeepNativeFilter( ): FilterPolicyWithReason { return classes.findMethod(className, methodName, descriptor)?.let { mn -> if (mn.isNative()) { - FilterPolicy.Keep.withReason("native-preserve") + FilterPolicy.Keep.withReason("native-preserve", StatsLabel.NotSupported) } else { null } diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt index 2edcb2a6c199..3291ff6b8bc6 100644 --- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt +++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt @@ -31,12 +31,13 @@ import org.apache.commons.compress.archivers.zip.ZipFile class HostStubGen(val options: HostStubGenOptions) { fun run() { val errors = HostStubGenErrors() - val stats = HostStubGenStats() val inJar = ZipFile(options.inJar.get) // Load all classes. val allClasses = ClassNodes.loadClassStructures(inJar, options.inJar.get) + val stats = HostStubGenStats(allClasses) + // Dump the classes, if specified. options.inputJarDumpFile.ifSet { log.iTime("Dump file created at $it") { diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework-dump-test.py b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework-dump-test.py index 761748265726..0c2269ab5e0d 100755 --- a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework-dump-test.py +++ b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework-dump-test.py @@ -33,7 +33,7 @@ def run_diff(file1, file2): '--ignore-space-change', # Ignore the class file version. - '--ignore-matching-lines=^ *\(major\|minor\) version:$', + '--ignore-matching-lines=^ *\\(major\\|minor\\) version:$', # We shouldn't need `--ignore-matching-lines`, but somehow # the golden files were generated without these lines for b/388562869, diff --git a/services/core/java/com/android/server/adb/AdbDebuggingManager.java b/services/core/java/com/android/server/adb/AdbDebuggingManager.java index a4cbf420b93b..193d82743a34 100644 --- a/services/core/java/com/android/server/adb/AdbDebuggingManager.java +++ b/services/core/java/com/android/server/adb/AdbDebuggingManager.java @@ -788,7 +788,6 @@ public class AdbDebuggingManager { // === Messages we can send to adbd =========== static final String MSG_DISCONNECT_DEVICE = "DD"; - static final String MSG_DISABLE_ADBDWIFI = "DA"; @Nullable @VisibleForTesting AdbKeyStore mAdbKeyStore; @@ -1093,9 +1092,6 @@ public class AdbDebuggingManager { setAdbConnectionInfo(null); mContext.unregisterReceiver(mBroadcastReceiver); - if (mThread != null) { - mThread.sendResponse(MSG_DISABLE_ADBDWIFI); - } onAdbdWifiServerDisconnected(-1); stopAdbDebuggingThread(); break; diff --git a/services/core/java/com/android/server/am/AppStartInfoTracker.java b/services/core/java/com/android/server/am/AppStartInfoTracker.java index 517279bd7527..8b3eb48fc783 100644 --- a/services/core/java/com/android/server/am/AppStartInfoTracker.java +++ b/services/core/java/com/android/server/am/AppStartInfoTracker.java @@ -98,6 +98,9 @@ public final class AppStartInfoTracker { @VisibleForTesting static final int APP_START_INFO_HISTORY_LIST_SIZE = 16; + @VisibleForTesting + static final long APP_START_INFO_HISTORY_LENGTH_MS = TimeUnit.DAYS.toMillis(14); + /** * The max number of records that can be present in {@link mInProgressRecords}. * @@ -120,9 +123,13 @@ public final class AppStartInfoTracker { * Monotonic clock which does not reset on reboot. * * Time for offset is persisted along with records, see {@link #persistProcessStartInfo}. - * This does not follow the recommendation of {@link MonotonicClock} to persist on shutdown as - * it's ok in this case to lose any time change past the last persist as records added since - * then will be lost as well and the purpose of this clock is to keep records in order. + * This does not currently follow the recommendation of {@link MonotonicClock} to persist on + * shutdown as it's ok in this case to lose any time change past the last persist as records + * added since then will be lost as well. Since this time is used for cleanup as well, the + * potential old offset may result in the cleanup window being extended slightly beyond the + * targeted 14 days. + * + * TODO: b/402794215 - Persist on shutdown once persist performance is sufficiently improved. */ @VisibleForTesting MonotonicClock mMonotonicClock = null; @@ -296,7 +303,7 @@ public final class AppStartInfoTracker { if (!mEnabled) { return; } - ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTime()); + ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTimeMs()); start.setStartupState(ApplicationStartInfo.STARTUP_STATE_STARTED); start.setIntent(intent); start.setStartType(ApplicationStartInfo.START_TYPE_UNSET); @@ -454,7 +461,7 @@ public final class AppStartInfoTracker { if (!mEnabled) { return; } - ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTime()); + ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTimeMs()); addBaseFieldsFromProcessRecord(start, app); start.setStartupState(ApplicationStartInfo.STARTUP_STATE_STARTED); start.addStartupTimestamp( @@ -484,7 +491,7 @@ public final class AppStartInfoTracker { if (!mEnabled) { return; } - ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTime()); + ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTimeMs()); addBaseFieldsFromProcessRecord(start, app); start.setStartupState(ApplicationStartInfo.STARTUP_STATE_STARTED); start.addStartupTimestamp( @@ -511,7 +518,7 @@ public final class AppStartInfoTracker { if (!mEnabled) { return; } - ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTime()); + ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTimeMs()); addBaseFieldsFromProcessRecord(start, app); start.setStartupState(ApplicationStartInfo.STARTUP_STATE_STARTED); start.addStartupTimestamp( @@ -533,7 +540,7 @@ public final class AppStartInfoTracker { if (!mEnabled) { return; } - ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTime()); + ApplicationStartInfo start = new ApplicationStartInfo(getMonotonicTimeMs()); addBaseFieldsFromProcessRecord(start, app); start.setStartupState(ApplicationStartInfo.STARTUP_STATE_STARTED); start.addStartupTimestamp( @@ -721,8 +728,8 @@ public final class AppStartInfoTracker { Collections.sort( list, (a, b) -> - Long.compare(b.getMonoticCreationTimeMs(), - a.getMonoticCreationTimeMs())); + Long.compare(b.getMonotonicCreationTimeMs(), + a.getMonotonicCreationTimeMs())); int size = list.size(); if (maxNum > 0) { size = Math.min(size, maxNum); @@ -1098,7 +1105,7 @@ public final class AppStartInfoTracker { mLastAppStartInfoPersistTimestamp = now; } } - proto.write(AppsStartInfoProto.MONOTONIC_TIME, getMonotonicTime()); + proto.write(AppsStartInfoProto.MONOTONIC_TIME, getMonotonicTimeMs()); if (succeeded) { proto.flush(); af.finishWrite(out); @@ -1219,7 +1226,11 @@ public final class AppStartInfoTracker { } } - private long getMonotonicTime() { + /** + * Monotonic time that doesn't change with reboot or device time change for ordering records. + */ + @VisibleForTesting + public long getMonotonicTimeMs() { if (mMonotonicClock == null) { // This should never happen. Return 0 to not interfere with past or future records. return 0; @@ -1229,7 +1240,7 @@ public final class AppStartInfoTracker { /** A container class of (@link android.app.ApplicationStartInfo) */ final class AppStartInfoContainer { - private ArrayList<ApplicationStartInfo> mInfos; // Always kept sorted by first timestamp. + private ArrayList<ApplicationStartInfo> mInfos; // Always kept sorted by monotonic time. private int mMaxCapacity; private int mUid; private boolean mMonitoringModeEnabled = false; @@ -1260,9 +1271,12 @@ public final class AppStartInfoTracker { return; } - // Sort records so we can remove the least recent ones. - Collections.sort(mInfos, (a, b) -> - Long.compare(b.getMonoticCreationTimeMs(), a.getMonoticCreationTimeMs())); + if (!android.app.Flags.appStartInfoKeepRecordsSorted()) { + // Sort records so we can remove the least recent ones. + Collections.sort(mInfos, (a, b) -> + Long.compare(b.getMonotonicCreationTimeMs(), + a.getMonotonicCreationTimeMs())); + } // Remove records and trim list object back to size. mInfos.subList(0, mInfos.size() - getMaxCapacity()).clear(); @@ -1277,25 +1291,34 @@ public final class AppStartInfoTracker { @GuardedBy("mLock") void addStartInfoLocked(ApplicationStartInfo info) { - int size = mInfos.size(); - if (size >= getMaxCapacity()) { - // Remove oldest record if size is over max capacity. - int oldestIndex = -1; - long oldestTimeStamp = Long.MAX_VALUE; - for (int i = 0; i < size; i++) { - ApplicationStartInfo startInfo = mInfos.get(i); - if (startInfo.getMonoticCreationTimeMs() < oldestTimeStamp) { - oldestTimeStamp = startInfo.getMonoticCreationTimeMs(); - oldestIndex = i; - } + if (android.app.Flags.appStartInfoKeepRecordsSorted()) { + while (mInfos.size() >= getMaxCapacity()) { + // Expected to execute at most once. + mInfos.removeLast(); } - if (oldestIndex >= 0) { - mInfos.remove(oldestIndex); + mInfos.addFirst(info); + } else { + int size = mInfos.size(); + if (size >= getMaxCapacity()) { + // Remove oldest record if size is over max capacity. + int oldestIndex = -1; + long oldestTimeStamp = Long.MAX_VALUE; + for (int i = 0; i < size; i++) { + ApplicationStartInfo startInfo = mInfos.get(i); + if (startInfo.getMonotonicCreationTimeMs() < oldestTimeStamp) { + oldestTimeStamp = startInfo.getMonotonicCreationTimeMs(); + oldestIndex = i; + } + } + if (oldestIndex >= 0) { + mInfos.remove(oldestIndex); + } } + mInfos.add(info); + Collections.sort(mInfos, (a, b) -> + Long.compare(b.getMonotonicCreationTimeMs(), + a.getMonotonicCreationTimeMs())); } - mInfos.add(info); - Collections.sort(mInfos, (a, b) -> - Long.compare(b.getMonoticCreationTimeMs(), a.getMonoticCreationTimeMs())); } /** @@ -1439,9 +1462,25 @@ public final class AppStartInfoTracker { long token = proto.start(fieldId); proto.write(AppsStartInfoProto.Package.User.UID, mUid); int size = mInfos.size(); - for (int i = 0; i < size; i++) { - mInfos.get(i).writeToProto(proto, AppsStartInfoProto.Package.User.APP_START_INFO, - byteArrayOutputStream, objectOutputStream, typedXmlSerializer); + if (android.app.Flags.appStartInfoCleanupOldRecords()) { + long removeOlderThan = getMonotonicTimeMs() - APP_START_INFO_HISTORY_LENGTH_MS; + // Iterate backwards so we can remove old records as we go. + for (int i = size - 1; i >= 0; i--) { + if (mInfos.get(i).getMonotonicCreationTimeMs() < removeOlderThan) { + // Remove the record. + mInfos.remove(i); + } else { + mInfos.get(i).writeToProto( + proto, AppsStartInfoProto.Package.User.APP_START_INFO, + byteArrayOutputStream, objectOutputStream, typedXmlSerializer); + } + } + } else { + for (int i = 0; i < size; i++) { + mInfos.get(i).writeToProto( + proto, AppsStartInfoProto.Package.User.APP_START_INFO, + byteArrayOutputStream, objectOutputStream, typedXmlSerializer); + } } proto.write(AppsStartInfoProto.Package.User.MONITORING_ENABLED, mMonitoringModeEnabled); proto.end(token); @@ -1466,7 +1505,13 @@ public final class AppStartInfoTracker { info.readFromProto(proto, AppsStartInfoProto.Package.User.APP_START_INFO, byteArrayInputStream, objectInputStream, typedXmlPullParser); info.setPackageName(packageName); - mInfos.add(info); + if (android.app.Flags.appStartInfoKeepRecordsSorted()) { + // Since the writes are done from oldest to newest, each additional + // record will be newer than the previous so use addFirst. + mInfos.addFirst(info); + } else { + mInfos.add(info); + } break; case (int) AppsStartInfoProto.Package.User.MONITORING_ENABLED: mMonitoringModeEnabled = proto.readBoolean( diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 233b577e1c61..33a7e7476cf6 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -7724,6 +7724,7 @@ public class UserManagerService extends IUserManager.Stub { pw.print(" Has profile owner: "); pw.println(mIsUserManaged.get(userId)); + pw.println(" Restrictions:"); synchronized (mRestrictionsLock) { UserRestrictionsUtils.dumpRestrictions( @@ -7756,6 +7757,9 @@ public class UserManagerService extends IUserManager.Stub { } } + pw.print(" Can have profile: "); + pw.println(userInfo.canHaveProfile()); + if (userData.userProperties != null) { userData.userProperties.println(pw, " "); } diff --git a/services/core/java/com/android/server/security/advancedprotection/AdvancedProtectionService.java b/services/core/java/com/android/server/security/advancedprotection/AdvancedProtectionService.java index f5daa8036726..8c3b7c606f04 100644 --- a/services/core/java/com/android/server/security/advancedprotection/AdvancedProtectionService.java +++ b/services/core/java/com/android/server/security/advancedprotection/AdvancedProtectionService.java @@ -17,11 +17,13 @@ package com.android.server.security.advancedprotection; import static android.provider.Settings.Secure.ADVANCED_PROTECTION_MODE; +import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import android.Manifest; import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; +import android.app.StatsManager; import android.content.Context; import android.content.SharedPreferences; import android.os.Binder; @@ -45,6 +47,7 @@ import android.security.advancedprotection.IAdvancedProtectionService; import android.security.advancedprotection.AdvancedProtectionProtoEnums; import android.util.ArrayMap; import android.util.Slog; +import android.util.StatsEvent; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; @@ -137,6 +140,15 @@ public class AdvancedProtectionService extends IAdvancedProtectionService.Stub mProviders.add(new DisallowWepAdvancedProtectionProvider()); } + private void initLogging() { + StatsManager statsManager = mContext.getSystemService(StatsManager.class); + statsManager.setPullAtomCallback( + FrameworkStatsLog.ADVANCED_PROTECTION_STATE_INFO, + null, // use default PullAtomMetadata values + DIRECT_EXECUTOR, + new AdvancedProtectionStatePullAtomCallback()); + } + // Only for tests @VisibleForTesting AdvancedProtectionService(@NonNull Context context, @NonNull AdvancedProtectionStore store, @@ -399,6 +411,7 @@ public class AdvancedProtectionService extends IAdvancedProtectionService.Stub Slog.i(TAG, "Advanced protection is enabled"); } mService.initFeatures(enabled); + mService.initLogging(); } } } @@ -500,4 +513,22 @@ public class AdvancedProtectionService extends IAdvancedProtectionService.Stub } } } + + private class AdvancedProtectionStatePullAtomCallback + implements StatsManager.StatsPullAtomCallback { + + @Override + public int onPullAtom(int atomTag, List<StatsEvent> data) { + if (atomTag != FrameworkStatsLog.ADVANCED_PROTECTION_STATE_INFO) { + return StatsManager.PULL_SKIP; + } + + data.add( + FrameworkStatsLog.buildStatsEvent( + FrameworkStatsLog.ADVANCED_PROTECTION_STATE_INFO, + /*enabled*/ isAdvancedProtectionEnabledInternal(), + /*hours_since_enabled*/ hoursSinceLastChange())); + return StatsManager.PULL_SUCCESS; + } + } } diff --git a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java index 424439df3c4b..e22bc7d0719e 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java @@ -863,7 +863,7 @@ public class WallpaperCropper { double maxDisplayToImageRatio = Math.max((double) displaySize.x / croppedImageBound.width(), (double) displaySize.y / croppedImageBound.height()); - if (maxDisplayToImageRatio > 1.3) { + if (maxDisplayToImageRatio > 1.5) { return false; } diff --git a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java index a731bf7c64b3..70fc6bace868 100644 --- a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java +++ b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java @@ -82,6 +82,7 @@ abstract class AbsAppSnapshotController<TYPE extends WindowContainer, */ @VisibleForTesting static final int SNAPSHOT_MODE_NONE = 2; + static final float THEME_SNAPSHOT_MIN_Length = 128.0f; protected final WindowManagerService mService; protected final float mHighResSnapshotScale; @@ -436,14 +437,21 @@ abstract class AbsAppSnapshotController<TYPE extends WindowContainer, final Rect taskBounds = source.getBounds(); final InsetsState insetsState = mainWindow.getInsetsStateWithVisibilityOverride(); final Rect systemBarInsets = getSystemBarInsets(mainWindow.getFrame(), insetsState); + final int taskWidth = taskBounds.width(); + final int taskHeight = taskBounds.height(); + float scale = mHighResSnapshotScale; + if (Flags.reduceTaskSnapshotMemoryUsage()) { + final int minLength = Math.min(taskWidth, taskHeight); + if (THEME_SNAPSHOT_MIN_Length < minLength) { + scale = Math.min(THEME_SNAPSHOT_MIN_Length / minLength, scale); + } + } final SnapshotDrawerUtils.SystemBarBackgroundPainter decorPainter = new SnapshotDrawerUtils.SystemBarBackgroundPainter(attrs.flags, attrs.privateFlags, attrs.insetsFlags.appearance, taskDescription, - mHighResSnapshotScale, mainWindow.getRequestedVisibleTypes()); - final int taskWidth = taskBounds.width(); - final int taskHeight = taskBounds.height(); - final int width = (int) (taskWidth * mHighResSnapshotScale); - final int height = (int) (taskHeight * mHighResSnapshotScale); + scale, mainWindow.getRequestedVisibleTypes()); + final int width = (int) (taskWidth * scale); + final int height = (int) (taskHeight * scale); final RenderNode node = RenderNode.create("SnapshotController", null); node.setLeftTopRightBottom(0, 0, width, height); node.setClipToBounds(false); diff --git a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java index 5cc186c40b6c..a19f4388a7c8 100644 --- a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java +++ b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java @@ -272,6 +272,12 @@ class ActivityStartInterceptor { mActivityOptions = interceptResult.getActivityOptions(); mCallingPid = mRealCallingPid; mCallingUid = mRealCallingUid; + // When an activity launch is intercepted, Intent#prepareToLeaveProcess is not called + // since the interception happens in the system_server. So if any activity is calling + // a trampoline activity, the keys do not get collected. Since all the interceptors + // are present in the system_server, add the creator token before launching the + // intercepted intent. + mService.mAmInternal.addCreatorToken(mIntent, mCallingPackage); if (interceptResult.isActivityResolved()) { return true; } diff --git a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java index fee5566af484..d8087265c1d3 100644 --- a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java +++ b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java @@ -69,11 +69,11 @@ public class DesktopAppCompatAspectRatioPolicy { * Calculates the final aspect ratio of an launching activity based on the task it will be * launched in. Takes into account any min or max aspect ratio constraints. */ - float calculateAspectRatio(@NonNull Task task) { + float calculateAspectRatio(@NonNull Task task, boolean hasOrientationMismatch) { final float maxAspectRatio = getMaxAspectRatio(); final float minAspectRatio = getMinAspectRatio(task); float desiredAspectRatio = 0; - desiredAspectRatio = getDesiredAspectRatio(task); + desiredAspectRatio = getDesiredAspectRatio(task, hasOrientationMismatch); if (maxAspectRatio >= 1 && desiredAspectRatio > maxAspectRatio) { desiredAspectRatio = maxAspectRatio; } else if (minAspectRatio >= 1 && desiredAspectRatio < minAspectRatio) { @@ -87,13 +87,14 @@ public class DesktopAppCompatAspectRatioPolicy { * any min or max aspect ratio constraints. */ @VisibleForTesting - float getDesiredAspectRatio(@NonNull Task task) { + float getDesiredAspectRatio(@NonNull Task task, boolean hasOrientationMismatch) { final float letterboxAspectRatioOverride = getFixedOrientationLetterboxAspectRatio(task); // Aspect ratio as suggested by the system. Apps requested mix/max aspect ratio will // be respected in #calculateAspectRatio. if (isDefaultMultiWindowLetterboxAspectRatioDesired(task)) { return DEFAULT_LETTERBOX_ASPECT_RATIO_FOR_MULTI_WINDOW; - } else if (letterboxAspectRatioOverride > MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO) { + } else if (hasOrientationMismatch + && letterboxAspectRatioOverride > MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO) { return letterboxAspectRatioOverride; } return AppCompatUtils.computeAspectRatio(task.getDisplayArea().getBounds()); diff --git a/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java index d9354323ae7c..83ca5f6f83f4 100644 --- a/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java +++ b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java @@ -17,7 +17,6 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LOCKED; -import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; import static android.content.pm.ActivityInfo.isFixedOrientation; import static android.content.pm.ActivityInfo.isFixedOrientationLandscape; import static android.content.pm.ActivityInfo.isFixedOrientationPortrait; @@ -32,8 +31,8 @@ import static com.android.server.wm.LaunchParamsUtil.calculateLayoutBounds; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions; -import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.pm.ActivityInfo.WindowLayout; +import android.content.res.Configuration; import android.graphics.Rect; import android.os.SystemProperties; import android.util.Size; @@ -152,19 +151,25 @@ public final class DesktopModeBoundsCalculator { } final DesktopAppCompatAspectRatioPolicy desktopAppCompatAspectRatioPolicy = activity.mAppCompatController.getDesktopAspectRatioPolicy(); - float appAspectRatio = desktopAppCompatAspectRatioPolicy.calculateAspectRatio(task); + final int stableBoundsOrientation = stableBounds.height() >= stableBounds.width() + ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; + int activityOrientation = getActivityConfigurationOrientation( + activity, task, stableBoundsOrientation); + // Use orientation mismatch to resolve aspect ratio to match fixed orientation letterboxing + // policy in {@link ActivityRecord.resolveFixedOrientationConfiguration} + final boolean hasOrientationMismatch = stableBoundsOrientation != activityOrientation; + float appAspectRatio = desktopAppCompatAspectRatioPolicy.calculateAspectRatio( + task, hasOrientationMismatch); final float tdaWidth = stableBounds.width(); final float tdaHeight = stableBounds.height(); - final int taskConfigOrientation = task.getConfiguration().orientation; - final int activityOrientation = getActivityOrientation(activity, task); - final Size initialSize = switch (taskConfigOrientation) { + final Size initialSize = switch (stableBoundsOrientation) { case ORIENTATION_LANDSCAPE -> { // Device in landscape orientation. if (appAspectRatio == 0) { appAspectRatio = 1; } if (canChangeAspectRatio(desktopAppCompatAspectRatioPolicy, task)) { - if (isFixedOrientationPortrait(activityOrientation)) { + if (hasOrientationMismatch) { // For portrait resizeable activities, respect apps fullscreen width but // apply ideal size height. yield new Size((int) ((tdaHeight / appAspectRatio) + 0.5f), @@ -183,7 +188,7 @@ public final class DesktopModeBoundsCalculator { final int customPortraitWidthForLandscapeApp = screenBounds.width() - (DESKTOP_MODE_LANDSCAPE_APP_PADDING * 2); if (canChangeAspectRatio(desktopAppCompatAspectRatioPolicy, task)) { - if (isFixedOrientationLandscape(activityOrientation)) { + if (hasOrientationMismatch) { if (appAspectRatio == 0) { appAspectRatio = tdaWidth / (tdaWidth - 1); } @@ -198,7 +203,7 @@ public final class DesktopModeBoundsCalculator { if (appAspectRatio == 0) { appAspectRatio = 1; } - if (isFixedOrientationLandscape(activityOrientation)) { + if (hasOrientationMismatch) { // For landscape unresizeable activities, apply custom app width to ideal size // and calculate maximum size with this area while maintaining original aspect // ratio. @@ -230,19 +235,23 @@ public final class DesktopModeBoundsCalculator { && !desktopAppCompatAspectRatioPolicy.hasMinAspectRatioOverride(task); } - private static @ScreenOrientation int getActivityOrientation( - @NonNull ActivityRecord activity, @NonNull Task task) { + private static @Configuration.Orientation int getActivityConfigurationOrientation( + @NonNull ActivityRecord activity, @NonNull Task task, + @Configuration.Orientation int stableBoundsOrientation) { final int activityOrientation = activity.getOverrideOrientation(); final DesktopAppCompatAspectRatioPolicy desktopAppCompatAspectRatioPolicy = activity.mAppCompatController.getDesktopAspectRatioPolicy(); - if (desktopAppCompatAspectRatioPolicy.shouldApplyUserMinAspectRatioOverride(task) + if ((desktopAppCompatAspectRatioPolicy.shouldApplyUserMinAspectRatioOverride(task) && (!isFixedOrientation(activityOrientation) - || activityOrientation == SCREEN_ORIENTATION_LOCKED)) { + || activityOrientation == SCREEN_ORIENTATION_LOCKED)) + || isFixedOrientationPortrait(activityOrientation)) { // If a user aspect ratio override should be applied, treat the activity as portrait if // it has not specified a fix orientation. - return SCREEN_ORIENTATION_PORTRAIT; + return ORIENTATION_PORTRAIT; } - return activityOrientation; + // If activity orientation is undefined inherit task orientation. + return isFixedOrientationLandscape(activityOrientation) + ? ORIENTATION_LANDSCAPE : stableBoundsOrientation; } /** @@ -252,7 +261,7 @@ public final class DesktopModeBoundsCalculator { // TODO(b/400617906): Merge duplicate initial bounds calculations to shared class. @NonNull private static Size maximizeSizeGivenAspectRatio( - @ScreenOrientation int orientation, + @Configuration.Orientation int orientation, @NonNull Size targetArea, float aspectRatio, int captionHeight @@ -261,7 +270,7 @@ public final class DesktopModeBoundsCalculator { final int targetWidth = targetArea.getWidth(); final int finalHeight; final int finalWidth; - if (isFixedOrientationPortrait(orientation)) { + if (orientation == ORIENTATION_PORTRAIT) { // Portrait activity. // Calculate required width given ideal height and aspect ratio. int tempWidth = (int) (targetHeight / aspectRatio); diff --git a/services/core/java/com/android/server/wm/SnapshotPersistQueue.java b/services/core/java/com/android/server/wm/SnapshotPersistQueue.java index eafc8be7bf77..016cebac2b86 100644 --- a/services/core/java/com/android/server/wm/SnapshotPersistQueue.java +++ b/services/core/java/com/android/server/wm/SnapshotPersistQueue.java @@ -24,6 +24,10 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.NonNull; import android.graphics.Bitmap; +import android.graphics.PixelFormat; +import android.hardware.HardwareBuffer; +import android.media.Image; +import android.media.ImageReader; import android.os.Process; import android.os.SystemClock; import android.os.Trace; @@ -33,10 +37,12 @@ import android.window.TaskSnapshot; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.policy.TransitionAnimation; import com.android.server.LocalServices; import com.android.server.pm.UserManagerInternal; import com.android.server.wm.BaseAppSnapshotPersister.PersistInfoProvider; import com.android.server.wm.nano.WindowManagerProtos.TaskSnapshotProto; +import com.android.window.flags.Flags; import java.io.File; import java.io.FileOutputStream; @@ -400,23 +406,20 @@ class SnapshotPersistQueue { Slog.e(TAG, "Invalid task snapshot hw buffer, taskId=" + mId); return false; } - final Bitmap bitmap = Bitmap.wrapHardwareBuffer( - mSnapshot.getHardwareBuffer(), mSnapshot.getColorSpace()); - if (bitmap == null) { - Slog.e(TAG, "Invalid task snapshot hw bitmap"); - return false; - } - final Bitmap swBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false /* isMutable */); + final HardwareBuffer hwBuffer = mSnapshot.getHardwareBuffer(); + final int width = hwBuffer.getWidth(); + final int height = hwBuffer.getHeight(); + final int pixelFormat = hwBuffer.getFormat(); + final Bitmap swBitmap = !Flags.reduceTaskSnapshotMemoryUsage() + || (pixelFormat != PixelFormat.RGB_565 && pixelFormat != PixelFormat.RGBA_8888) + || !mSnapshot.isRealSnapshot() + || TransitionAnimation.hasProtectedContent(hwBuffer) + ? copyToSwBitmapReadBack() + : copyToSwBitmapDirect(width, height, pixelFormat); if (swBitmap == null) { - Slog.e(TAG, "Bitmap conversion from (config=" + bitmap.getConfig() + ", isMutable=" - + bitmap.isMutable() + ") to (config=ARGB_8888, isMutable=false) failed."); return false; } - final int width = bitmap.getWidth(); - final int height = bitmap.getHeight(); - bitmap.recycle(); - final File file = mPersistInfoProvider.getHighResolutionBitmapFile(mId, mUserId); try (FileOutputStream fos = new FileOutputStream(file)) { swBitmap.compress(JPEG, COMPRESS_QUALITY, fos); @@ -448,6 +451,58 @@ class SnapshotPersistQueue { return true; } + private Bitmap copyToSwBitmapReadBack() { + final Bitmap bitmap = Bitmap.wrapHardwareBuffer( + mSnapshot.getHardwareBuffer(), mSnapshot.getColorSpace()); + if (bitmap == null) { + Slog.e(TAG, "Invalid task snapshot hw bitmap"); + return null; + } + + final Bitmap swBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false /* isMutable */); + if (swBitmap == null) { + Slog.e(TAG, "Bitmap conversion from (config=" + bitmap.getConfig() + + ", isMutable=" + bitmap.isMutable() + + ") to (config=ARGB_8888, isMutable=false) failed."); + return null; + } + bitmap.recycle(); + return swBitmap; + } + + /** + * Use ImageReader to create the software bitmap, so SkImage won't create an extra texture. + */ + private Bitmap copyToSwBitmapDirect(int width, int height, int pixelFormat) { + try (ImageReader ir = ImageReader.newInstance(width, height, + pixelFormat, 1 /* maxImages */)) { + ir.getSurface().attachAndQueueBufferWithColorSpace(mSnapshot.getHardwareBuffer(), + mSnapshot.getColorSpace()); + try (Image image = ir.acquireLatestImage()) { + if (image == null || image.getPlaneCount() < 1) { + Slog.e(TAG, "Image reader cannot acquire image"); + return null; + } + + final Image.Plane[] planes = image.getPlanes(); + if (planes.length != 1) { + Slog.e(TAG, "Image reader cannot get plane"); + return null; + } + final Image.Plane plane = planes[0]; + final int rowPadding = plane.getRowStride() - plane.getPixelStride() + * image.getWidth(); + final Bitmap swBitmap = Bitmap.createBitmap( + image.getWidth() + rowPadding / plane.getPixelStride() /* width */, + image.getHeight() /* height */, + pixelFormat == PixelFormat.RGB_565 + ? Bitmap.Config.RGB_565 : Bitmap.Config.ARGB_8888); + swBitmap.copyPixelsFromBuffer(plane.getBuffer()); + return swBitmap; + } + } + } + @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 8587b5a9c7ca..0531828be6d4 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1832,6 +1832,17 @@ class Task extends TaskFragment { && supportsMultiWindowInDisplayArea(tda); } + /** Returns true if the task bounds should persist across power cycles. */ + private static boolean persistTaskBounds(@NonNull WindowConfiguration configuration) { + return configuration.getWindowingMode() == WINDOWING_MODE_FREEFORM; + } + + /** Returns true if the nested task is allowed to have independent bounds from its parent. */ + private static boolean allowIndependentBoundsFromParent( + @NonNull WindowConfiguration configuration) { + return configuration.getWindowingMode() == WINDOWING_MODE_FREEFORM; + } + /** * Check whether this task can be launched on the specified display. * @@ -1996,11 +2007,11 @@ class Task extends TaskFragment { private void onConfigurationChangedInner(Configuration newParentConfig) { // Check if the new configuration supports persistent bounds (eg. is Freeform) and if so // restore the last recorded non-fullscreen bounds. - final boolean prevPersistTaskBounds = getWindowConfiguration().persistTaskBounds(); - boolean nextPersistTaskBounds = - getRequestedOverrideConfiguration().windowConfiguration.persistTaskBounds(); + final boolean prevPersistTaskBounds = persistTaskBounds(getWindowConfiguration()); + boolean nextPersistTaskBounds = persistTaskBounds( + getRequestedOverrideConfiguration().windowConfiguration); if (getRequestedOverrideWindowingMode() == WINDOWING_MODE_UNDEFINED) { - nextPersistTaskBounds = newParentConfig.windowConfiguration.persistTaskBounds(); + nextPersistTaskBounds = persistTaskBounds(newParentConfig.windowConfiguration); } // Only restore to the last non-fullscreen bounds when the requested override bounds // have not been explicitly set already. @@ -2042,7 +2053,7 @@ class Task extends TaskFragment { // If the configuration supports persistent bounds (eg. Freeform), keep track of the // current (non-fullscreen) bounds for persistence. - if (getWindowConfiguration().persistTaskBounds()) { + if (persistTaskBounds(getWindowConfiguration())) { final Rect currentBounds = getRequestedOverrideBounds(); if (!currentBounds.isEmpty()) { setLastNonFullscreenBounds(currentBounds); @@ -2383,33 +2394,48 @@ class Task extends TaskFragment { } void updateOverrideConfigurationFromLaunchBounds() { - // If the task is controlled by another organized task, do not set override - // configurations and let its parent (organized task) to control it; final Task rootTask = getRootTask(); - boolean shouldInheritBounds = rootTask != this && rootTask.isOrganized(); - if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue()) { - // Only inherit from organized parent when this task is not organized. - shouldInheritBounds &= !isOrganized(); + final boolean hasParentTask = rootTask != this; + final int windowingMode = getWindowingMode(); + final boolean isNonStandardOrFullscreen = !isActivityTypeStandardOrUndefined() + || windowingMode == WINDOWING_MODE_FULLSCREEN; + if (!Flags.nestedTasksWithIndependentBounds() + && !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue()) { + final Rect bounds; + if (hasParentTask && rootTask.isOrganized()) { + bounds = null; + } else if (isNonStandardOrFullscreen) { + bounds = isResizeable() ? rootTask.getRequestedOverrideBounds() : null; + } else if (!persistTaskBounds(getWindowConfiguration())) { + bounds = rootTask.getRequestedOverrideBounds(); + } else { + bounds = mLastNonFullscreenBounds; + } + setBounds(bounds); + return; } - final Rect bounds = shouldInheritBounds ? null : getLaunchBounds(); - setBounds(bounds); - } - /** Returns the bounds that should be used to launch this task. */ - Rect getLaunchBounds() { - final Task rootTask = getRootTask(); - if (rootTask == null) { - return null; + // Non-standard/fullscreen unresizable tasks should always inherit. + boolean shouldInheritBounds = isNonStandardOrFullscreen && !isResizeable(); + // Task itself is not organized (e.g. Home), just inherit from its organized parent. + shouldInheritBounds |= hasParentTask && rootTask.isOrganized() && !isOrganized(); + // Nested tasks should inherit when they're not allowed to have independent bounds, such as + // in multi-window split-screen. + shouldInheritBounds |= hasParentTask + && !(allowIndependentBoundsFromParent(getWindowConfiguration()) + && persistTaskBounds(getWindowConfiguration())); + if (shouldInheritBounds) { + setBounds(null); + return; } - - final int windowingMode = getWindowingMode(); - if (!isActivityTypeStandardOrUndefined() - || windowingMode == WINDOWING_MODE_FULLSCREEN) { - return isResizeable() ? rootTask.getRequestedOverrideBounds() : null; - } else if (!getWindowConfiguration().persistTaskBounds()) { - return rootTask.getRequestedOverrideBounds(); + if (!hasParentTask && !persistTaskBounds(getWindowConfiguration())) { + // Non-nested, non-persistable tasks such as PIP or multi-window floating windows. + return; } - return mLastNonFullscreenBounds; + // Non-nested, persisted tasks (e.g. top-level freeform) or nested persisted tasks that + // allow independent bounds from parent (e.g. nested freeform) should use launch-params + // bounds set to |mLastNonFullscreenBounds|. + setBounds(mLastNonFullscreenBounds); } void setRootProcess(WindowProcessController proc) { diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 2c10af4c5851..65001f436d3f 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -3401,7 +3401,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { * Applies the new configuration for the changed displays. Returns the activities that should * check whether to deliver the new configuration to clients. */ - @Nullable void applyDisplayChangeIfNeeded(@NonNull ArraySet<WindowContainer<?>> activitiesMayChange) { for (int i = mParticipants.size() - 1; i >= 0; --i) { final WindowContainer<?> wc = mParticipants.valueAt(i); diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationStartInfoTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationStartInfoTest.java index 987b9c6427d8..3289d70b89ac 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/ApplicationStartInfoTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/ApplicationStartInfoTest.java @@ -680,6 +680,67 @@ public class ApplicationStartInfoTest { ApplicationStartInfo.START_TIMESTAMP_FORK)); } + /** + * Test that cleanup old records works as expected, removing records that are older than the max + * retention length. + */ + @Test + @EnableFlags(android.app.Flags.FLAG_APP_START_INFO_CLEANUP_OLD_RECORDS) + public void testOldRecordsCleanup() throws Exception { + // Use a different start timestamp for each record so we can identify which was removed. + // This timestamp is not used for ordering and has no impact on removal. + final long startTimeRecord1 = 123L; + final long startTimeRecord2 = 456L; + final long startTimeRecord3 = 789L; + + // Create a process record to use with all starts. + ProcessRecord app = makeProcessRecord( + APP_1_PID_1, // pid + APP_1_UID, // uid + APP_1_UID, // packageUid + null, // definingUid + APP_1_PROCESS_NAME, // processName + APP_1_PACKAGE_NAME); // packageName + + // Set monotonic time to 1, and then trigger a start info record. + doReturn(1L).when(mAppStartInfoTracker).getMonotonicTimeMs(); + mAppStartInfoTracker.handleProcessBroadcastStart(startTimeRecord1, app, + buildIntent(COMPONENT), false /* isAlarm */); + + // Set monotonic time to 2, and then trigger another start info record. + doReturn(2L).when(mAppStartInfoTracker).getMonotonicTimeMs(); + mAppStartInfoTracker.handleProcessBroadcastStart(startTimeRecord2, app, + buildIntent(COMPONENT), false /* isAlarm */); + + // Set monotonic time to 3, then trigger another start info record. + doReturn(3L).when(mAppStartInfoTracker).getMonotonicTimeMs(); + mAppStartInfoTracker.handleProcessBroadcastStart(startTimeRecord3, app, + buildIntent(COMPONENT), false /* isAlarm */); + + // Verify that all 3 records were added successfully. + ArrayList<ApplicationStartInfo> list = new ArrayList<ApplicationStartInfo>(); + mAppStartInfoTracker.getStartInfo(null, APP_1_UID, 0, 0, list); + assertEquals(3, list.size()); + assertEquals(startTimeRecord3, list.get(0).getStartupTimestamps().get(0).longValue()); + assertEquals(startTimeRecord2, list.get(1).getStartupTimestamps().get(0).longValue()); + assertEquals(startTimeRecord1, list.get(2).getStartupTimestamps().get(0).longValue()); + + // Set monotonic time to max history length + 3 so that the older 2 records will be removed + // but that newest 1 will remain. + doReturn(AppStartInfoTracker.APP_START_INFO_HISTORY_LENGTH_MS + 3L) + .when(mAppStartInfoTracker).getMonotonicTimeMs(); + + // Trigger a persist which will trigger the cleanup of old records. + mAppStartInfoTracker.persistProcessStartInfo(); + + // Now verify that the records older than max were removed, and that the records not older + // remain. + list.clear(); + mAppStartInfoTracker.getStartInfo(null, APP_1_UID, 0, 0, list); + assertEquals(1, list.size()); + assertEquals(startTimeRecord3, list.get(0).getStartupTimestamps().get(0).longValue()); + } + private static <T> void setFieldValue(Class clazz, Object obj, String fieldName, T val) { try { Field field = clazz.getDeclaredField(fieldName); diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java index d1b2e8e6d868..1fb84113e278 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java @@ -274,7 +274,7 @@ public class UserManagerServiceUserInfoTest { /** Test UserInfo.canHaveProfile for main user */ @Test public void testCanHaveProfile() throws Exception { - UserInfo userInfo = createUser(100, FLAG_MAIN, null); + UserInfo userInfo = createUser(100, FLAG_FULL | FLAG_MAIN, null); assertTrue("Main users can have profile", userInfo.canHaveProfile()); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DesktopAppCompatAspectRatioPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DesktopAppCompatAspectRatioPolicyTests.java index fa7dcc8ebbc7..81d753b8e079 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DesktopAppCompatAspectRatioPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DesktopAppCompatAspectRatioPolicyTests.java @@ -35,6 +35,7 @@ import static com.android.server.wm.AppCompatConfiguration.DEFAULT_LETTERBOX_ASP import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import android.compat.testing.PlatformCompatChangeRule; import android.content.pm.ActivityInfo; @@ -413,7 +414,7 @@ public class DesktopAppCompatAspectRatioPolicyTests extends WindowTestsBase { void setDesiredAspectRatio(float aspectRatio) { doReturn(aspectRatio).when(getDesktopAppCompatAspectRatioPolicy()) - .getDesiredAspectRatio(any()); + .getDesiredAspectRatio(any(), anyBoolean()); } DesktopAppCompatAspectRatioPolicy getDesktopAppCompatAspectRatioPolicy() { @@ -422,7 +423,7 @@ public class DesktopAppCompatAspectRatioPolicyTests extends WindowTestsBase { float calculateAspectRatio() { return getDesktopAppCompatAspectRatioPolicy().calculateAspectRatio( - getTopActivity().getTask()); + getTopActivity().getTask(), /* hasOrientationMismatch */ true); } ActivityRecord getTopActivity() { diff --git a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java index 00b617e91bfd..f587d6e8c346 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java @@ -52,6 +52,7 @@ import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier. import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -437,7 +438,7 @@ public class DesktopModeLaunchParamsModifierTests extends spyOn(activity.mAppCompatController.getDesktopAspectRatioPolicy()); doReturn(LETTERBOX_ASPECT_RATIO).when(activity.mAppCompatController - .getDesktopAspectRatioPolicy()).calculateAspectRatio(any()); + .getDesktopAspectRatioPolicy()).calculateAspectRatio(any(), anyBoolean()); final int desiredWidth = (int) ((LANDSCAPE_DISPLAY_BOUNDS.height() / LETTERBOX_ASPECT_RATIO) + 0.5f); @@ -933,7 +934,7 @@ public class DesktopModeLaunchParamsModifierTests extends spyOn(activity.mAppCompatController.getDesktopAspectRatioPolicy()); doReturn(LETTERBOX_ASPECT_RATIO).when(activity.mAppCompatController - .getDesktopAspectRatioPolicy()).calculateAspectRatio(any()); + .getDesktopAspectRatioPolicy()).calculateAspectRatio(any(), anyBoolean()); final int desiredHeight = (int) (LANDSCAPE_DISPLAY_BOUNDS.height() * DESKTOP_MODE_INITIAL_BOUNDS_SCALE); @@ -1060,7 +1061,7 @@ public class DesktopModeLaunchParamsModifierTests extends spyOn(activity.mAppCompatController.getDesktopAspectRatioPolicy()); doReturn(LETTERBOX_ASPECT_RATIO).when(activity.mAppCompatController - .getDesktopAspectRatioPolicy()).calculateAspectRatio(any()); + .getDesktopAspectRatioPolicy()).calculateAspectRatio(any(), anyBoolean()); final int desiredWidth = PORTRAIT_DISPLAY_BOUNDS.width() - (DESKTOP_MODE_LANDSCAPE_APP_PADDING * 2); @@ -1115,7 +1116,7 @@ public class DesktopModeLaunchParamsModifierTests extends spyOn(activity.mAppCompatController.getDesktopAspectRatioPolicy()); doReturn(LETTERBOX_ASPECT_RATIO).when(activity.mAppCompatController - .getDesktopAspectRatioPolicy()).calculateAspectRatio(any()); + .getDesktopAspectRatioPolicy()).calculateAspectRatio(any(), anyBoolean()); final int desiredWidth = PORTRAIT_DISPLAY_BOUNDS.width() - (DESKTOP_MODE_LANDSCAPE_APP_PADDING * 2); @@ -1569,7 +1570,7 @@ public class DesktopModeLaunchParamsModifierTests extends activity.mAppCompatController.getDesktopAspectRatioPolicy(); spyOn(desktopAppCompatAspectRatioPolicy); doReturn(aspectRatio).when(desktopAppCompatAspectRatioPolicy) - .getDesiredAspectRatio(any()); + .getDesiredAspectRatio(any(), anyBoolean()); } private void applyUserMinAspectRatioOverride(ActivityRecord activity, int overrideCode, @@ -1579,7 +1580,7 @@ public class DesktopModeLaunchParamsModifierTests extends activity.mAppCompatController.getDesktopAspectRatioPolicy(); spyOn(desktopAppCompatAspectRatioPolicy); doReturn(1f).when(desktopAppCompatAspectRatioPolicy) - .getDesiredAspectRatio(any()); + .getDesiredAspectRatio(any(), anyBoolean()); // Enable user aspect ratio settings final AppCompatConfiguration appCompatConfiguration = |