diff options
393 files changed, 5800 insertions, 2029 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index d7c6ddbb0c63..d7be2595e88b 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -472,7 +472,7 @@ public final class JobStatus { if (standbyBucket == RESTRICTED_INDEX) { addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS); } else { - mReadyDynamicSatisfied = true; + mReadyDynamicSatisfied = false; } mLastSuccessfulRunTime = lastSuccessfulRunTime; @@ -1132,8 +1132,8 @@ public final class JobStatus { } satisfiedConstraints = (satisfiedConstraints&~constraint) | (state ? constraint : 0); mSatisfiedConstraintsOfInterest = satisfiedConstraints & CONSTRAINTS_OF_INTEREST; - mReadyDynamicSatisfied = - mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); + mReadyDynamicSatisfied = mDynamicConstraints != 0 + && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); if (STATS_LOG_ENABLED && (STATSD_CONSTRAINTS_TO_LOG & constraint) != 0) { FrameworkStatsLog.write_non_chained( FrameworkStatsLog.SCHEDULED_JOB_CONSTRAINT_CHANGED, @@ -1184,8 +1184,8 @@ public final class JobStatus { } mDynamicConstraints |= constraints; - mReadyDynamicSatisfied = - mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); + mReadyDynamicSatisfied = mDynamicConstraints != 0 + && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } /** @@ -1196,8 +1196,8 @@ public final class JobStatus { */ private void removeDynamicConstraints(int constraints) { mDynamicConstraints &= ~constraints; - mReadyDynamicSatisfied = - mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); + mReadyDynamicSatisfied = mDynamicConstraints != 0 + && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } public long getLastSuccessfulRunTime() { @@ -1241,8 +1241,8 @@ public final class JobStatus { break; default: satisfied |= constraint; - mReadyDynamicSatisfied = - mDynamicConstraints == (satisfied & mDynamicConstraints); + mReadyDynamicSatisfied = mDynamicConstraints != 0 + && mDynamicConstraints == (satisfied & mDynamicConstraints); break; } @@ -1262,8 +1262,8 @@ public final class JobStatus { mReadyWithinQuota = oldValue; break; default: - mReadyDynamicSatisfied = - mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); + mReadyDynamicSatisfied = mDynamicConstraints != 0 + && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); break; } return toReturn; diff --git a/api/test-current.txt b/api/test-current.txt index d693f03a2bd6..44fb63017ace 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5277,18 +5277,19 @@ package android.widget { package android.window { public final class DisplayAreaInfo implements android.os.Parcelable { - ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int); + ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int, int); method public int describeContents(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaInfo> CREATOR; field @NonNull public final android.content.res.Configuration configuration; field public final int displayId; + field public final int featureId; field @NonNull public final android.window.WindowContainerToken token; } public class DisplayAreaOrganizer extends android.window.WindowOrganizer { ctor public DisplayAreaOrganizer(); - method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo); + method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl); method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int); field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1 @@ -5308,7 +5309,7 @@ package android.window { method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.window.WindowContainerToken getImeTarget(int); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]); method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo); - method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo); + method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl); method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer(int); @@ -5319,7 +5320,6 @@ package android.window { public final class WindowContainerToken implements android.os.Parcelable { method public int describeContents(); - method @Nullable public android.view.SurfaceControl getLeash(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR; } diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 2ec246e4b9f2..674978b50d91 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -426,7 +426,7 @@ message Atom { UserLifecycleEventOccurred user_lifecycle_event_occurred = 265 [(module) = "framework"]; AccessibilityShortcutReported accessibility_shortcut_reported = 266 [(module) = "framework"]; - AccessibilityServiceReported accessibility_service_reported = 267 [(module) = "framework"]; + AccessibilityServiceReported accessibility_service_reported = 267 [(module) = "settings"]; SdkExtensionStatus sdk_extension_status = 354; // StatsdStats tracks platform atoms with ids upto 500. @@ -9453,7 +9453,7 @@ message UserLifecycleEventOccurred { * Logs when accessibility shortcut clicked. * * Logged from: - * frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java + * frameworks/base/services/accessibility/java/com/android/server/accessibility */ message AccessibilityShortcutReported { // The accessibility feature(including installed a11y service, framework a11y feature, @@ -9473,7 +9473,7 @@ message AccessibilityShortcutReported { * Logs when accessibility service status changed. * * Logged from: - * frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java + * packages/apps/Settings/src/com/android/settings/accessibility */ message AccessibilityServiceReported { // The accessibility service package name. diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 0129aabd49f8..80d2e6c60f69 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -266,6 +266,14 @@ public class ActivityOptions { "android:activity.disallowEnterPictureInPictureWhileLaunching"; /** + * Indicates flags should be applied to the launching activity such that it will behave + * correctly in a bubble. + * @hide + */ + private static final String KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES = + "android:activity.applyActivityFlagsForBubbles"; + + /** * For Activity transitions, the calling Activity's TransitionListener used to * notify the called Activity when the shared element and the exit transitions * complete. @@ -354,6 +362,7 @@ public class ActivityOptions { private int mSplitScreenCreateMode = SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; private boolean mLockTaskMode = false; private boolean mDisallowEnterPictureInPictureWhileLaunching; + private boolean mApplyActivityFlagsForBubbles; private boolean mTaskAlwaysOnTop; private boolean mTaskOverlay; private boolean mTaskOverlayCanResume; @@ -1033,6 +1042,8 @@ public class ActivityOptions { SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT); mDisallowEnterPictureInPictureWhileLaunching = opts.getBoolean( KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING, false); + mApplyActivityFlagsForBubbles = opts.getBoolean( + KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES, false); if (opts.containsKey(KEY_ANIM_SPECS)) { Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS); mAnimSpecs = new AppTransitionAnimationSpec[specs.length]; @@ -1465,6 +1476,16 @@ public class ActivityOptions { return mDisallowEnterPictureInPictureWhileLaunching; } + /** @hide */ + public void setApplyActivityFlagsForBubbles(boolean apply) { + mApplyActivityFlagsForBubbles = apply; + } + + /** @hide */ + public boolean isApplyActivityFlagsForBubbles() { + return mApplyActivityFlagsForBubbles; + } + /** * Update the current values in this ActivityOptions from those supplied * in <var>otherOptions</var>. Any values @@ -1663,6 +1684,9 @@ public class ActivityOptions { b.putBoolean(KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING, mDisallowEnterPictureInPictureWhileLaunching); } + if (mApplyActivityFlagsForBubbles) { + b.putBoolean(KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES, mApplyActivityFlagsForBubbles); + } if (mAnimSpecs != null) { b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs); } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 51eaff1ae99f..e19d5ecdd7d2 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3087,6 +3087,11 @@ public final class ActivityThread extends ClientTransactionHandler { return mActivities.get(token); } + @VisibleForTesting(visibility = PACKAGE) + public Configuration getConfiguration() { + return mConfiguration; + } + @Override public void updatePendingConfiguration(Configuration config) { synchronized (mResourcesManager) { diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 37f683ef435f..33bacf0d1146 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -1083,7 +1083,7 @@ public class AppOpsManager { * @hide */ public static final int OP_ACTIVATE_PLATFORM_VPN = AppProtoEnums.APP_OP_ACTIVATE_PLATFORM_VPN; - /** @hide */ + /** @hide Controls whether or not read logs are available for incremental installations. */ public static final int OP_LOADER_USAGE_STATS = AppProtoEnums.APP_OP_LOADER_USAGE_STATS; // App op deprecated/removed. diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index b37521b1189b..043953d1aabd 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -25,7 +25,6 @@ import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ProcessInfo; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Build; @@ -39,8 +38,6 @@ import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import com.android.internal.util.ArrayUtils; -import com.android.internal.util.Parcelling; -import com.android.internal.util.Parcelling.BuiltIn.ForBoolean; import com.android.server.SystemConfig; import java.lang.annotation.Retention; @@ -1725,9 +1722,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeString8(scanPublicSourceDir); dest.writeString8(sourceDir); dest.writeString8(publicSourceDir); - dest.writeStringArray(splitNames); - dest.writeStringArray(splitSourceDirs); - dest.writeStringArray(splitPublicSourceDirs); + dest.writeString8Array(splitNames); + dest.writeString8Array(splitSourceDirs); + dest.writeString8Array(splitPublicSourceDirs); dest.writeSparseArray((SparseArray) splitDependencies); dest.writeString8(nativeLibraryDir); dest.writeString8(secondaryNativeLibraryDir); @@ -1735,10 +1732,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(nativeLibraryRootRequiresIsa ? 1 : 0); dest.writeString8(primaryCpuAbi); dest.writeString8(secondaryCpuAbi); - dest.writeStringArray(resourceDirs); + dest.writeString8Array(resourceDirs); dest.writeString8(seInfo); dest.writeString8(seInfoUser); - dest.writeStringArray(sharedLibraryFiles); + dest.writeString8Array(sharedLibraryFiles); dest.writeTypedList(sharedLibraryInfos); dest.writeString8(dataDir); dest.writeString8(deviceProtectedDataDir); @@ -1760,7 +1757,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(category); dest.writeInt(targetSandboxVersion); dest.writeString8(classLoaderName); - dest.writeStringArray(splitClassLoaderNames); + dest.writeString8Array(splitClassLoaderNames); dest.writeInt(compileSdkVersion); dest.writeString8(compileSdkVersionCodename); dest.writeString8(appComponentFactory); @@ -1806,9 +1803,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { scanPublicSourceDir = source.readString8(); sourceDir = source.readString8(); publicSourceDir = source.readString8(); - splitNames = source.readStringArray(); - splitSourceDirs = source.readStringArray(); - splitPublicSourceDirs = source.readStringArray(); + splitNames = source.createString8Array(); + splitSourceDirs = source.createString8Array(); + splitPublicSourceDirs = source.createString8Array(); splitDependencies = source.readSparseArray(null); nativeLibraryDir = source.readString8(); secondaryNativeLibraryDir = source.readString8(); @@ -1816,10 +1813,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { nativeLibraryRootRequiresIsa = source.readInt() != 0; primaryCpuAbi = source.readString8(); secondaryCpuAbi = source.readString8(); - resourceDirs = source.readStringArray(); + resourceDirs = source.createString8Array(); seInfo = source.readString8(); seInfoUser = source.readString8(); - sharedLibraryFiles = source.readStringArray(); + sharedLibraryFiles = source.createString8Array(); sharedLibraryInfos = source.createTypedArrayList(SharedLibraryInfo.CREATOR); dataDir = source.readString8(); deviceProtectedDataDir = source.readString8(); @@ -1841,7 +1838,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { category = source.readInt(); targetSandboxVersion = source.readInt(); classLoaderName = source.readString8(); - splitClassLoaderNames = source.readStringArray(); + splitClassLoaderNames = source.createString8Array(); compileSdkVersion = source.readInt(); compileSdkVersionCodename = source.readString8(); appComponentFactory = source.readString8(); diff --git a/core/java/android/content/pm/IDataLoaderStatusListener.aidl b/core/java/android/content/pm/IDataLoaderStatusListener.aidl index 24a62c5638ec..efb00a016da5 100644 --- a/core/java/android/content/pm/IDataLoaderStatusListener.aidl +++ b/core/java/android/content/pm/IDataLoaderStatusListener.aidl @@ -40,11 +40,15 @@ oneway interface IDataLoaderStatusListener { /** Installation can't continue as DataLoader failed to stream necessary data. */ const int DATA_LOADER_IMAGE_NOT_READY = 6; + /** DataLoader instance can't run at the moment, but might recover later. + * It's up to system to decide if the app is still usable. */ + const int DATA_LOADER_UNAVAILABLE = 7; + /** DataLoader reports that this instance is invalid and can never be restored. * Warning: this is a terminal status that data loader should use carefully and * the system should almost never use - e.g. only if all recovery attempts * fail and all retry limits are exceeded. */ - const int DATA_LOADER_UNRECOVERABLE = 7; + const int DATA_LOADER_UNRECOVERABLE = 8; /** Data loader status callback */ void onStatusChanged(in int dataLoaderId, in int status); diff --git a/core/java/android/content/pm/InstrumentationInfo.java b/core/java/android/content/pm/InstrumentationInfo.java index 745a6c1a0dff..bfbd4c60b291 100644 --- a/core/java/android/content/pm/InstrumentationInfo.java +++ b/core/java/android/content/pm/InstrumentationInfo.java @@ -161,9 +161,9 @@ public class InstrumentationInfo extends PackageItemInfo implements Parcelable { dest.writeString8(targetProcesses); dest.writeString8(sourceDir); dest.writeString8(publicSourceDir); - dest.writeStringArray(splitNames); - dest.writeStringArray(splitSourceDirs); - dest.writeStringArray(splitPublicSourceDirs); + dest.writeString8Array(splitNames); + dest.writeString8Array(splitSourceDirs); + dest.writeString8Array(splitPublicSourceDirs); dest.writeSparseArray((SparseArray) splitDependencies); dest.writeString8(dataDir); dest.writeString8(deviceProtectedDataDir); @@ -193,9 +193,9 @@ public class InstrumentationInfo extends PackageItemInfo implements Parcelable { targetProcesses = source.readString8(); sourceDir = source.readString8(); publicSourceDir = source.readString8(); - splitNames = source.readStringArray(); - splitSourceDirs = source.readStringArray(); - splitPublicSourceDirs = source.readStringArray(); + splitNames = source.createString8Array(); + splitSourceDirs = source.createString8Array(); + splitPublicSourceDirs = source.createString8Array(); splitDependencies = source.readSparseArray(null); dataDir = source.readString8(); deviceProtectedDataDir = source.readString8(); diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index bb56ef7fd3a0..d7abb68b96a5 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -442,7 +442,7 @@ public class PackageInfo implements Parcelable { // Allow ApplicationInfo to be squashed. final boolean prevAllowSquashing = dest.allowSquashing(); dest.writeString8(packageName); - dest.writeStringArray(splitNames); + dest.writeString8Array(splitNames); dest.writeInt(versionCode); dest.writeInt(versionCodeMajor); dest.writeString8(versionName); @@ -465,7 +465,7 @@ public class PackageInfo implements Parcelable { dest.writeTypedArray(providers, parcelableFlags); dest.writeTypedArray(instrumentation, parcelableFlags); dest.writeTypedArray(permissions, parcelableFlags); - dest.writeStringArray(requestedPermissions); + dest.writeString8Array(requestedPermissions); dest.writeIntArray(requestedPermissionsFlags); dest.writeTypedArray(signatures, parcelableFlags); dest.writeTypedArray(configPreferences, parcelableFlags); @@ -509,7 +509,7 @@ public class PackageInfo implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private PackageInfo(Parcel source) { packageName = source.readString8(); - splitNames = source.createStringArray(); + splitNames = source.createString8Array(); versionCode = source.readInt(); versionCodeMajor = source.readInt(); versionName = source.readString8(); @@ -530,7 +530,7 @@ public class PackageInfo implements Parcelable { providers = source.createTypedArray(ProviderInfo.CREATOR); instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR); permissions = source.createTypedArray(PermissionInfo.CREATOR); - requestedPermissions = source.createStringArray(); + requestedPermissions = source.createString8Array(); requestedPermissionsFlags = source.createIntArray(); signatures = source.createTypedArray(Signature.CREATOR); configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 6a5e6ca289b3..5795cd24f4b1 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -180,6 +180,7 @@ public abstract class PackageManager { GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + MATCH_APEX, }) @Retention(RetentionPolicy.SOURCE) public @interface ApplicationInfoFlags {} @@ -5951,9 +5952,9 @@ public abstract class PackageManager { /** * Return the label to use for this application. * - * @return Returns the label associated with this application, or null if - * it could not be found for any reason. - * @param info The application to get the label of. + * @return Returns a {@link CharSequence} containing the label associated with + * this application, or its name the item does not have a label. + * @param info The {@link ApplicationInfo} of the application to get the label of. */ @NonNull public abstract CharSequence getApplicationLabel(@NonNull ApplicationInfo info); diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index c6c288239d1f..5f6befdcbaef 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -618,8 +618,8 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { super.writeToParcel(dest, parcelableFlags); dest.writeInt(protectionLevel); dest.writeInt(flags); - dest.writeString(group); - dest.writeString(backgroundPermission); + dest.writeString8(group); + dest.writeString8(backgroundPermission); dest.writeInt(descriptionRes); dest.writeInt(requestRes); TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); @@ -678,8 +678,8 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { super(source); protectionLevel = source.readInt(); flags = source.readInt(); - group = source.readString(); - backgroundPermission = source.readString(); + group = source.readString8(); + backgroundPermission = source.readString8(); descriptionRes = source.readInt(); requestRes = source.readInt(); nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java index 82b07f24a906..4f2bf65adfca 100644 --- a/core/java/android/content/pm/ResolveInfo.java +++ b/core/java/android/content/pm/ResolveInfo.java @@ -443,7 +443,7 @@ public class ResolveInfo implements Parcelable { dest.writeInt(labelRes); TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags); dest.writeInt(icon); - dest.writeString(resolvePackageName); + dest.writeString8(resolvePackageName); dest.writeInt(targetUserId); dest.writeInt(system ? 1 : 0); dest.writeInt(noResourceId ? 1 : 0); @@ -491,7 +491,7 @@ public class ResolveInfo implements Parcelable { nonLocalizedLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); icon = source.readInt(); - resolvePackageName = source.readString(); + resolvePackageName = source.readString8(); targetUserId = source.readInt(); system = source.readInt() != 0; noResourceId = source.readInt() != 0; diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java index fe4b36fd9ae3..da2a3d885fc6 100644 --- a/core/java/android/content/pm/SharedLibraryInfo.java +++ b/core/java/android/content/pm/SharedLibraryInfo.java @@ -26,6 +26,7 @@ import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -111,10 +112,19 @@ public final class SharedLibraryInfo implements Parcelable { } private SharedLibraryInfo(Parcel parcel) { - this(parcel.readString(), parcel.readString(), parcel.readArrayList(null), - parcel.readString(), parcel.readLong(), - parcel.readInt(), parcel.readParcelable(null), parcel.readArrayList(null), - parcel.createTypedArrayList(SharedLibraryInfo.CREATOR)); + mPath = parcel.readString8(); + mPackageName = parcel.readString8(); + if (parcel.readInt() != 0) { + mCodePaths = Arrays.asList(parcel.createString8Array()); + } else { + mCodePaths = null; + } + mName = parcel.readString8(); + mVersion = parcel.readLong(); + mType = parcel.readInt(); + mDeclaringPackage = parcel.readParcelable(null); + mDependentPackages = parcel.readArrayList(null); + mDependencies = parcel.createTypedArrayList(SharedLibraryInfo.CREATOR); } /** @@ -296,10 +306,15 @@ public final class SharedLibraryInfo implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { - parcel.writeString(mPath); - parcel.writeString(mPackageName); - parcel.writeList(mCodePaths); - parcel.writeString(mName); + parcel.writeString8(mPath); + parcel.writeString8(mPackageName); + if (mCodePaths != null) { + parcel.writeInt(1); + parcel.writeString8Array(mCodePaths.toArray(new String[mCodePaths.size()])); + } else { + parcel.writeInt(0); + } + parcel.writeString8(mName); parcel.writeLong(mVersion); parcel.writeInt(mType); parcel.writeParcelable(mDeclaringPackage, flags); diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index 41f9a6e4a274..85bf11ceb723 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -2059,8 +2059,8 @@ public final class ShortcutInfo implements Parcelable { final ClassLoader cl = getClass().getClassLoader(); mUserId = source.readInt(); - mId = source.readString(); - mPackageName = source.readString(); + mId = source.readString8(); + mPackageName = source.readString8(); mActivity = source.readParcelable(cl); mFlags = source.readInt(); mIconResId = source.readInt(); @@ -2082,12 +2082,12 @@ public final class ShortcutInfo implements Parcelable { mIntentPersistableExtrases = source.readParcelableArray(cl, PersistableBundle.class); mRank = source.readInt(); mExtras = source.readParcelable(cl); - mBitmapPath = source.readString(); + mBitmapPath = source.readString8(); - mIconResName = source.readString(); - mTitleResName = source.readString(); - mTextResName = source.readString(); - mDisabledMessageResName = source.readString(); + mIconResName = source.readString8(); + mTitleResName = source.readString8(); + mTextResName = source.readString8(); + mDisabledMessageResName = source.readString8(); int N = source.readInt(); if (N == 0) { @@ -2095,20 +2095,20 @@ public final class ShortcutInfo implements Parcelable { } else { mCategories = new ArraySet<>(N); for (int i = 0; i < N; i++) { - mCategories.add(source.readString().intern()); + mCategories.add(source.readString8().intern()); } } mPersons = source.readParcelableArray(cl, Person.class); mLocusId = source.readParcelable(cl); - mIconUri = source.readString(); + mIconUri = source.readString8(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mUserId); - dest.writeString(mId); - dest.writeString(mPackageName); + dest.writeString8(mId); + dest.writeString8(mPackageName); dest.writeParcelable(mActivity, flags); dest.writeInt(mFlags); dest.writeInt(mIconResId); @@ -2133,18 +2133,18 @@ public final class ShortcutInfo implements Parcelable { dest.writeParcelableArray(mIntentPersistableExtrases, flags); dest.writeInt(mRank); dest.writeParcelable(mExtras, flags); - dest.writeString(mBitmapPath); + dest.writeString8(mBitmapPath); - dest.writeString(mIconResName); - dest.writeString(mTitleResName); - dest.writeString(mTextResName); - dest.writeString(mDisabledMessageResName); + dest.writeString8(mIconResName); + dest.writeString8(mTitleResName); + dest.writeString8(mTextResName); + dest.writeString8(mDisabledMessageResName); if (mCategories != null) { final int N = mCategories.size(); dest.writeInt(N); for (int i = 0; i < N; i++) { - dest.writeString(mCategories.valueAt(i)); + dest.writeString8(mCategories.valueAt(i)); } } else { dest.writeInt(0); @@ -2152,7 +2152,7 @@ public final class ShortcutInfo implements Parcelable { dest.writeParcelableArray(mPersons, flags); dest.writeParcelable(mLocusId, flags); - dest.writeString(mIconUri); + dest.writeString8(mIconUri); } public static final @android.annotation.NonNull Creator<ShortcutInfo> CREATOR = diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index f1506645d10c..aca5b458a2d6 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -457,14 +457,14 @@ public class UserInfo implements Parcelable { @Override public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeInt(id); - dest.writeString(name); - dest.writeString(iconPath); + dest.writeString8(name); + dest.writeString8(iconPath); dest.writeInt(flags); - dest.writeString(userType); + dest.writeString8(userType); dest.writeInt(serialNumber); dest.writeLong(creationTime); dest.writeLong(lastLoggedInTime); - dest.writeString(lastLoggedInFingerprint); + dest.writeString8(lastLoggedInFingerprint); dest.writeBoolean(partial); dest.writeBoolean(preCreated); dest.writeInt(profileGroupId); @@ -486,14 +486,14 @@ public class UserInfo implements Parcelable { private UserInfo(Parcel source) { id = source.readInt(); - name = source.readString(); - iconPath = source.readString(); + name = source.readString8(); + iconPath = source.readString8(); flags = source.readInt(); - userType = source.readString(); + userType = source.readString8(); serialNumber = source.readInt(); creationTime = source.readLong(); lastLoggedInTime = source.readLong(); - lastLoggedInFingerprint = source.readString(); + lastLoggedInFingerprint = source.readString8(); partial = source.readBoolean(); preCreated = source.readBoolean(); profileGroupId = source.readInt(); diff --git a/core/java/android/content/pm/VersionedPackage.java b/core/java/android/content/pm/VersionedPackage.java index 21df7ecef015..2987557a54b4 100644 --- a/core/java/android/content/pm/VersionedPackage.java +++ b/core/java/android/content/pm/VersionedPackage.java @@ -60,7 +60,7 @@ public final class VersionedPackage implements Parcelable { } private VersionedPackage(Parcel parcel) { - mPackageName = parcel.readString(); + mPackageName = parcel.readString8(); mVersionCode = parcel.readLong(); } @@ -116,7 +116,7 @@ public final class VersionedPackage implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { - parcel.writeString(mPackageName); + parcel.writeString8(mPackageName); parcel.writeLong(mVersionCode); } diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 4e189796bc48..197ad7412a1f 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -346,12 +346,11 @@ public class ParsingPackageUtils { } final ParsingPackage pkg = result.getResult(); - if (pkg.getTargetSdkVersion() >= Build.VERSION_CODES.R - && assets.containsAllocatedTable()) { + if (assets.containsAllocatedTable()) { final ParseResult<?> deferResult = input.deferError( - "Targeting R+ (version" + Build.VERSION_CODES.R + " and above) requires the" - + " resources.arsc of installed APKs to be stored uncompressed and" - + " aligned on a 4-byte boundary", + "Targeting R+ (version " + Build.VERSION_CODES.R + " and above) requires" + + " the resources.arsc of installed APKs to be stored uncompressed" + + " and aligned on a 4-byte boundary", DeferredError.RESOURCES_ARSC_COMPRESSED); if (deferResult.isError()) { return input.error(INSTALL_PARSE_FAILED_RESOURCES_ARSC_COMPRESSED, diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java index d12142c0be79..4bed985489ef 100644 --- a/core/java/android/hardware/soundtrigger/SoundTrigger.java +++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java @@ -1945,7 +1945,7 @@ public class SoundTrigger { Looper looper = handler != null ? handler.getLooper() : Looper.getMainLooper(); try { return new SoundTriggerModule(getService(), moduleId, listener, looper); - } catch (RemoteException e) { + } catch (Exception e) { Log.e(TAG, "", e); return null; } diff --git a/core/java/android/net/Ikev2VpnProfile.java b/core/java/android/net/Ikev2VpnProfile.java index 81d03f07d0be..afa63039b6f7 100644 --- a/core/java/android/net/Ikev2VpnProfile.java +++ b/core/java/android/net/Ikev2VpnProfile.java @@ -70,6 +70,15 @@ public final class Ikev2VpnProfile extends PlatformVpnProfile { private static final String MISSING_PARAM_MSG_TMPL = "Required parameter was not provided: %s"; private static final String EMPTY_CERT = ""; + /** @hide */ + public static final List<String> DEFAULT_ALGORITHMS = + Collections.unmodifiableList(Arrays.asList( + IpSecAlgorithm.CRYPT_AES_CBC, + IpSecAlgorithm.AUTH_HMAC_SHA256, + IpSecAlgorithm.AUTH_HMAC_SHA384, + IpSecAlgorithm.AUTH_HMAC_SHA512, + IpSecAlgorithm.AUTH_CRYPT_AES_GCM)); + @NonNull private final String mServerAddr; @NonNull private final String mUserIdentity; @@ -172,7 +181,56 @@ public final class Ikev2VpnProfile extends PlatformVpnProfile { throw new IllegalArgumentException("Invalid auth method set"); } - VpnProfile.validateAllowedAlgorithms(mAllowedAlgorithms); + validateAllowedAlgorithms(mAllowedAlgorithms); + } + + /** + * Validates that the allowed algorithms are a valid set for IPsec purposes + * + * <p>In order for the algorithm list to be a valid set, it must contain at least one algorithm + * that provides Authentication, and one that provides Encryption. Authenticated Encryption with + * Associated Data (AEAD) algorithms are counted as providing Authentication and Encryption. + * + * @param allowedAlgorithms The list to be validated + */ + private static void validateAllowedAlgorithms(@NonNull List<String> algorithmNames) { + VpnProfile.validateAllowedAlgorithms(algorithmNames); + + // First, make sure no insecure algorithms were proposed. + if (algorithmNames.contains(IpSecAlgorithm.AUTH_HMAC_MD5) + || algorithmNames.contains(IpSecAlgorithm.AUTH_HMAC_SHA1)) { + throw new IllegalArgumentException("Algorithm not supported for IKEv2 VPN profiles"); + } + + // Validate that some valid combination (AEAD or AUTH + CRYPT) is present + if (hasAeadAlgorithms(algorithmNames) || hasNormalModeAlgorithms(algorithmNames)) { + return; + } + + throw new IllegalArgumentException("Algorithm set missing support for Auth, Crypt or both"); + } + + /** + * Checks if the provided list has AEAD algorithms + * + * @hide + */ + public static boolean hasAeadAlgorithms(@NonNull List<String> algorithmNames) { + return algorithmNames.contains(IpSecAlgorithm.AUTH_CRYPT_AES_GCM); + } + + /** + * Checks the provided list has acceptable (non-AEAD) authentication and encryption algorithms + * + * @hide + */ + public static boolean hasNormalModeAlgorithms(@NonNull List<String> algorithmNames) { + final boolean hasCrypt = algorithmNames.contains(IpSecAlgorithm.CRYPT_AES_CBC); + final boolean hasAuth = algorithmNames.contains(IpSecAlgorithm.AUTH_HMAC_SHA256) + || algorithmNames.contains(IpSecAlgorithm.AUTH_HMAC_SHA384) + || algorithmNames.contains(IpSecAlgorithm.AUTH_HMAC_SHA512); + + return hasCrypt && hasAuth; } /** Retrieves the server address string. */ @@ -559,7 +617,7 @@ public final class Ikev2VpnProfile extends PlatformVpnProfile { @Nullable private X509Certificate mUserCert; @Nullable private ProxyInfo mProxyInfo; - @NonNull private List<String> mAllowedAlgorithms = new ArrayList<>(); + @NonNull private List<String> mAllowedAlgorithms = DEFAULT_ALGORITHMS; private boolean mIsBypassable = false; private boolean mIsMetered = true; private int mMaxMtu = PlatformVpnProfile.MAX_MTU_DEFAULT; @@ -756,7 +814,19 @@ public final class Ikev2VpnProfile extends PlatformVpnProfile { /** * Sets the allowable set of IPsec algorithms * - * <p>A list of allowed IPsec algorithms as defined in {@link IpSecAlgorithm} + * <p>If set, this will constrain the set of algorithms that the IPsec tunnel will use for + * integrity verification and encryption to the provided list. + * + * <p>The set of allowed IPsec algorithms is defined in {@link IpSecAlgorithm}. Adding of + * algorithms that are considered insecure (such as AUTH_HMAC_MD5 and AUTH_HMAC_SHA1) is not + * permitted, and will result in an IllegalArgumentException being thrown. + * + * <p>The provided algorithm list must contain at least one algorithm that provides + * Authentication, and one that provides Encryption. Authenticated Encryption with + * Associated Data (AEAD) algorithms provide both Authentication and Encryption. + * + * <p>By default, this profile will use any algorithm defined in {@link IpSecAlgorithm}, + * with the exception of those considered insecure (as described above). * * @param algorithmNames the list of supported IPsec algorithms * @return this {@link Builder} object to facilitate chaining of method calls @@ -765,7 +835,7 @@ public final class Ikev2VpnProfile extends PlatformVpnProfile { @NonNull public Builder setAllowedAlgorithms(@NonNull List<String> algorithmNames) { checkNotNull(algorithmNames, MISSING_PARAM_MSG_TMPL, "algorithmNames"); - VpnProfile.validateAllowedAlgorithms(algorithmNames); + validateAllowedAlgorithms(algorithmNames); mAllowedAlgorithms = algorithmNames; return this; diff --git a/core/java/android/os/LocaleList.java b/core/java/android/os/LocaleList.java index 0bf387e6d0a6..ab4bb0b9f2cd 100644 --- a/core/java/android/os/LocaleList.java +++ b/core/java/android/os/LocaleList.java @@ -137,7 +137,7 @@ public final class LocaleList implements Parcelable { @Override public void writeToParcel(Parcel dest, int parcelableFlags) { - dest.writeString(mStringRepresentation); + dest.writeString8(mStringRepresentation); } /** @@ -239,7 +239,7 @@ public final class LocaleList implements Parcelable { = new Parcelable.Creator<LocaleList>() { @Override public LocaleList createFromParcel(Parcel source) { - return LocaleList.forLanguageTags(source.readString()); + return LocaleList.forLanguageTags(source.readString8()); } @Override diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 93f6607ff9d4..e5bab6fc9230 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -1396,24 +1396,39 @@ public final class Parcel { } public final void writeStringArray(@Nullable String[] val) { + writeString16Array(val); + } + + @Nullable + public final String[] createStringArray() { + return createString16Array(); + } + + public final void readStringArray(@NonNull String[] val) { + readString16Array(val); + } + + /** {@hide} */ + public final void writeString8Array(@Nullable String[] val) { if (val != null) { int N = val.length; writeInt(N); for (int i=0; i<N; i++) { - writeString(val[i]); + writeString8(val[i]); } } else { writeInt(-1); } } + /** {@hide} */ @Nullable - public final String[] createStringArray() { + public final String[] createString8Array() { int N = readInt(); if (N >= 0) { String[] val = new String[N]; for (int i=0; i<N; i++) { - val[i] = readString(); + val[i] = readString8(); } return val; } else { @@ -1421,11 +1436,52 @@ public final class Parcel { } } - public final void readStringArray(@NonNull String[] val) { + /** {@hide} */ + public final void readString8Array(@NonNull String[] val) { int N = readInt(); if (N == val.length) { for (int i=0; i<N; i++) { - val[i] = readString(); + val[i] = readString8(); + } + } else { + throw new RuntimeException("bad array lengths"); + } + } + + /** {@hide} */ + public final void writeString16Array(@Nullable String[] val) { + if (val != null) { + int N = val.length; + writeInt(N); + for (int i=0; i<N; i++) { + writeString16(val[i]); + } + } else { + writeInt(-1); + } + } + + /** {@hide} */ + @Nullable + public final String[] createString16Array() { + int N = readInt(); + if (N >= 0) { + String[] val = new String[N]; + for (int i=0; i<N; i++) { + val[i] = readString16(); + } + return val; + } else { + return null; + } + } + + /** {@hide} */ + public final void readString16Array(@NonNull String[] val) { + int N = readInt(); + if (N == val.length) { + for (int i=0; i<N; i++) { + val[i] = readString16(); } } else { throw new RuntimeException("bad array lengths"); @@ -2641,20 +2697,7 @@ public final class Parcel { @UnsupportedAppUsage @Nullable public final String[] readStringArray() { - String[] array = null; - - int length = readInt(); - if (length >= 0) - { - array = new String[length]; - - for (int i = 0 ; i < length ; i++) - { - array[i] = readString(); - } - } - - return array; + return createString16Array(); } /** diff --git a/core/java/android/os/RegistrantList.java b/core/java/android/os/RegistrantList.java index 98f949bbfd84..81750021fdd5 100644 --- a/core/java/android/os/RegistrantList.java +++ b/core/java/android/os/RegistrantList.java @@ -66,6 +66,10 @@ public class RegistrantList } } + public synchronized void removeAll() { + registrants.clear(); + } + @UnsupportedAppUsage public synchronized int size() diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java index e251f8072b1f..a63b82e44f06 100644 --- a/core/java/android/os/storage/StorageVolume.java +++ b/core/java/android/os/storage/StorageVolume.java @@ -149,18 +149,18 @@ public final class StorageVolume implements Parcelable { } private StorageVolume(Parcel in) { - mId = in.readString(); - mPath = new File(in.readString()); - mInternalPath = new File(in.readString()); - mDescription = in.readString(); + mId = in.readString8(); + mPath = new File(in.readString8()); + mInternalPath = new File(in.readString8()); + mDescription = in.readString8(); mPrimary = in.readInt() != 0; mRemovable = in.readInt() != 0; mEmulated = in.readInt() != 0; mAllowMassStorage = in.readInt() != 0; mMaxFileSize = in.readLong(); mOwner = in.readParcelable(null); - mFsUuid = in.readString(); - mState = in.readString(); + mFsUuid = in.readString8(); + mState = in.readString8(); } /** @@ -503,17 +503,17 @@ public final class StorageVolume implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { - parcel.writeString(mId); - parcel.writeString(mPath.toString()); - parcel.writeString(mInternalPath.toString()); - parcel.writeString(mDescription); + parcel.writeString8(mId); + parcel.writeString8(mPath.toString()); + parcel.writeString8(mInternalPath.toString()); + parcel.writeString8(mDescription); parcel.writeInt(mPrimary ? 1 : 0); parcel.writeInt(mRemovable ? 1 : 0); parcel.writeInt(mEmulated ? 1 : 0); parcel.writeInt(mAllowMassStorage ? 1 : 0); parcel.writeLong(mMaxFileSize); parcel.writeParcelable(mOwner, flags); - parcel.writeString(mFsUuid); - parcel.writeString(mState); + parcel.writeString8(mFsUuid); + parcel.writeString8(mState); } } diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index fb9065568e9b..d7aaa4d6cbf9 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -181,22 +181,22 @@ public class VolumeInfo implements Parcelable { @UnsupportedAppUsage public VolumeInfo(Parcel parcel) { - id = parcel.readString(); + id = parcel.readString8(); type = parcel.readInt(); if (parcel.readInt() != 0) { disk = DiskInfo.CREATOR.createFromParcel(parcel); } else { disk = null; } - partGuid = parcel.readString(); + partGuid = parcel.readString8(); mountFlags = parcel.readInt(); mountUserId = parcel.readInt(); state = parcel.readInt(); - fsType = parcel.readString(); - fsUuid = parcel.readString(); - fsLabel = parcel.readString(); - path = parcel.readString(); - internalPath = parcel.readString(); + fsType = parcel.readString8(); + fsUuid = parcel.readString8(); + fsLabel = parcel.readString8(); + path = parcel.readString8(); + internalPath = parcel.readString8(); } @UnsupportedAppUsage @@ -553,7 +553,7 @@ public class VolumeInfo implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { - parcel.writeString(id); + parcel.writeString8(id); parcel.writeInt(type); if (disk != null) { parcel.writeInt(1); @@ -561,14 +561,14 @@ public class VolumeInfo implements Parcelable { } else { parcel.writeInt(0); } - parcel.writeString(partGuid); + parcel.writeString8(partGuid); parcel.writeInt(mountFlags); parcel.writeInt(mountUserId); parcel.writeInt(state); - parcel.writeString(fsType); - parcel.writeString(fsUuid); - parcel.writeString(fsLabel); - parcel.writeString(path); - parcel.writeString(internalPath); + parcel.writeString8(fsType); + parcel.writeString8(fsUuid); + parcel.writeString8(fsLabel); + parcel.writeString8(path); + parcel.writeString8(internalPath); } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 78b0910ad01a..b280c5d63cd7 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10737,13 +10737,33 @@ public final class Settings { * The associated value is a specially formatted string that describes the * size and density of simulated secondary display devices. * <p> - * Format: {width}x{height}/{dpi};... + * Format: + * <pre> + * [display1];[display2];... + * </pre> + * with each display specified as: + * <pre> + * [mode1]|[mode2]|...,[flag1],[flag2],... + * </pre> + * with each mode specified as: + * <pre> + * [width]x[height]/[densityDpi] + * </pre> + * Supported flags: + * <ul> + * <li><pre>secure</pre>: creates a secure display</li> + * <li><pre>own_content_only</pre>: only shows this display's own content</li> + * <li><pre>should_show_system_decorations</pre>: supports system decorations</li> + * </ul> * </p><p> * Example: * <ul> * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li> - * <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first - * at 1080p and the second at 720p.</li> + * <li><code>1920x1080/320,secure;1280x720/213</code>: make two overlays, the first at + * 1080p and secure; the second at 720p.</li> + * <li><code>1920x1080/320|3840x2160/640</code>: make one overlay that is 1920x1080 at + * 213dpi by default, but can also be upscaled to 3840x2160 at 640dpi by the system if the + * display device allows.</li> * <li>If the value is empty, then no overlay display devices are created.</li> * </ul></p> * diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index c0d61d473971..d369883f3ac3 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -385,7 +385,7 @@ public final class DisplayInfo implements Parcelable { displayId = source.readInt(); address = source.readParcelable(null); deviceProductInfo = source.readParcelable(null); - name = source.readString(); + name = source.readString8(); appWidth = source.readInt(); appHeight = source.readInt(); smallestNominalAppWidth = source.readInt(); @@ -418,8 +418,8 @@ public final class DisplayInfo implements Parcelable { presentationDeadlineNanos = source.readLong(); state = source.readInt(); ownerUid = source.readInt(); - ownerPackageName = source.readString(); - uniqueId = source.readString(); + ownerPackageName = source.readString8(); + uniqueId = source.readString8(); removeMode = source.readInt(); } @@ -431,7 +431,7 @@ public final class DisplayInfo implements Parcelable { dest.writeInt(displayId); dest.writeParcelable(address, flags); dest.writeParcelable(deviceProductInfo, flags); - dest.writeString(name); + dest.writeString8(name); dest.writeInt(appWidth); dest.writeInt(appHeight); dest.writeInt(smallestNominalAppWidth); @@ -462,8 +462,8 @@ public final class DisplayInfo implements Parcelable { dest.writeLong(presentationDeadlineNanos); dest.writeInt(state); dest.writeInt(ownerUid); - dest.writeString(ownerPackageName); - dest.writeString(uniqueId); + dest.writeString8(ownerPackageName); + dest.writeString8(uniqueId); dest.writeInt(removeMode); } diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 887607972bbc..a135b0ca148b 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -22,8 +22,6 @@ import static android.view.InsetsState.toInternalType; import static android.view.InsetsState.toPublicType; import static android.view.WindowInsets.Type.all; import static android.view.WindowInsets.Type.ime; -import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_APPEARANCE_CONTROLLED; -import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_BEHAVIOR_CONTROLLED; import android.animation.AnimationHandler; import android.animation.Animator; @@ -43,7 +41,6 @@ import android.util.SparseArray; import android.view.InsetsSourceConsumer.ShowResult; import android.view.InsetsState.InternalInsetsType; import android.view.SurfaceControl.Transaction; -import android.view.ViewTreeObserver.OnPreDrawListener; import android.view.WindowInsets.Type; import android.view.WindowInsets.Type.InsetsType; import android.view.WindowInsetsAnimation.Bounds; @@ -424,8 +421,14 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation private final String TAG = "InsetsControllerImpl"; + /** The local state */ private final InsetsState mState = new InsetsState(); - private final InsetsState mLastDispachedState = new InsetsState(); + + /** The state dispatched from server */ + private final InsetsState mLastDispatchedState = new InsetsState(); + + /** The state sent to server */ + private final InsetsState mRequestedState = new InsetsState(); private final Rect mFrame = new Rect(); private final BiFunction<InsetsController, Integer, InsetsSourceConsumer> mConsumerCreator; @@ -539,24 +542,24 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } public InsetsState getLastDispatchedState() { - return mLastDispachedState; + return mLastDispatchedState; } @VisibleForTesting public boolean onStateChanged(InsetsState state) { boolean localStateChanged = !mState.equals(state, true /* excludingCaptionInsets */) || !captionInsetsUnchanged(); - if (!localStateChanged && mLastDispachedState.equals(state)) { + if (!localStateChanged && mLastDispatchedState.equals(state)) { return false; } updateState(state); - mLastDispachedState.set(state, true /* copySources */); + mLastDispatchedState.set(state, true /* copySources */); applyLocalVisibilityOverride(); if (localStateChanged) { mHost.notifyInsetsChanged(); } - if (!mState.equals(mLastDispachedState, true /* excludingCaptionInsets */)) { - sendStateToWindowManager(); + if (!mState.equals(mLastDispatchedState, true /* excludingCaptionInsets */)) { + updateRequestedState(); } return true; } @@ -629,8 +632,9 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } - int[] showTypes = new int[1]; - int[] hideTypes = new int[1]; + final boolean hasControl = mTmpControlArray.size() > 0; + final int[] showTypes = new int[1]; + final int[] hideTypes = new int[1]; // Ensure to update all existing source consumers for (int i = mSourceConsumers.size() - 1; i >= 0; i--) { @@ -663,6 +667,12 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (hideTypes[0] != 0) { applyAnimation(hideTypes[0], false /* show */, false /* fromIme */); } + if (hasControl) { + // We might have changed our requested visibilities while we don't have the control, + // so we need to update our requested state once we have control. Otherwise, our + // requested state at the server side might be incorrect. + updateRequestedState(); + } } @Override @@ -992,7 +1002,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation @VisibleForTesting public void notifyVisibilityChanged() { mHost.notifyInsetsChanged(); - sendStateToWindowManager(); + updateRequestedState(); } /** @@ -1042,18 +1052,28 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } /** - * Sends the local visibility state back to window manager. + * Sends the local visibility state back to window manager if it is changed. */ - private void sendStateToWindowManager() { - InsetsState tmpState = new InsetsState(); + private void updateRequestedState() { + boolean changed = false; for (int i = mSourceConsumers.size() - 1; i >= 0; i--) { final InsetsSourceConsumer consumer = mSourceConsumers.valueAt(i); - if (consumer.getType() == ITYPE_CAPTION_BAR) continue; + final @InternalInsetsType int type = consumer.getType(); + if (type == ITYPE_CAPTION_BAR) { + continue; + } if (consumer.getControl() != null) { - tmpState.addSource(mState.getSource(consumer.getType())); + final InsetsSource localSource = mState.getSource(type); + if (!localSource.equals(mRequestedState.peekSource(type))) { + mRequestedState.addSource(new InsetsSource(localSource)); + changed = true; + } } } - mHost.onInsetsModified(tmpState); + if (!changed) { + return; + } + mHost.onInsetsModified(mRequestedState); } @VisibleForTesting diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java index 033ccef3666d..b0158467a17b 100644 --- a/core/java/android/view/InsetsSource.java +++ b/core/java/android/view/InsetsSource.java @@ -116,15 +116,15 @@ public class InsetsSource implements Parcelable { if (!ignoreVisibility && !mVisible) { return Insets.NONE; } - if (!getIntersection(frame, relativeFrame, mTmpFrame)) { - return Insets.NONE; - } // During drag-move and drag-resizing, the caption insets position may not get updated // before the app frame get updated. To layout the app content correctly during drag events, // we always return the insets with the corresponding height covering the top. if (getType() == ITYPE_CAPTION_BAR) { return Insets.of(0, frame.height(), 0, 0); } + if (!getIntersection(frame, relativeFrame, mTmpFrame)) { + return Insets.NONE; + } // TODO: Currently, non-floating IME always intersects at bottom due to issues with cutout. // However, we should let the policy decide from the server. @@ -136,20 +136,25 @@ public class InsetsSource implements Parcelable { if (mTmpFrame.width() == relativeFrame.width()) { if (mTmpFrame.top == relativeFrame.top) { return Insets.of(0, mTmpFrame.height(), 0, 0); - } else { + } else if (mTmpFrame.bottom == relativeFrame.bottom) { return Insets.of(0, 0, 0, mTmpFrame.height()); } + // TODO: remove when insets are shell-customizable. + // This is a hack that says "if this is a top-inset (eg statusbar), always apply it + // to the top". It is used when adjusting primary split for IME. + if (mTmpFrame.top == 0) { + return Insets.of(0, mTmpFrame.height(), 0, 0); + } } // Intersecting at left/right else if (mTmpFrame.height() == relativeFrame.height()) { if (mTmpFrame.left == relativeFrame.left) { return Insets.of(mTmpFrame.width(), 0, 0, 0); - } else { + } else if (mTmpFrame.right == relativeFrame.right) { return Insets.of(0, 0, mTmpFrame.width(), 0); } - } else { - return Insets.NONE; } + return Insets.NONE; } /** @@ -208,8 +213,16 @@ public class InsetsSource implements Parcelable { public InsetsSource(Parcel in) { mType = in.readInt(); - mFrame = in.readParcelable(null /* loader */); - mVisibleFrame = in.readParcelable(null /* loader */); + if (in.readInt() != 0) { + mFrame = Rect.CREATOR.createFromParcel(in); + } else { + mFrame = null; + } + if (in.readInt() != 0) { + mVisibleFrame = Rect.CREATOR.createFromParcel(in); + } else { + mVisibleFrame = null; + } mVisible = in.readBoolean(); } @@ -221,8 +234,18 @@ public class InsetsSource implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mType); - dest.writeParcelable(mFrame, 0 /* flags*/); - dest.writeParcelable(mVisibleFrame, 0 /* flags */); + if (mFrame != null) { + dest.writeInt(1); + mFrame.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } + if (mVisibleFrame != null) { + dest.writeInt(1); + mVisibleFrame.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } dest.writeBoolean(mVisible); } diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 76ed37c51bfe..0625806e40ef 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -894,7 +894,7 @@ public final class SurfaceControl implements Parcelable { throw new IllegalArgumentException("source must not be null"); } - mName = in.readString(); + mName = in.readString8(); mWidth = in.readInt(); mHeight = in.readInt(); @@ -912,7 +912,7 @@ public final class SurfaceControl implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mName); + dest.writeString8(mName); dest.writeInt(mWidth); dest.writeInt(mHeight); if (mNativeObject == 0) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index f98c1f660cfa..310299910e96 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -11519,6 +11519,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, ViewParent parent = getParent(); if (parent instanceof View) { return ((View) parent).getWindowInsetsController(); + } else if (parent instanceof ViewRootImpl) { + // Between WindowManager.addView() and the first traversal AttachInfo isn't set yet. + return ((ViewRootImpl) parent).getInsetsController(); } return null; } diff --git a/core/java/android/window/DisplayAreaInfo.java b/core/java/android/window/DisplayAreaInfo.java index 0d35bcafdf45..358467ff599f 100644 --- a/core/java/android/window/DisplayAreaInfo.java +++ b/core/java/android/window/DisplayAreaInfo.java @@ -43,15 +43,19 @@ public final class DisplayAreaInfo implements Parcelable { */ public final int displayId; - public DisplayAreaInfo(@NonNull WindowContainerToken token, int displayId) { + public final int featureId; + + public DisplayAreaInfo(@NonNull WindowContainerToken token, int displayId, int featureId) { this.token = token; this.displayId = displayId; + this.featureId = featureId; } private DisplayAreaInfo(Parcel in) { token = WindowContainerToken.CREATOR.createFromParcel(in); configuration.readFromParcel(in); displayId = in.readInt(); + featureId = in.readInt(); } @Override @@ -59,6 +63,7 @@ public final class DisplayAreaInfo implements Parcelable { token.writeToParcel(dest, flags); configuration.writeToParcel(dest, flags); dest.writeInt(displayId); + dest.writeInt(featureId); } @NonNull diff --git a/core/java/android/window/DisplayAreaOrganizer.java b/core/java/android/window/DisplayAreaOrganizer.java index f3ef5a0c0aa2..a2fd128e2246 100644 --- a/core/java/android/window/DisplayAreaOrganizer.java +++ b/core/java/android/window/DisplayAreaOrganizer.java @@ -21,6 +21,7 @@ import android.annotation.RequiresPermission; import android.annotation.TestApi; import android.os.RemoteException; import android.util.Singleton; +import android.view.SurfaceControl; /** * Interface for WindowManager to delegate control of display areas. @@ -64,7 +65,8 @@ public class DisplayAreaOrganizer extends WindowOrganizer { } } - public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo) {} + public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo, + @NonNull SurfaceControl leash) {} public void onDisplayAreaVanished(@NonNull DisplayAreaInfo displayAreaInfo) {} @@ -76,8 +78,9 @@ public class DisplayAreaOrganizer extends WindowOrganizer { private final IDisplayAreaOrganizer mInterface = new IDisplayAreaOrganizer.Stub() { @Override - public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo) { - DisplayAreaOrganizer.this.onDisplayAreaAppeared(displayAreaInfo); + public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo, + @NonNull SurfaceControl leash) { + DisplayAreaOrganizer.this.onDisplayAreaAppeared(displayAreaInfo, leash); } @Override diff --git a/core/java/android/window/IDisplayAreaOrganizer.aidl b/core/java/android/window/IDisplayAreaOrganizer.aidl index 39a9235a4224..5e3e5e8e7d42 100644 --- a/core/java/android/window/IDisplayAreaOrganizer.aidl +++ b/core/java/android/window/IDisplayAreaOrganizer.aidl @@ -17,13 +17,14 @@ package android.window; import android.window.DisplayAreaInfo; +import android.view.SurfaceControl; /** * Interface for WindowManager to delegate control of display areas. * {@hide} */ oneway interface IDisplayAreaOrganizer { - void onDisplayAreaAppeared(in DisplayAreaInfo displayAreaInfo); + void onDisplayAreaAppeared(in DisplayAreaInfo displayAreaInfo, in SurfaceControl leash); void onDisplayAreaVanished(in DisplayAreaInfo displayAreaInfo); void onDisplayAreaInfoChanged(in DisplayAreaInfo displayAreaInfo); } diff --git a/core/java/android/window/ITaskOrganizer.aidl b/core/java/android/window/ITaskOrganizer.aidl index b4f0162b71af..67465252d38e 100644 --- a/core/java/android/window/ITaskOrganizer.aidl +++ b/core/java/android/window/ITaskOrganizer.aidl @@ -25,7 +25,14 @@ import android.window.WindowContainerToken; * {@hide} */ oneway interface ITaskOrganizer { - void onTaskAppeared(in ActivityManager.RunningTaskInfo taskInfo); + /** + * A callback when the Task is available for the registered organizer. The client is responsible + * for releasing the SurfaceControl in the callback. + * + * @param taskInfo The information about the Task that's available + * @param leash A persistent leash for this Task. + */ + void onTaskAppeared(in ActivityManager.RunningTaskInfo taskInfo, in SurfaceControl leash); void onTaskVanished(in ActivityManager.RunningTaskInfo taskInfo); /** diff --git a/core/java/android/window/IWindowContainerToken.aidl b/core/java/android/window/IWindowContainerToken.aidl index 57c7abf9c7e1..81a04e9c10af 100644 --- a/core/java/android/window/IWindowContainerToken.aidl +++ b/core/java/android/window/IWindowContainerToken.aidl @@ -24,9 +24,4 @@ import android.view.SurfaceControl; * @hide */ interface IWindowContainerToken { - - /** - * Gets a persistent leash for this container or {@code null}. - */ - SurfaceControl getLeash(); } diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java index f661d9af5999..1f5e53369cd8 100644 --- a/core/java/android/window/TaskOrganizer.java +++ b/core/java/android/window/TaskOrganizer.java @@ -24,6 +24,7 @@ import android.annotation.TestApi; import android.app.ActivityManager; import android.os.RemoteException; import android.util.Singleton; +import android.view.SurfaceControl; import java.util.List; @@ -59,7 +60,8 @@ public class TaskOrganizer extends WindowOrganizer { } @BinderThread - public void onTaskAppeared(@NonNull ActivityManager.RunningTaskInfo taskInfo) {} + public void onTaskAppeared(@NonNull ActivityManager.RunningTaskInfo taskInfo, + @NonNull SurfaceControl leash) {} @BinderThread public void onTaskVanished(@NonNull ActivityManager.RunningTaskInfo taskInfo) {} @@ -155,8 +157,8 @@ public class TaskOrganizer extends WindowOrganizer { private final ITaskOrganizer mInterface = new ITaskOrganizer.Stub() { @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) { - TaskOrganizer.this.onTaskAppeared(taskInfo); + public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { + TaskOrganizer.this.onTaskAppeared(taskInfo, leash); } @Override diff --git a/core/java/android/window/TaskOrganizerTaskEmbedder.java b/core/java/android/window/TaskOrganizerTaskEmbedder.java index b63741ec69c4..2fb46509f337 100644 --- a/core/java/android/window/TaskOrganizerTaskEmbedder.java +++ b/core/java/android/window/TaskOrganizerTaskEmbedder.java @@ -21,7 +21,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import android.app.ActivityManager; import android.app.ActivityOptions; -import android.app.TaskStackListener; import android.content.Context; import android.graphics.Rect; import android.util.Log; @@ -215,14 +214,14 @@ public class TaskOrganizerTaskEmbedder extends TaskEmbedder { private class TaskOrganizerImpl extends TaskOrganizer { @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) { + public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { if (DEBUG) { log("taskAppeared: " + taskInfo.taskId); } mTaskInfo = taskInfo; mTaskToken = taskInfo.token; - mTaskLeash = mTaskToken.getLeash(); + mTaskLeash = leash; mTransaction.reparent(mTaskLeash, mSurfaceControl) .show(mTaskLeash) .show(mSurfaceControl) diff --git a/core/java/android/window/WindowContainerToken.java b/core/java/android/window/WindowContainerToken.java index 3316d0e5b71f..c92ccae66ff8 100644 --- a/core/java/android/window/WindowContainerToken.java +++ b/core/java/android/window/WindowContainerToken.java @@ -17,14 +17,10 @@ package android.window; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.TestApi; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; -import android.os.RemoteException; -import android.view.SurfaceControl; -import android.window.IWindowContainerToken; /** * Interface for a window container to communicate with the window manager. This also acts as a @@ -45,15 +41,6 @@ public final class WindowContainerToken implements Parcelable { mRealToken = IWindowContainerToken.Stub.asInterface(in.readStrongBinder()); } - @Nullable - public SurfaceControl getLeash() { - try { - return mRealToken.getLeash(); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - /** @hide */ public IBinder asBinder() { return mRealToken.asBinder(); diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index f5d38ca37bb7..863659d7c4eb 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -2019,10 +2019,17 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind if (getForeground() != null) { drawableChanged(); } - getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight()); } } + /** + * An interface to be called when the caption visibility or height changed, to report the + * corresponding insets change to the InsetsController. + */ + public void notifyCaptionHeightChanged() { + getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight()); + } + void setWindow(PhoneWindow phoneWindow) { mWindow = phoneWindow; Context context = getContext(); @@ -2093,7 +2100,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind mDecorCaptionView.onConfigurationChanged(displayWindowDecor); enableCaption(displayWindowDecor); } - getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight()); } void onResourcesLoaded(LayoutInflater inflater, int layoutResource) { diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java index 7a01024ffc36..21021457377a 100644 --- a/core/java/com/android/internal/widget/DecorCaptionView.java +++ b/core/java/com/android/internal/widget/DecorCaptionView.java @@ -30,6 +30,7 @@ import android.view.ViewOutlineProvider; import android.view.Window; import com.android.internal.R; +import com.android.internal.policy.DecorView; import com.android.internal.policy.PhoneWindow; import java.util.ArrayList; @@ -305,6 +306,8 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, } } + ((DecorView) mOwner.getDecorView()).notifyCaptionHeightChanged(); + // This assumes that the caption bar is at the top. mOwner.notifyRestrictedCaptionAreaCallback(mMaximize.getLeft(), mMaximize.getTop(), mClose.getRight(), mClose.getBottom()); diff --git a/core/proto/android/stats/devicepolicy/device_policy_enums.proto b/core/proto/android/stats/devicepolicy/device_policy_enums.proto index 896ee4fa42a5..7c1a04944d68 100644 --- a/core/proto/android/stats/devicepolicy/device_policy_enums.proto +++ b/core/proto/android/stats/devicepolicy/device_policy_enums.proto @@ -197,4 +197,8 @@ enum EventId { CROSS_PROFILE_SETTINGS_PAGE_USER_CONSENTED = 170; CROSS_PROFILE_SETTINGS_PAGE_USER_DECLINED_CONSENT = 171; CROSS_PROFILE_SETTINGS_PAGE_PERMISSION_REVOKED = 172; + DOCSUI_EMPTY_STATE_NO_PERMISSION = 173; + DOCSUI_EMPTY_STATE_QUIET_MODE = 174; + DOCSUI_LAUNCH_OTHER_APP = 175; + DOCSUI_PICK_RESULT = 176; } diff --git a/core/res/res/layout/notification_template_material_conversation.xml b/core/res/res/layout/notification_template_material_conversation.xml index d861f16089f2..9a9d8b96c677 100644 --- a/core/res/res/layout/notification_template_material_conversation.xml +++ b/core/res/res/layout/notification_template_material_conversation.xml @@ -157,12 +157,13 @@ <!-- App Name --> <com.android.internal.widget.ObservableTextView android:id="@+id/app_name_text" + android:textAppearance="@style/TextAppearance.DeviceDefault.Notification.Info" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/conversation_content_start" - android:textSize="12sp" - android:layout_marginBottom="16dp" - android:textAppearance="@style/TextAppearance.DeviceDefault.Notification.Info" + android:layout_gravity="center" + android:layout_marginStart="@dimen/notification_header_separating_margin" + android:paddingTop="1sp" + android:singleLine="true" /> <TextView diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index b0ee1c85f585..7024755dd2d8 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Jou toestel sal uitgevee word"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Die administrasieprogram kan nie gebruik word nie. Jou toestel sal nou uitgevee word.\n\nKontak jou organisasie se administrateur as jy vrae het."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Druk is gedeaktiveer deur <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Deblokkeer jou persoonlike programme"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Programme word môre geblokkeer"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Jou IT-administrateur laat nie toe dat jou werkprofiel vir langer as <xliff:g id="DAYS">%1$d</xliff:g> dae onderbreek word nie"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Skakel jou werkprofiel aan"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Jou persoonlike programme word geblokkeer totdat jy jou werkprofiel aanskakel"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Jou persoonlike programme sal môre geblokkeer word"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Skakel werkprofiel aan"</string> <string name="me" msgid="6207584824693813140">"Ek"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet-opsies"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"As jy albei volumesleutels vir \'n paar sekondes hou, skakel dit <xliff:g id="SERVICE">%1$s</xliff:g>, \'n toeganklikheidkenmerk, aan. Dit kan verander hoe jou toestel werk.\n\nJy kan hierdie kortpad na \'n ander kenmerk in Instellings en Toeganklikheid verander."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Skakel aan"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Moenie aanskakel nie"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AAN"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"AF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Gee <xliff:g id="SERVICE">%1$s</xliff:g> volle beheer oor jou toestel?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"As jy <xliff:g id="SERVICE">%1$s</xliff:g> aanskakel, sal jou toestel nie jou skermslot gebruik om data-enkripsie te verbeter nie."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Volle beheer is gepas vir programme wat jou help met toeganklikheidsbehoeftes, maar nie vir die meeste programme nie."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Opgedateer deur jou administrateur"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Uitgevee deur jou administrateur"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batterybespaarder doen die volgende om die batterylewe te verleng:\n·Skakel Donkertema aan\n·Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Hey Google\", af of beperk hulle\n\n"<annotation id="url">"Kom meer te wete"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batterybespaarder doen die volgende om die batterylewe te verleng:\n·Skakel Donkertema aan\n·Skakel agtergrondaktiwiteit, sommige visuele effekte en ander kenmerke, soos \"Hey Google\", af of beperk hulle"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Databespaarder verhoed sommige programme om data in die agtergrond te stuur of te aanvaar om datagebruik te help verminder. \'n Program wat jy tans gebruik kan by data ingaan, maar sal dit dalk minder gereeld doen. Dit kan byvoorbeeld beteken dat prente nie wys totdat jy op hulle tik nie."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Skakel Databespaarder aan?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Skakel aan"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index d48726919903..df521e037300 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"የእርስዎ መሣሪያ ይደመሰሳል"</string> <string name="factory_reset_message" msgid="2657049595153992213">"የአስተዳዳሪ መተግበሪያ ስራ ላይ ሊውል አይችልም። የእርስዎን መሣሪያ አሁን ይደመሰሳል።\n\nጥያቄዎች ካለዎት የድርጅትዎን አስተዳዳሪ ያነጋግሩ።"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ማተም በ<xliff:g id="OWNER_APP">%s</xliff:g> ተሰናክሏል።"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"የእርስዎን የግል መተግበሪያዎች እገዳ ያንሱ"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"መተግበሪያዎች ነገ ይታገዳሉ"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"የእርስዎ አይቲ አስተዳዳሪ የሥራ መገለጫዎ ከ<xliff:g id="DAYS">%1$d</xliff:g> ቀኖች በላይ ባለበት እንዲቆም አይፈቅዱም"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"የስራ መገለጫዎን ያብሩት"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"የስራ መገለጫዎን እስኪያበሩት ድረስ የግል መተግበሪያዎችዎ ታግደዋል"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"የግል መተግበሪያዎችዎ ነገ ይታገዳሉ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"የሥራ መገለጫን አብራ"</string> <string name="me" msgid="6207584824693813140">"እኔ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"የጡባዊ አማራጮች"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ሁለቱንም የድምፅ ቁልፎች ወደ ታች ለጥቂት ሰከንዶች መያዝ የተደራሽነት ባሕሪያትን <xliff:g id="SERVICE">%1$s</xliff:g> ያበራል። ይህ የእርስዎ መሣሪያ እንዴት እንደሚሠራ ሊለውጥ ይችላል።\n\nበቅንብሮች > ተደራሽነት ውስጥ ወደ ሌላ ባሕሪ ይህን አቋራጭ መለወጥ ይችላሉ።"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"አብራ"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"አታብራ"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"አብራ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ቅናሽ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> ሙሉ የመሣሪያዎ ቁጥጥር እንዲኖረው ይፈቀድለት?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g>ን ካበሩት መሳሪያዎ የውሂብ ምስጠራን ለማላቅ የማያ ገጽ መቆለፊያዎን አይጠቀምም።"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ሙሉ ቁጥጥር ከተደራሽነት ፍላጎቶች ጋር እርስዎን ለሚያግዝዎት መተግበሪያዎች ተገቢ ነው ሆኖም ግን ለአብዛኛዎቹ መተግበሪያዎች አይሆንም።"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"በእርስዎ አስተዳዳሪ ተዘምኗል"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"በእርስዎ አስተዳዳሪ ተሰርዟል"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"እሺ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"የባትሪ ዕድሜን ለማራዘም፣ የባትሪ ቆጣቢ፦\n·ጨለማ ገጽታን ያበራል\n·የበስተጀርባ እንቅስቃሴን፣ አንዳንድ የሚታዩ ማሳመሪያዎችን፣ እና ሌሎች እንደ “Hey Google” ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል\n\n"<annotation id="url">"የበለጠ ለመረዳት"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"የባትሪ ዕድሜን ለማራዘም፣ የባትሪ ቆጣቢ፦\n·ጨለማ ገጽታን ያበራል\n·የበስተጀርባ እንቅስቃሴን፣ አንዳንድ የሚታዩ ማሳመሪያዎችን፣ እና ሌሎች እንደ “Hey Google” ያሉ ባህሪያትን ያጠፋል ወይም ይገድባል"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"የውሂብ አጠቃቀም እንዲቀንስ ለማገዝ ውሂብ ቆጣቢ አንዳንድ መተግበሪያዎች ከበስተጀርባ ሆነው ውሂብ እንዳይልኩ ወይም እንዳይቀበሉ ይከለክላቸዋል። በአሁኑ ጊዜ እየተጠቀሙበት ያለ መተግበሪያ ውሂብ ሊደርስ ይችላል፣ ነገር ግን ባነሰ ተደጋጋሚነት ሊሆን ይችላል። ይሄ ማለት ለምሳሌ ምስሎችን መታ እስኪያደርጓቸው ድረስ ላይታዩ ይችላሉ ማለት ነው።"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ውሂብ ቆጣቢ ይጥፋ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"አብራ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 051aa964d4f4..ec049065dc67 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -208,9 +208,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"سيتم محو بيانات جهازك."</string> <string name="factory_reset_message" msgid="2657049595153992213">"تعذّر استخدام تطبيق المشرف. سيتم محو بيانات جهازك الآن.\n\nإذا كانت لديك أسئلة، اتصل بمشرف مؤسستك."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"تم إيقاف الطباعة بواسطة <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"إزالة حظر تطبيقاتك الشخصية"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"سيتم حظر التطبيقات غدًا"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"لا يسمح لك مشرف تكنولوجيا المعلومات بإيقاف الملف الشخصي للعمل مؤقتًا أكثر من <xliff:g id="DAYS">%1$d</xliff:g> يوم."</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"تفعيل الملف الشخصي للعمل"</string> <string name="me" msgid="6207584824693813140">"أنا"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"خيارات الجهاز اللوحي"</string> @@ -1719,10 +1722,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"يؤدي الضغط مع الاستمرار لبضع ثوانٍ على كلا مفتاحَي التحكّم في مستوى الصوت إلى تفعيل <xliff:g id="SERVICE">%1$s</xliff:g> وهي إحدى ميزات إمكانية الوصول. يمكن أن يؤدي هذا الإجراء إلى تغيير كيفية عمل جهازك.\n\nيمكنك تغيير هذا الاختصار لاستخدامه مع ميزة أخرى في الإعدادات > أدوات تمكين الوصول."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"تفعيل"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"عدم التفعيل"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"مفعّل"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"غير مفعّل"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"هل تريد السماح لخدمة <xliff:g id="SERVICE">%1$s</xliff:g> بالتحكّم الكامل في جهازك؟"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"في حال تفعيل <xliff:g id="SERVICE">%1$s</xliff:g>، لن يستخدم جهازك ميزة قفل الشاشة لتحسين ترميز البيانات."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"إنّ التحكّم الكامل ليس ملائمًا لمعظم التطبيقات، باستثناء التطبيقات المعنية بسهولة الاستخدام."</string> @@ -1888,8 +1889,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"تم التحديث بواسطة المشرف"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"تم الحذف بواسطة المشرف"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"حسنًا"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"لإطالة عمر البطارية، \"توفير شحن البطارية\":\n·تفعيل \"المظهر الداكن\"\n إيقاف النشاط في الخلفية وأيضًا بعض التأثيرات المرئية والميزات الأخرى، مثلاً \"Ok Google\" أو فرض قيود عليها\n\n"<annotation id="url">"مزيد من المعلومات"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"لإطالة عمر البطارية، \"توفير شحن البطارية\":\n·تفعيل \"المظهر الداكن\"\n إيقاف النشاط في الخلفية وأيضًا بعض التأثيرات المرئية والميزات الأخرى، مثلاً \"Ok Google\" أو فرض قيود عليها."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"للمساعدة في خفض استخدام البيانات، تمنع ميزة \"توفير البيانات\" بعض التطبيقات من إرسال البيانات وتلقّيها في الخلفية. يمكن للتطبيقات المتاحة لديك الآن استخدام البيانات، ولكن لا يمكنها الإكثار من ذلك. وهذا يعني أن الصور مثلاً لا تظهر حتى تنقر عليها."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"هل تريد تفعيل توفير البيانات؟"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"تفعيل"</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 755361a81942..ef193cbd75cb 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"আপোনাৰ ডিভাইচৰ ডেটা মচা হ\'ব"</string> <string name="factory_reset_message" msgid="2657049595153992213">"এই প্ৰশাসক এপটো ব্যৱহাৰ কৰিব নোৱাৰি। এতিয়া আপোনাৰ ডিভাইচটোৰ ডেটা মচা হ\'ব।\n\nআপোনাৰ কিবা প্ৰশ্ন থাকিলে আপোনাৰ প্ৰতিষ্ঠানৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"প্ৰিণ্ট কৰা কাৰ্য <xliff:g id="OWNER_APP">%s</xliff:g>এ অক্ষম কৰি ৰাখিছে।"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"আপোনাৰ ব্যক্তিগত এপ্সমূহ অৱৰোধৰ পৰা আঁতৰাওক"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"এপ্সমূহ কাইলৈ অৱৰোধ কৰা হ’ব"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"আপোনাৰ আইটি প্ৰশাসকে আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইল <xliff:g id="DAYS">%1$d</xliff:g> দিনতকৈ বেছি সময়ৰ বাবে পজ হৈ থকাৰ অনুমতি নিদিয়ে"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"কৰ্মস্থানৰ প্ৰ’ফাইলটো অন কৰক"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"আপুনি নিজৰ কৰ্মস্থানৰ প্ৰ’ফাইলটো অন নকৰালৈকে আপোনাৰ ব্যক্তিগত এপ্সমূহ অৱৰোধ কৰা থাকে"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"আপোনাৰ ব্যক্তিগত এপ্সমূহ কাইলৈ অৱৰোধ কৰা হ’ব"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"কৰ্মস্থানৰ প্ৰ’ফাইল অন কৰক"</string> <string name="me" msgid="6207584824693813140">"মই"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"টে\'বলেটৰ বিকল্পসমূহ"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"দুয়োটা ভলিউম কী কিছুসময়ৰ বাবে ধৰি থাকিলে এটা সাধ্য- সুবিধা <xliff:g id="SERVICE">%1$s</xliff:g> অন কৰে। এইটোৱে আপোনাৰ ডিভাইচটোৱে কাম কৰাৰ ধৰণ সলনি কৰিব পাৰে।\n\nআপুনি ছেটিংসমূহ > সাধ্য-সুবিধাসমূহত এই শ্বৰ্টকাটটো অন্য এটা সুবিধালৈ সলনি কৰিব পাৰে।"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"অন কৰক"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"অন নকৰিব"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"অন কৰা আছে"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"অফ কৰা আছে"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>ক আপোনাৰ ডিভাইচটোৰ সম্পূর্ণ নিয়ন্ত্ৰণ দিবনে?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"যদি আপুনি <xliff:g id="SERVICE">%1$s</xliff:g> অন কৰে, তেন্তে আপোনাৰ ডিভাইচটোৱে ডেটা এনক্ৰিপশ্বনৰ গুণগত মান উন্নত কৰিবলৈ স্ক্ৰীন লক ব্যৱহাৰ নকৰে।"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"আপোনাক সাধ্য সুবিধাৰ প্ৰয়োজনসমূহৰ জৰিয়তে সহায় কৰা এপ্সমূহৰ বাবে সম্পূর্ণ নিয়ন্ত্ৰণৰ সুবিধাটো সঠিক যদিও অধিকাংশ এপৰ বাবে এয়া সঠিক নহয়।"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"আপোনাৰ প্ৰশাসকে আপেডট কৰিছে"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"আপোনাৰ প্ৰশাসকে মচিছে"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ঠিক আছে"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ, বেটাৰি সঞ্চয়কাৰীয়ে:\n·গাঢ় ৰঙৰ থীম অন কৰে\n·নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল প্ৰভাৱ আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সেইবোৰ সীমাবদ্ধ কৰে\n\n"<annotation id="url">"অধিক জানক"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ, বেটাৰি সঞ্চয়কাৰীয়ে:\n·গাঢ় ৰঙৰ থীম অন কৰে\n·নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল প্ৰভাৱ আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সেইবোৰ সীমাবদ্ধ কৰে"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ডেটা ব্য়ৱহাৰ মাত্ৰা কম কৰিবৰ বাবে ডেটা সঞ্চয়কাৰীয়ে কিছুমান এপক নেপথ্য়ত ডেটা প্ৰেৰণ বা সংগ্ৰহ কৰাত বাধা প্ৰদান কৰে। আপুনি বৰ্তমান ব্য়ৱহাৰ কৰি থকা এটা এপে ডেটা ব্য়ৱহাৰ কৰিব পাৰে, কিন্তু সঘনাই এই কার্য কৰিব নোৱাৰিব পাৰে। ইয়াৰ অৰ্থ এইয়ে হ\'ব পাৰে যে, উদাহৰণস্বৰূপে, আপুনি নিটিপা পর্যন্ত প্ৰতিচ্ছবিসমূহ দেখুওৱা নহ’ব।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ডেটা সঞ্চয়কাৰী অন কৰিবনে?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"অন কৰক"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 049a84612177..2779029e530f 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Cihazınız təmizlənəcəkdir"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Admin tətbiqini istifadə etmək mümkün deyil. Cihaz indi təmizlənəcək.\n\nSualınız varsa, təşkilatın admini ilə əlaqə saxlayın."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Çap <xliff:g id="OWNER_APP">%s</xliff:g> tərəfindən deaktiv edildi."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Şəxsi tətbiqləri blokdan çıxarın"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Tətbiqlər sabah bloklanacaq"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"İT admininiz iş profilinizə <xliff:g id="DAYS">%1$d</xliff:g> gündən artıq fasilə verilməsinə icazə vermir"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"İş profilinizi aktiv edin"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"İş profilinizi aktiv edənədək şəxsi tətbiqləriniz bloklanır"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Şəxsi tətbiqləriniz sabah bloklanacaq"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"İş profilini aktiv edin"</string> <string name="me" msgid="6207584824693813140">"Mən"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Planşet seçimləri"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Hər iki səs səviyyəsi düyməsinə bir neçə saniyə basıb saxladıqda əlçatımlılıq funksiyası olan <xliff:g id="SERVICE">%1$s</xliff:g> aktiv olur. Bu, cihazınızın işləmə qaydasını dəyişə bilər.\n\nAyarlar və Əlçatımlılıq bölməsində bu qısayolu başqa bir funksiyata dəyişə bilərsiniz."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktiv edin"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Aktiv etməyin"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AKTİV"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DEAKTİV"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> xidmətinin cihaza tam nəzarət etməsinə icazə verilsin?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> aktiv olarsa, cihazınız data şifrələnməsini genişləndirmək üçün ekran kilidini istifadə etməyəcək."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Tam nəzarət əlçatımlılıq ehtiyaclarınızı ödəyən bəzi tətbiqlər üçün uyğundur."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Admin tərəfindən yeniləndi"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Admin tərəfindən silindi"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət xüsusiyyəti:\n·Qaranlıq temanı aktiv edir\n·Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər xüsusiyyətləri deaktiv edir və ya məhdudlaşdırır\n\n"<annotation id="url">"Ətraflı məlumat"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batareyanın ömrünü artırmaq üçün Enerjiyə Qənaət xüsusiyyəti:\n·Qaranlıq temanı aktiv edir\n·Arxa fondakı fəaliyyəti, bəzi vizual effektləri və “Hey Google” kimi digər xüsusiyyətləri deaktiv edir və ya məhdudlaşdırır"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Data istifadəsini azalatmaq üçün, Data Qanaəti bəzi tətbiqlərin arxafonda data göndərməsinin və qəbulunun qarşısını alır. Hazırda işlətdiyiniz tətbiq dataya daxil ola bilər, ancaq bunu tez-tez edə bilməz. Bu o deməkdir ki, məsələn, Siz üzərinə tıklamadıqca o şəkillər göstərilməyəcək."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Data Qənaəti aktiv edilsin?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivləşdirin"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 181871fe8653..d12073a9217e 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će biti obrisan"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Ne možete da koristite ovu aplikaciju za administratore. Uređaj će sada biti obrisan.\n\nAko imate pitanja, kontaktirajte administratora organizacije."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Štampanje je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Odblokirajte lične aplikacije"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplik. će se blokirati sutra"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT administrator vam ne dozvoljava da profil za Work pauzirate više od <xliff:g id="DAYS">%1$d</xliff:g> dana"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Uključite profil za Work"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Lične aplikacije su blokirane dok ne uključite profil za Work"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Lične aplikacije će biti blokirane sutra"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Uključi profil za Work"</string> <string name="me" msgid="6207584824693813140">"Ja"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcije za tablet"</string> @@ -1653,10 +1653,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ako zadržite oba tastera za jačinu zvuka par sekundi, uključuje se <xliff:g id="SERVICE">%1$s</xliff:g>, funkcija pristupačnosti. To može da promeni način rada uređaja.\n\nMožete da promenite funkciju na koju se odnosi ova prečica u odeljku Podešavanja > Pristupačnost."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Uključi"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ne uključuj"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"UKLJUČENO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ISKLJUČENO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Želite li da dozvolite da usluga <xliff:g id="SERVICE">%1$s</xliff:g> ima potpunu kontrolu nad uređajem?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ako uključite uslugu <xliff:g id="SERVICE">%1$s</xliff:g>, uređaj neće koristiti zaključavanje ekrana da bi poboljšao šifrovanje podataka."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Potpuna kontrola je primerena za aplikacije koje vam pomažu kod usluga pristupačnosti, ali ne i za većinu aplikacija."</string> @@ -1819,8 +1817,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je administrator"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je administrator"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Potvrdi"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Radi dužeg trajanja baterije, ušteda baterije:\n·uključuje tamnu temu\n·isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer, „Ok Google“\n\n"<annotation id="url">"Saznajte više"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Radi dužeg trajanja baterije, ušteda baterije:\n·uključuje tamnu temu\n·isključuje ili ograničava aktivnosti u pozadini, neke vizuelne efekte i druge funkcije, na primer, „Ok Google“"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjila potrošnja podataka, Ušteda podataka sprečava neke aplikacije da šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može da pristupa podacima, ali će to činiti ređe. Na primer, slike se neće prikazivati dok ih ne dodirnete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Želite da uključite Uštedu podataka?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 306a25a029bc..68c851cdf9cf 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Даныя вашай прылады будуць сцерты"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Немагчыма выкарыстоўваць праграму адміністравання. Звесткі на вашай прыладзе будуць выдалены.\n\nКалі ў вас ёсць пытанні, звярніцеся да адміністратара арганізацыі."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Друк адключаны ўладальнікам праграмы <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Разблакіруйце праграмы"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Прагр. будуць заблак. заўтра"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Ваш ІТ-адміністратар не дазволіў прыпыняць ваш працоўны профіль больш чым на <xliff:g id="DAYS">%1$d</xliff:g> сут."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Уключыце працоўны профіль"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Вашы асабістыя праграмы будуць заблакіраваны, пакуль вы не ўключыце працоўны профіль"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Заўтра будуць заблакіраваны вашы асабістыя праграмы"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Уключыць працоўны профіль"</string> <string name="me" msgid="6207584824693813140">"Я"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Параметры планшэта"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Утрымліванне націснутымі абедзвюх клавіш гучнасці на працягу некалькіх секунд уключае службу \"<xliff:g id="SERVICE">%1$s</xliff:g>\", якая з\'яўляецца спецыяльнай магчымасцю. У выніку ваша прылада можа пачаць працаваць па-іншаму.\n\nВы можаце задаць гэта спалучэнне клавіш для іншай функцыі ў меню \"Налады > Спецыяльныя магчымасці\"."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Уключыць"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не ўключаць"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"УКЛЮЧАНА"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ВЫКЛЮЧАНА"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Дазволіць сэрвісу \"<xliff:g id="SERVICE">%1$s</xliff:g>\" мець поўны кантроль над вашай прыладай?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Калі вы ўключыце сэрвіс \"<xliff:g id="SERVICE">%1$s</xliff:g>\", на прыладзе не будзе выкарыстоўвацца блакіроўка экрана для паляпшэння шыфравання даных."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Поўны кантроль прызначаны для сэрвісаў спецыяльных магчымасцей, аднак не падыходзіць для большасці праграм."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Абноўлены вашым адміністратарам"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Выдалены вашым адміністратарам"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n·уключае цёмную тэму;\n·выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\"\n\n"<annotation id="url">"Даведацца больш"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Каб павялічыць тэрмін службы акумулятара, рэжым эканоміі зараду:\n·уключае цёмную тэму;\n·выключае ці абмяжоўвае дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты і іншыя функцыі, напрыклад \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"У рэжыме \"Эканомія трафіка\" фонавая перадача для некаторых праграмам адключана. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але радзей, чым звычайна. Напрыклад, відарысы могуць не загружацца, пакуль вы не націсніце на іх."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Уключыць Эканомію трафіка?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Уключыць"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 91f76cd22f8b..85c18f4ebe3b 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Данните на устройството ви ще бъдат изтрити"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Приложението за администриране не може да се използва. Сега данните на устройството ви ще бъдат изтрити.\n\nАко имате въпроси, свържете се с администратора на организацията си."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Отпечатването е деактивиранo от <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Отблокир. на личните ви прил."</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Прил. ще бъдат блокирани утре"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Системният ви администратор не разрешава поставянето на служебния ви потребителски профил на пауза за повече от <xliff:g id="DAYS">%1$d</xliff:g> дни"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Включване на служебния потребителски профил"</string> <string name="me" msgid="6207584824693813140">"Аз"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опции за таблета"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Натиснете двата бутона за силата на звука и ги задръжте за няколко секунди, за да включите функцията за достъпност <xliff:g id="SERVICE">%1$s</xliff:g>. Това може да промени начина, по който работи устройството ви.\n\nМожете да зададете друга функция за този пряк път от „Настройки“ > „Достъпност“."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Включване"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Без включване"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ВКЛ."</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИЗКЛ."</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Искате ли да разрешите на <xliff:g id="SERVICE">%1$s</xliff:g> да има пълен контрол над устройството ви?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ако включите <xliff:g id="SERVICE">%1$s</xliff:g>, устройството ви няма да подобрява шифроването на данни посредством опцията ви за заключване на екрана."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Пълният контрол е подходящ за приложенията, които помагат на потребителите със специални нужди, но не и за повечето приложения."</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Актуализирано от администратора ви"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Изтрито от администратора ви"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n·включва тъмната тема;\n·изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“.\n\n"<annotation id="url">"Научете повече"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"С цел удължаване на живота на батерията режимът за запазването ѝ:\n·включва тъмната тема;\n·изключва или ограничава активността на заден план, някои визуални ефекти и други функции, като например „Ok Google“."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"С цел намаляване на преноса на данни функцията за икономия на данни не позволява на някои приложения да изпращат или получават данни на заден план. Понастоящем използвано от вас приложение може да използва данни, но по-рядко. Това например може да означава, че изображенията не се показват, докато не ги докоснете."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Ще вкл. ли „Икономия на данни“?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Включване"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 9ad8c8195eed..41683e886620 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"আপনার ডিভাইসটি মুছে ফেলা হবে"</string> <string name="factory_reset_message" msgid="2657049595153992213">"অ্যাডমিন অ্যাপটি ব্যবহার করা যাবে না। আপনার ডিভাইসে থাকা সবকিছু এখন মুছে ফেলা হবে।\n\nকোনও প্রশ্ন থাকলে আপনার প্রতিষ্ঠানের অ্যাডমিনের সাথে যোগাযোগ করুন।"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> প্রিন্টিং বন্ধ রেখেছে।"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ব্যক্তিগত অ্যাপ আনব্লক করুন"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"কাল অ্যাপগুলি ব্লক করা হবে"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"আপনার আইটি অ্যাডমিন আপনার অফিস প্রোফাইল <xliff:g id="DAYS">%1$d</xliff:g> দিনের বেশি পজ করে রাখার অনুমতি দেয় না"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"অফিসের প্রোফাইল চালু করুন"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"আপনার অফিসের প্রোফাইল চালু না করা পর্যন্ত আপনার ব্যক্তিগত অ্যাপ ব্লক থাকে"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"আগামীকাল আপনার ব্যক্তিগত অ্যাপ ব্লক করা হবে"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"অফিস প্রোফাইল চালু করুন"</string> <string name="me" msgid="6207584824693813140">"আমাকে"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ট্যাবলেট বিকল্পগুলি"</string> @@ -1796,8 +1796,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"আপনার প্রশাসক আপডেট করেছেন"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"আপনার প্রশাসক মুছে দিয়েছেন"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ঠিক আছে"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ব্যাটারি আরও বেশিক্ষণ চালাতে, ব্যাটারি সেভার:\n·গাঢ় থিম চালু করে\n·ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট, এবং “হ্যালো Google”-এর মতো অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে\n\n"<annotation id="url">"আরও জানুন"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ব্যাটারি আরও বেশিক্ষণ চালাতে, ব্যাটারি সেভার:\n·গাঢ় থিম চালু করে\n·ব্যাকগ্রাউন্ড অ্যাক্টিভিটি, কিছু ভিজ্যুয়াল এফেক্ট এবং “হ্যালো Google”-এর মতো অন্যান্য ফিচার বন্ধ বা সীমাবদ্ধ করে"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ডেটার ব্যবহার কমাতে সহায়তা করার জন্য, ডেটা সেভার ব্যাকগ্রাউন্ডে কিছু অ্যাপ্লিকেশনকে ডেটা পাঠাতে বা গ্রহণ করতে বাধা দেয়৷ আপনি বর্তমানে এমন একটি অ্যাপ্লিকেশন ব্যবহার করছেন যেটি ডেটা অ্যাক্সেস করতে পারে, তবে সেটি কমই করে৷ এর ফলে যা হতে পারে, উদাহরণস্বরূপ, আপনি ছবির উপর ট্যাপ না করা পর্যন্ত সেগুলি দেখানো হবে না৷"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ডেটা সেভার চালু করবেন?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"চালু করুন"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index ab305ba52f39..77991dbf8d00 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će biti izbrisan"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Nije moguće koristiti aplikaciju administratora. Potpuno će se izbrisati podaci na vašem uređaju.\n\nAko imate pitanja, obratite se administratoru svoje organizacije."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Štampanje je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Deblokirajte lične aplikacije"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Sutra se blokiraju aplikacije"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT administrator ne dozvoljava da pauzirate radni profil duže od <xliff:g id="DAYS">%1$d</xliff:g> dana"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Uključite radni profil"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vaše lične aplikacije će biti blokirane dok ne uključite radni profil"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vaše lične aplikacije će se blokirati sutra"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Uključi radni profil"</string> <string name="me" msgid="6207584824693813140">"Ja"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcije tableta"</string> @@ -1655,10 +1655,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ako nekoliko sekundi držite pritisnute obje tipke za jačinu zvuka, uključit ćete funkciju pristupačnosti <xliff:g id="SERVICE">%1$s</xliff:g>. Ovo može promijeniti način rada uređaja.\n\nOvu prečicu možete zamijeniti drugom funkcijom u odjeljku Postavke > Pristupačnost."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Uključi"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nemoj uključivati"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"UKLJUČENO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ISKLJUČENO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Dozvoliti da usluga <xliff:g id="SERVICE">%1$s</xliff:g> ima punu kontrolu nad vašim uređajem?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ako uključite uslugu <xliff:g id="SERVICE">%1$s</xliff:g>, uređaj neće koristiti zaključavanje ekrana za poboljšanje šifriranja podataka."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Puna kontrola je prikladna za aplikacije koje vam pomažu kod potreba za pristupačnosti, ali nije za većinu aplikacija."</string> @@ -1821,8 +1819,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao je vaš administrator"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je vaš administrator"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Uredu"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n·Uključuje Tamnu temu\n·Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Hej Google\"\n\n"<annotation id="url">"Saznajte više"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n·Uključuje Tamnu temu\n·Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Radi smanjenja prijenosa podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali će to činiti rjeđe. Naprimjer, to može značiti da se slike ne prikazuju dok ih ne dodirnete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Uštedu podataka?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 8cbd3ec88c49..64aa7f90243e 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"El contingut del dispositiu s\'esborrarà"</string> <string name="factory_reset_message" msgid="2657049595153992213">"No es pot utilitzar l\'aplicació d\'administració. S\'esborraran les dades del dispositiu.\n\nSi tens cap dubte, contacta amb l\'administrador de la teva organització."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ha desactivat la impressió."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloqueja les apps personals"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Les apps es bloquejaran demà"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"L\'administrador de TI no permet posar en pausa el teu perfil de treball durant més de: <xliff:g id="DAYS">%1$d</xliff:g> dies"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activa el perfil de treball"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Les teves aplicacions personals estan bloquejades fins que activis el perfil de treball"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Les aplicacions personals es bloquejaran demà"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activa el perfil de treball"</string> <string name="me" msgid="6207584824693813140">"Mi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcions de la tauleta"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Si mantens premudes les dues tecles de volum durant uns segons, la funció d\'accessibilitat <xliff:g id="SERVICE">%1$s</xliff:g> s\'activarà. Això podria canviar el funcionament del teu dispositiu.\n\nPots canviar la funció d\'aquesta drecera a Configuració > Accessibilitat."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activa"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"No activis"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ACTIVAT"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DESACTIVAT"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vols permetre que <xliff:g id="SERVICE">%1$s</xliff:g> controli el teu dispositiu per complet?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Si actives <xliff:g id="SERVICE">%1$s</xliff:g>, el dispositiu no farà servir el bloqueig de pantalla per millorar l\'encriptació de dades."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"El control total és adequat per a les aplicacions que t\'ajuden amb l\'accessibilitat, però no per a la majoria de les aplicacions."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualitzat per l\'administrador"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Suprimit per l\'administrador"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"D\'acord"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Per allargar la durada de la bateria, el mode Estalvi de bateria:\n Activa el tema fosc\n Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\"\n\n"<annotation id="url">"Més informació"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Per allargar la durada de la bateria, el mode Estalvi de bateria:\n Activa el tema fosc\n Desactiva o restringeix l\'activitat en segon pla, alguns efectes visuals i altres funcions com \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a les dades, però menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Activar Economitzador de dades?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activa"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 3f57bbf92f03..d1b0b5b235ee 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Zařízení bude vymazáno"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Aplikaci pro správu nelze použít. Zařízení teď bude vymazáno.\n\nV případě dotazů vám pomůže administrátor organizace."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Aplikace <xliff:g id="OWNER_APP">%s</xliff:g> tisk zakazuje."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Odblokujte osobní aplikace"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplikace budou zítra zablokovány"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Administrátor IT nepovoluje pozastavení pracovního profilu na déle než tento počet dní: <xliff:g id="DAYS">%1$d</xliff:g>"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Zapněte pracovní profil"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vaše osobní aplikace jsou zablokovány, dokud nezapnete pracovní profil"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vaše osobní aplikace budou zítra zablokovány"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Zapnout pracovní profil"</string> <string name="me" msgid="6207584824693813140">"Já"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabletu"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Podržením obou tlačítek hlasitosti po dobu několika sekund zapnete funkci pro usnadnění přístupu <xliff:g id="SERVICE">%1$s</xliff:g>. Tato funkce může změnit fungování zařízení.\n\nZkratku můžete nastavit na jinou funkci v Nastavení > Přístupnost."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Zapnout"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nezapínat"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ZAP"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"VYP"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Chcete službě <xliff:g id="SERVICE">%1$s</xliff:g> povolit, aby nad vaším zařízením měla plnou kontrolu?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Pokud zapnete službu <xliff:g id="SERVICE">%1$s</xliff:g>, zařízení nebude používat zámek obrazovky k vylepšení šifrování dat."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Plná kontrola je vhodná u aplikací, které vám pomáhají s usnadněním přístupu, nikoli u většiny aplikací."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizováno administrátorem"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Smazáno administrátorem"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Spořič baterie za účelem úspory energie:\n·zapne tmavý motiv,\n·vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“\n\n"<annotation id="url">"Další informace"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Spořič baterie za účelem úspory energie:\n·zapne tmavý motiv,\n·vypne nebo omezí aktivitu na pozadí, některé vizuální efekty a další funkce jako „Ok Google“"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Spořič dat z důvodu snížení využití dat některým aplikacím brání v odesílání nebo příjmu dat na pozadí. Aplikace, kterou právě používáte, data přenášet může, ale může tak činit méně často. V důsledku toho se například obrázky nemusejí zobrazit, dokud na ně neklepnete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnout Spořič dat?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnout"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 2a083867a528..3bb64cdc81f4 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Enheden slettes"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administrationsappen kan ikke bruges. Enheden vil nu blive ryddet. \n\nKontakt din organisations administrator, hvis du har spørgsmål."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Udskrivning er deaktiveret af <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Fjern blokeringen af personlige apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Dine apps blokeres i morgen"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Din it-administrator tillader ikke, at din arbejdsprofil sættes på pause i mere end <xliff:g id="DAYS">%1$d</xliff:g> dage"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Aktivér din arbejdsprofil"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Dine personlige apps er blokeret, indtil du aktiverer din arbejdsprofil"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Dine personlige apps blokeres i morgen"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktivér arbejdsprofil"</string> <string name="me" msgid="6207584824693813140">"Mig"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Valgmuligheder for tabletcomputeren"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Hvis du holder begge lydstyrkeknapperne nede i et par sekunder, aktiveres hjælpefunktionen <xliff:g id="SERVICE">%1$s</xliff:g>. Det kan ændre på, hvordan din enhed fungerer.\n\nDu kan ændre denne genvej til en anden funktion i Indstillinger > Hjælpefunktioner."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktivér"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Aktivér ikke"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"TIL"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"FRA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vil du give <xliff:g id="SERVICE">%1$s</xliff:g> fuld kontrol over din enhed?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Hvis du aktiverer <xliff:g id="SERVICE">%1$s</xliff:g>, vil enheden ikke benytte skærmlåsen til at forbedre datakrypteringen."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Fuld kontrol er velegnet til apps, der hjælper dig med hjælpefunktioner, men ikke de fleste apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Opdateret af din administrator"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet af din administrator"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batterisparefunktionen gør følgende for at spare på batteriet:\n·Aktiverer Mørkt tema\n·Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\"\n\n"<annotation id="url">"Få flere oplysninger"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batterisparefunktionen gør følgende for at spare på batteriet:\n·Aktiverer Mørkt tema\n·Deaktiverer eller begrænser aktivitet i baggrunden, visse visuelle effekter og andre funktioner som f.eks. \"Hey Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Datasparefunktionen forhindrer nogle apps i at sende eller modtage data i baggrunden for at reducere dataforbruget. En app, der er i brug, kan få adgang til data, men gør det måske ikke så ofte. Dette kan f.eks. betyde, at billeder ikke vises, før du trykker på dem."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du aktivere Datasparefunktion?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivér"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index fe344a1c745b..30cbf85763ea 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Die Daten auf deinem Gerät werden gelöscht."</string> <string name="factory_reset_message" msgid="2657049595153992213">"Die Admin-App kann nicht verwendet werden. Die Daten auf deinem Gerät werden nun gelöscht.\n\nBitte wende dich bei Fragen an den Administrator deiner Organisation."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Drucken wurde von <xliff:g id="OWNER_APP">%s</xliff:g> deaktiviert."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Blockierung privater Apps aufheben"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps werden morgen blockiert"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Dein IT-Administrator hat festgelegt, dass dein Arbeitsprofil nicht länger als <xliff:g id="DAYS">%1$d</xliff:g> Tage pausiert werden darf"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Arbeitsprofil aktivieren"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Deine privaten Apps werden blockiert, bis du dein Arbeitsprofil aktivierst"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Deine privaten Apps werden morgen blockiert"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Arbeitsprofil aktivieren"</string> <string name="me" msgid="6207584824693813140">"Eigene"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet-Optionen"</string> @@ -1112,7 +1112,7 @@ <string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"Der Speicherplatz reicht nicht für das System aus. Stelle sicher, dass 250 MB freier Speicherplatz vorhanden sind, und starte das Gerät dann neu."</string> <string name="app_running_notification_title" msgid="8985999749231486569">"<xliff:g id="APP_NAME">%1$s</xliff:g> wird ausgeführt"</string> <string name="app_running_notification_text" msgid="5120815883400228566">"Für weitere Informationen oder zum Beenden der App tippen."</string> - <string name="ok" msgid="2646370155170753815">"Ok"</string> + <string name="ok" msgid="2646370155170753815">"OK"</string> <string name="cancel" msgid="6908697720451760115">"Abbrechen"</string> <string name="yes" msgid="9069828999585032361">"Ok"</string> <string name="no" msgid="5122037903299899715">"Abbrechen"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Wenn du beide Lautstärketasten einige Sekunden lang gedrückt hältst, aktivierst du die Bedienungshilfe \"<xliff:g id="SERVICE">%1$s</xliff:g>\". Dadurch kann sich die Funktionsweise deines Geräts ändern.\n\nUnter \"Einstellungen > \"Bedienungshilfen\" kannst du dieser Verknüpfung eine andere Funktion zuweisen."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktivieren"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nicht aktivieren"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AN"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"AUS"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> die vollständige Kontrolle über dein Gerät geben?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Wenn du <xliff:g id="SERVICE">%1$s</xliff:g> aktivierst, verwendet dein Gerät nicht die Displaysperre, um die Datenverschlüsselung zu verbessern."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Die vollständige Kontrolle sollte nur für die Apps aktiviert werden, die dir den Zugang zu den App-Funktionen erleichtern. Das ist in der Regel nur ein kleiner Teil der Apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Von deinem Administrator aktualisiert"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Von deinem Administrator gelöscht"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n·Das dunkle Design wird aktiviert\n·Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt\n\n"<annotation id="url">"Weitere Informationen"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n·Das dunkle Design wird aktiviert\n·Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Der Datensparmodus verhindert zum einen, dass manche Apps im Hintergrund Daten senden oder empfangen, sodass weniger Daten verbraucht werden. Zum anderen werden die Datenzugriffe der gerade aktiven App eingeschränkt, was z. B. dazu führen kann, dass Bilder erst angetippt werden müssen, bevor sie sichtbar werden."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Datensparmodus aktivieren?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivieren"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 7caaa67a52df..2b4d6a7f88eb 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Η συσκευή σας θα διαγραφεί"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Δεν είναι δυνατή η χρήση της εφαρμογής διαχειριστή. Η συσκευή σας θα διαγραφεί.\n\nΕάν έχετε ερωτήσεις, επικοινωνήστε με τον διαχειριστή του οργανισμού σας."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Η εκτύπωση απενεργοποιήθηκε από τον χρήστη <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Κατ. αποκλ. προσ. εφαρμογών"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Αποκλεισμός εφαρμογών αύριο"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Ο διαχειριστής IT δεν επιτρέπει την παύση του προφίλ εργασίας σας για περισσότερες από <xliff:g id="DAYS">%1$d</xliff:g> ημέρες."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ενεργοπ. το προφίλ εργασίας"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Οι προσωπικές σας εφαρμογές αποκλείονται μέχρι να ενεργοποιήσετε το προφίλ εργασίας σας."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Οι προσωπικές εφαρμογές σας θα αποκλειστούν αύριο"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ενεργοποίηση προφίλ εργασίας"</string> <string name="me" msgid="6207584824693813140">"Για εμένα"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Επιλογές tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Μπορείτε να ενεργοποιήσετε τη λειτουργία <xliff:g id="SERVICE">%1$s</xliff:g>, η οποία είναι μία από τις λειτουργίες προσβασιμότητας, πατώντας παρατεταμένα ταυτόχρονα τα δύο πλήκτρα έντασης ήχου για μερικά δευτερόλεπτα. Αυτό ενδέχεται να αλλάξει τον τρόπο λειτουργίας της συσκευής σας.\n\nΜπορείτε να αλλάξετε αυτή τη συντόμευση σε μια άλλη λειτουργία στις Ρυθμίσεις > Προσβασιμότητα."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ενεργοποίηση"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Να μην ενεργοποιηθούν"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ΕΝΕΡΓΟ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ΑΝΕΝΕΡΓΟ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Να επιτρέπεται στην υπηρεσία <xliff:g id="SERVICE">%1$s</xliff:g> να έχει τον πλήρη έλεγχο της συσκευής σας;"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Εάν ενεργοποιήσετε την υπηρεσία <xliff:g id="SERVICE">%1$s</xliff:g>, η συσκευή σας δεν θα χρησιμοποιεί το κλείδωμα οθόνης για τη βελτίωση της κρυπτογράφησης δεδομένων."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Ο πλήρης έλεγχος είναι κατάλληλος για εφαρμογές που εξυπηρετούν τις ανάγκες προσβασιμότητάς σας, αλλά όχι για όλες τις εφαρμογές."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ενημερώθηκε από τον διαχειριστή σας"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Διαγράφηκε από τον διαχειριστή σας"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Για την επέκταση της διάρκειας ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας:\n·Ενεργοποιεί το Σκούρο θέμα\n·Απενεργοποιεί ή περιορίζει τη δραστηριότητα παρασκηνίου, ορισμένα οπτικά εφέ και άλλες λειτουργίες όπως την εντολή \"Hey Google\".\n\n"<annotation id="url">"Μάθετε περισσότερα"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Για την επέκταση της διάρκειας ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας:\n·Ενεργοποιεί το Σκούρο θέμα\n·Απενεργοποιεί ή περιορίζει τη δραστηριότητα παρασκηνίου, ορισμένα οπτικά εφέ και άλλες λειτουργίες όπως την εντολή \"Hey Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Προκειμένου να μειωθεί η χρήση δεδομένων, η Εξοικονόμηση δεδομένων αποτρέπει την αποστολή ή λήψη δεδομένων από ορισμένες εφαρμογές στο παρασκήνιο. Μια εφαρμογή που χρησιμοποιείτε αυτήν τη στιγμή μπορεί να χρησιμοποιήσει δεδομένα αλλά με μικρότερη συχνότητα. Για παράδειγμα, οι εικόνες μπορεί να μην εμφανίζονται μέχρι να τις πατήσετε."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Ενεργ.Εξοικονόμησης δεδομένων;"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ενεργοποίηση"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 13c08206bb5d..b20891d3ab74 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string> <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Unblock your personal apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps will be blocked tomorrow"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Your IT admin doesn’t allow your work profile to be paused for more than <xliff:g id="DAYS">%1$d</xliff:g> days"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Turn on your work profile"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Your personal apps are blocked until you turn on your work profile"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Your personal apps will be blocked tomorrow"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Turn on work profile"</string> <string name="me" msgid="6207584824693813140">"Me"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet options"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Holding down both volume keys for a few seconds turns on <xliff:g id="SERVICE">%1$s</xliff:g>, an accessibility feature. This may change how your device works.\n\nYou can change this shortcut to another feature in Settings > Accessibility."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Turn on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Don’t turn on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Allow <xliff:g id="SERVICE">%1$s</xliff:g> to have full control of your device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"If you turn on <xliff:g id="SERVICE">%1$s</xliff:g>, your device won’t use your screen lock to enhance data encryption."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full control is appropriate for apps that help you with accessibility needs, but not for most apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 48ff9f3851fc..91b0cab36894 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string> <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Unblock your personal apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps will be blocked tomorrow"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Your IT admin doesn’t allow your work profile to be paused for more than <xliff:g id="DAYS">%1$d</xliff:g> days"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Turn on your work profile"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Your personal apps are blocked until you turn on your work profile"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Your personal apps will be blocked tomorrow"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Turn on work profile"</string> <string name="me" msgid="6207584824693813140">"Me"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet options"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Holding down both volume keys for a few seconds turns on <xliff:g id="SERVICE">%1$s</xliff:g>, an accessibility feature. This may change how your device works.\n\nYou can change this shortcut to another feature in Settings > Accessibility."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Turn on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Don’t turn on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Allow <xliff:g id="SERVICE">%1$s</xliff:g> to have full control of your device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"If you turn on <xliff:g id="SERVICE">%1$s</xliff:g>, your device won’t use your screen lock to enhance data encryption."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full control is appropriate for apps that help you with accessibility needs, but not for most apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 13c08206bb5d..b20891d3ab74 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string> <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Unblock your personal apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps will be blocked tomorrow"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Your IT admin doesn’t allow your work profile to be paused for more than <xliff:g id="DAYS">%1$d</xliff:g> days"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Turn on your work profile"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Your personal apps are blocked until you turn on your work profile"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Your personal apps will be blocked tomorrow"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Turn on work profile"</string> <string name="me" msgid="6207584824693813140">"Me"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet options"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Holding down both volume keys for a few seconds turns on <xliff:g id="SERVICE">%1$s</xliff:g>, an accessibility feature. This may change how your device works.\n\nYou can change this shortcut to another feature in Settings > Accessibility."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Turn on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Don’t turn on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Allow <xliff:g id="SERVICE">%1$s</xliff:g> to have full control of your device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"If you turn on <xliff:g id="SERVICE">%1$s</xliff:g>, your device won’t use your screen lock to enhance data encryption."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full control is appropriate for apps that help you with accessibility needs, but not for most apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 13c08206bb5d..b20891d3ab74 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string> <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organisation\'s admin."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Unblock your personal apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps will be blocked tomorrow"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Your IT admin doesn’t allow your work profile to be paused for more than <xliff:g id="DAYS">%1$d</xliff:g> days"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Turn on your work profile"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Your personal apps are blocked until you turn on your work profile"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Your personal apps will be blocked tomorrow"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Turn on work profile"</string> <string name="me" msgid="6207584824693813140">"Me"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet options"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Holding down both volume keys for a few seconds turns on <xliff:g id="SERVICE">%1$s</xliff:g>, an accessibility feature. This may change how your device works.\n\nYou can change this shortcut to another feature in Settings > Accessibility."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Turn on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Don’t turn on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Allow <xliff:g id="SERVICE">%1$s</xliff:g> to have full control of your device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"If you turn on <xliff:g id="SERVICE">%1$s</xliff:g>, your device won’t use your screen lock to enhance data encryption."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full control is appropriate for apps that help you with accessibility needs, but not for most apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects and other features like “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index 67a0381f100b..ed957de9303d 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Your device will be erased"</string> <string name="factory_reset_message" msgid="2657049595153992213">"The admin app can\'t be used. Your device will now be erased.\n\nIf you have questions, contact your organization\'s admin."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printing disabled by <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Unblock your personal apps"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps will be blocked tomorrow"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Your IT admin doesn’t allow your work profile to be paused for more than <xliff:g id="DAYS">%1$d</xliff:g> days"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Turn on your work profile"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Your personal apps are blocked until you turn on your work profile"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Your personal apps will be blocked tomorrow"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Turn on work profile"</string> <string name="me" msgid="6207584824693813140">"Me"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet options"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Holding down both volume keys for a few seconds turns on <xliff:g id="SERVICE">%1$s</xliff:g>, an accessibility feature. This may change how your device works.\n\nYou can change this shortcut to another feature in Settings > Accessibility."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Turn on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Don’t turn on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Allow <xliff:g id="SERVICE">%1$s</xliff:g> to have full control of your device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"If you turn on <xliff:g id="SERVICE">%1$s</xliff:g>, your device won’t use your screen lock to enhance data encryption."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full control is appropriate for apps that help you with accessibility needs, but not for most apps."</string> @@ -1796,8 +1794,8 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects, and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation>""</string> - <string name="battery_saver_description" msgid="7618492104632328184">"To extend battery life, Battery Saver:\n·Turns on Dark theme\n·Turns off or restricts background activity, some visual effects, and other features like “Hey Google”"</string> + <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects, and other features like “Hey Google”\n\n"<annotation id="url">"Learn more"</annotation>""</string> + <string name="battery_saver_description" msgid="8587408568232177204">"To extend battery life, Battery Saver:\n\n•Turns on Dark theme\n•Turns off or restricts background activity, some visual effects, and other features like “Hey Google”"</string> <string name="data_saver_description" msgid="4995164271550590517">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Turn on Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Turn on"</string> @@ -2044,15 +2042,12 @@ <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"Power Dialog"</string> <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"Lock Screen"</string> <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"Screenshot"</string> - <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> - <skip /> - <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> - <skip /> + <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"On-screen Accessibility Shortcut"</string> + <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"On-screen Accessibility Shortcut Chooser"</string> <string name="accessibility_freeform_caption" msgid="8377519323496290122">"Caption bar of <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 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> - <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> - <skip /> + <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string> <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversation"</string> <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Group Conversation"</string> <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 6c0ebbddb345..5afebbd48921 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Se borrarán los datos del dispositivo"</string> <string name="factory_reset_message" msgid="2657049595153992213">"No se puede usar la app de administrador. Ahora se borrará tu dispositivo.\n\nSi tienes preguntas, comunícate con el administrador de tu organización."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> inhabilitó la impresión."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloquea apps personales"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Las apps se bloquearán mañana"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Tu administrador de TI no permite que se pause el perfil de trabajo durante más de <xliff:g id="DAYS">%1$d</xliff:g> días"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activa tu perfil de trabajo"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Las apps personales estarán bloqueadas hasta que actives tu perfil de trabajo"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Mañana se bloquearán tus apps personales"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activar perfil de trabajo"</string> <string name="me" msgid="6207584824693813140">"Yo"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opciones de tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Si mantienes presionadas ambas teclas de volumen durante unos segundos, se activará la función de accesibilidad <xliff:g id="SERVICE">%1$s</xliff:g>. Esto podría cambiar la forma en que funciona tu dispositivo.\n\nPuedes cambiar este acceso directo a otra función en Configuración > Accesibilidad."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"No activar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"SÍ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"¿Deseas permitir que <xliff:g id="SERVICE">%1$s</xliff:g> tenga el control total del dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Si activas <xliff:g id="SERVICE">%1$s</xliff:g>, el dispositivo no utilizará el bloqueo de pantalla para mejorar la encriptación de datos."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"El control total es apropiado para las apps que te ayudan con las necesidades de accesibilidad, pero no para la mayoría de las apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Tu administrador actualizó este paquete"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Tu administrador borró este paquete"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para extender la duración de batería, el Ahorro de batería hace lo siguiente:\n·Activa el Tema oscuro.\n·Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones, como \"Ok Google\".\n\n"<annotation id="url">"Más información"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para extender la duración de batería, el modo Ahorro de batería hace lo siguiente:\n·Activa el Tema oscuro.\n·Desactiva o restringe la actividad en segundo plano, algunos efectos visuales y otras funciones como \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Para reducir el uso de datos, el modo Ahorro de datos evita que algunas apps envíen y reciban datos en segundo plano. La app que estés usando podrá acceder a los datos, pero con menor frecuencia. De esta forma, por ejemplo, las imágenes no se mostrarán hasta que las presiones."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"¿Deseas activar Ahorro de datos?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 541ca8a7b04d..1288a1315ae0 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Tu dispositivo se borrará"</string> <string name="factory_reset_message" msgid="2657049595153992213">"No se puede utilizar la aplicación de administración. Se borrarán todos los datos del dispositivo.\n\nSi tienes alguna pregunta, ponte en contacto con el administrador de tu organización."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ha inhabilitado la impresión."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloquear apps personales"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Las apps se bloquearán mañana"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Tu administrador de TI no te permite pausar el perfil de trabajo durante más de <xliff:g id="DAYS">%1$d</xliff:g> días"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activa tu perfil de trabajo"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Tus aplicaciones personales estarán bloqueadas hasta que actives tu perfil de trabajo"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Tus aplicaciones personales se bloquearán mañana"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activar perfil de trabajo"</string> <string name="me" msgid="6207584824693813140">"Yo"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opciones del tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Al mantener pulsadas ambas teclas de volumen durante unos segundos se activa <xliff:g id="SERVICE">%1$s</xliff:g>, una función de accesibilidad. Esta función puede modificar el funcionamiento del dispositivo.\n\nPuedes asignar este acceso directo a otra función en Ajustes > Accesibilidad."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"No activar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"SÍ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"¿Permitir que <xliff:g id="SERVICE">%1$s</xliff:g> pueda controlar totalmente tu dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Si activas <xliff:g id="SERVICE">%1$s</xliff:g>, el dispositivo no utilizará el bloqueo de pantalla para mejorar el cifrado de datos."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"El control total es adecuado para las aplicaciones de accesibilidad, pero no para la mayoría de las aplicaciones."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado por el administrador"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado por el administrador"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para que la batería dure más, el modo Ahorro de batería:\n· Activa el tema oscuro\n· Desactiva o restringe actividad en segundo plano, algunos efectos visuales y otras funciones como \"Ok Google\"\n\n"<annotation id="url">"Más información"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para que la batería dure más, el modo Ahorro de batería:\n· Activa el tema oscuro\n· Desactiva o restringe actividad en segundo plano, algunos efectos visuales y otras funciones como \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"El modo Ahorro de datos evita que algunas aplicaciones envíen o reciban datos en segundo plano, lo que puede reducir el uso de datos. Una aplicación activa puede acceder a los datos, aunque con menos frecuencia. Esto significa que es posible que, por ejemplo, algunas imágenes no se muestren hasta que las toques."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"¿Activar Ahorro de datos?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index e36be2e3ec49..196d834bb250 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Seade kustutatakse"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administraatori rakendust ei saa kasutada. Teie seade tühjendatakse nüüd.\n\nKui teil on küsimusi, võtke ühendust organisatsiooni administraatoriga."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Rakendus <xliff:g id="OWNER_APP">%s</xliff:g> on printimise keelanud."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Isiklike rakenduste deblokeerimine"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Rakendused blokeeritakse homme"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Teie IT-administraator lubab teie tööprofiili peatada vaid kuni <xliff:g id="DAYS">%1$d</xliff:g> päevaks"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Lülitage oma tööprofiil sisse"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Teie isiklikud rakendused on blokeeritud, kuni lülitate oma tööprofiili sisse"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Teie isiklikud rakendused blokeeritakse homme"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Lülita tööprofiil sisse"</string> <string name="me" msgid="6207584824693813140">"Mina"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tahvelarvuti valikud"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Kui hoiate mõlemat helitugevuse nuppu mõni sekund all, lülitatakse sisse juurdepääsufunktsioon <xliff:g id="SERVICE">%1$s</xliff:g>. See võib teie seadme tööviisi muuta.\n\nSelle otsetee saab asendada muu otseteega jaotises Seaded > Juurdepääsetavus."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Lülita sisse"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ära lülita sisse"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"SEES"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"VÄLJAS"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Kas anda teenusele <xliff:g id="SERVICE">%1$s</xliff:g> teie seadme üle täielik kontroll?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Kui lülitate sisse teenuse <xliff:g id="SERVICE">%1$s</xliff:g>, ei kasuta seade andmete krüpteerimise täiustamiseks ekraanilukku."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Täielik haldusõigus sobib rakendustele, mis pakuvad juurdepääsufunktsioone. Enamiku rakenduste puhul seda ei soovitata."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Administraator on seda värskendanud"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administraator on selle kustutanud"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n·Lülitab sisse tumeda teema.\n·Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Hei Google”) või piirab neid.\n\n"<annotation id="url">"Lisateave"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Aku tööea pikendamiseks teeb akusäästja järgmist.\n·Lülitab sisse tumeda teema.\n·Lülitab välja taustategevused, mõned visuaalsed efektid ja muud funktsioonid (nt „Hei Google”) või piirab neid."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Andmekasutuse vähendamiseks keelab andmemahu säästja mõne rakenduse puhul andmete taustal saatmise ja vastuvõtmise. Rakendus, mida praegu kasutate, pääseb andmesidele juurde, kuid võib seda teha väiksema sagedusega. Seetõttu võidakse näiteks pildid kuvada alles siis, kui neid puudutate."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Lülitada andmemahu säästja sisse?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Lülita sisse"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 10b3970cf0e7..b8810c509322 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Gailuko datuak ezabatu egingo dira"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Ezin da erabili administratzeko aplikazioa. Ezabatu egingo da gailuko eduki guztia.\n\nZalantzarik baduzu, jarri erakundeko administratzailearekin harremanetan."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> aplikazioak desgaitu egin du inprimatzeko aukera."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desblokeatu aplikazio pertsonalak"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Bihar blokeatuko dira aplikazioak"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IKT sailaren administratzaileak ez du onartzen laneko profila <xliff:g id="DAYS">%1$d</xliff:g> egunean baino gehiagoan pausatuta egotea"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktibatu laneko profila"</string> <string name="me" msgid="6207584824693813140">"Ni"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tabletaren aukerak"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Eduki sakatuta bolumen-teklak segundo batzuez <xliff:g id="SERVICE">%1$s</xliff:g> izeneko erabilerraztasun-eginbidea aktibatzeko. Honen bidez, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nLasterbide hau beste eginbide batengatik aldatzeko, joan Ezarpenak > Erabilerraztasuna atalera."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktibatu"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ez aktibatu"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AKTIBATUTA"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DESAKTIBATUTA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Gailua guztiz kontrolatzeko baimena eman nahi diozu <xliff:g id="SERVICE">%1$s</xliff:g> zerbitzuari?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> aktibatzen baduzu, gailuak ez du pantailaren blokeoa erabiliko datuen enkriptatzea hobetzeko."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Erabilerraztasun-beharrak asetzen dituzten aplikazioetan da egokia kontrol osoa, baina ez aplikazio gehienetan."</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Administratzaileak eguneratu du"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratzaileak ezabatu du"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Ados"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n·Gai iluna aktibatzen du\n Desaktibatu edo murriztu egiten ditu atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk, hala nola \"Ok Google\"\n\n"<annotation id="url">"Lortu informazio gehiago"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Bateriaren iraupena luzatzeko, erabili bateria-aurrezlea:\n·Gai iluna aktibatzen du\n Desaktibatu edo murriztu egiten ditu atzeko planoko jarduerak, zenbait efektu bisual eta beste eginbide batzuk, hala nola \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Datuen erabilera murrizteko, atzeko planoan datuak bidaltzea eta jasotzea galarazten die datu-aurrezleak aplikazio batzuei. Une honetan erabiltzen ari zaren aplikazioak atzitu egin ahal izango ditu datuak, baina baliteke maiztasun txikiagoarekin atzitzea. Horrela, adibidez, baliteke irudiak ez erakustea haiek sakatu arte."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Datu-aurrezlea aktibatu nahi duzu?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktibatu"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index c7fc1cb515e1..28254d91caa7 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"دستگاهتان پاک خواهد شد"</string> <string name="factory_reset_message" msgid="2657049595153992213">"برنامه سرپرست سیستم را نمیتوان استفاده کرد. دستگاه شما در این لحظه پاک میشود.\n\nاگر سؤالی دارید، با سرپرست سیستم سازمانتان تماس بگیرید."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> چاپ کردن را غیرفعال کرده است."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"لغو انسداد برنامههای شخصی"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"برنامهها فردا مسدود خواهند شد"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"سرپرست فناوری اطلاعات اجازه نمیدهد نمایه کاری شما بیشتر از <xliff:g id="DAYS">%1$d</xliff:g> روز بهطور موقت متوقف باشد"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"نمایه کاریتان را روشن کنید"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"تا زمانیکه نمایه کاریتان را روشن نکنید، برنامههای شخصیتان مسدود هستند"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"برنامههای شخصیتان فردا مسدود میشوند"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"روشن کردن نمایه کاری"</string> <string name="me" msgid="6207584824693813140">"من"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"گزینههای رایانهٔ لوحی"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"با پایین نگه داشتن هردو کلید میزان صدا بهمدت چند ثانیه، <xliff:g id="SERVICE">%1$s</xliff:g> (یکی از ویژگیهای دسترسپذیری) روشن میشود. با این کار نحوه عملکرد دستگاهتان تغییر میکند.\n\nمیتوانید در «تنظیمات > دسترسپذیری»،این میانبر را به ویژگی دیگری تغییر دهید."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"روشن کردن"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"روشن نشود"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"روشن"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"خاموش"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"به <xliff:g id="SERVICE">%1$s</xliff:g> اجازه میدهید بر دستگاهتان کنترل کامل داشته باشد؟"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"اگر <xliff:g id="SERVICE">%1$s</xliff:g> را روشن کنید، دستگاه شما از قفل صفحه شما جهت بهبود رمزگذاری اطلاعات استفاده نخواهد کرد."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"کنترل کامل برای بیشتر برنامهها مناسب نیست، بهجز برنامههایی که به شما در زمینه نیازهای دسترسپذیری کمک میکند."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"توسط سرپرست سیستم بهروزرسانی شد"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"توسط سرپرست سیستم حذف شد"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"تأیید"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n «طرح زمینه تیره» را روشن میکند\n فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مانند «Ok Google» را خاموش یا محدود میکند\n\n"<annotation id="url">"بیشتر بدانید"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"برای افزایش عمر باتری، «بهینهسازی باتری»:\n «طرح زمینه تیره» را روشن میکند\n فعالیت پسزمینه، برخی جلوههای بصری، و دیگر ویژگیها مانند «Ok Google» را خاموش یا محدود میکند"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"«صرفهجویی داده»، برای کمک به کاهش مصرف داده، از ارسال و دریافت داده در پسزمینه ازطرف بعضی برنامهها جلوگیری میکند. برنامهای که درحالحاضر استفاده میکنید میتواند به دادهها دسترسی داشته باشد اما دفعات دسترسی آن محدود است.این یعنی، برای مثال، تصاویر تازمانیکه روی آنها ضربه نزنید نشان داده نمیشوند."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"«صرفهجویی داده» روشن شود؟"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"روشن کردن"</string> @@ -2013,7 +2013,7 @@ <string name="mime_type_apk" msgid="3168784749499623902">"برنامه Android"</string> <string name="mime_type_generic" msgid="4606589110116560228">"فایل"</string> <string name="mime_type_generic_ext" msgid="9220220924380909486">"<xliff:g id="EXTENSION">%1$s</xliff:g> فایل"</string> - <string name="mime_type_audio" msgid="4933450584432509875">"صدا"</string> + <string name="mime_type_audio" msgid="4933450584432509875">"صوتی"</string> <string name="mime_type_audio_ext" msgid="2615491023840514797">"<xliff:g id="EXTENSION">%1$s</xliff:g> صوتی"</string> <string name="mime_type_video" msgid="7071965726609428150">"ویدیو"</string> <string name="mime_type_video_ext" msgid="185438149044230136">"<xliff:g id="EXTENSION">%1$s</xliff:g> ویدیو"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index fd682a4593e5..e7f3a9bb09f8 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Laitteen tiedot poistetaan"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Hallintasovellusta ei voi käyttää. Laitteen tiedot pyyhitään.\n\nPyydä ohjeita järjestelmänvalvojaltasi."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> on poistanut tulostuksen käytöstä."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Kumoa omien sovellusten esto"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Sovellukset estetään huomenna"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT-järjestelmänvalvoja ei anna keskeyttää työprofiiliasi yli <xliff:g id="DAYS">%1$d</xliff:g> päiväksi"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Laita työprofiilisi päälle"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Henkilökohtaiset sovelluksesi estetään, kunnes laitat työprofiilisi päälle"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Henkilökohtaiset sovelluksesi estetään huomenna"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Laita työprofiili päälle"</string> <string name="me" msgid="6207584824693813140">"Minä"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet-laitteen asetukset"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Molempien äänenvoimakkuuspainikkeiden pitkään painaminen laittaa päälle esteettömyysominaisuuden <xliff:g id="SERVICE">%1$s</xliff:g>. Tämä voi muuttaa laitteesi toimintaa.\n\nVoit muuttaa tätä pikanäppäintä kohdassa Asetukset > Esteettömyys."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Laita päälle"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Älä laita päälle"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"PÄÄLLÄ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"EI PÄÄLLÄ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Saako <xliff:g id="SERVICE">%1$s</xliff:g> laitteesi täyden käyttöoikeuden?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Jos <xliff:g id="SERVICE">%1$s</xliff:g> otetaan käyttöön, laitteesi ei käytä näytön lukitusta tiedon salauksen parantamiseen."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Täysi käyttöoikeus sopii esteettömyyssovelluksille, mutta ei useimmille sovelluksille."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Järjestelmänvalvoja päivitti tämän."</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Järjestelmänvalvoja poisti tämän."</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Parantaakseen akunkestoa virransäästö\n·ottaa tumman teeman käyttöön\n·poistaa käytöstä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Hei Google).\n\n"<annotation id="url">"Lue lisää"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Parantaakseen akunkestoa virransäästö\n·ottaa tumman teeman käyttöön\n·poistaa käytöstä tai rajoittaa taustatoimintoja, joitakin visuaalisia tehosteita ja muita ominaisuuksia (esim. Hei Google)."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Data Saver estää joitakin sovelluksia lähettämästä tai vastaanottamasta tietoja taustalla, jotta datan käyttöä voidaan vähentää. Käytössäsi oleva sovellus voi yhä käyttää dataa, mutta se saattaa tehdä niin tavallista harvemmin. Tämä voi tarkoittaa esimerkiksi sitä, että kuva ladataan vasta, kun kosketat sitä."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Otetaanko Data Saver käyttöön?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ota käyttöön"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index efcee1456bf5..9a6f186056d6 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Le contenu de votre appareil sera effacé"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Impossible d\'utiliser l\'application d\'administration. Les données de votre appareil vont maintenant être effacées.\n\nSi vous avez des questions, communiquez avec l\'administrateur de votre organisation."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impression désactivée par <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Débloquer applis personnelles"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Les applis seront bloquées demain"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Votre administrateur informatique ne vous permet pas d\'interrompre le profil professionnel pendant plus de <xliff:g id="DAYS">%1$d</xliff:g> jours"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activer profil professionnel"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vos applications personnelles sont bloquées jusqu\'à ce que vous activiez votre profil professionnel"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vos applications personnelles seront bloquées demain"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activer le profil professionnel"</string> <string name="me" msgid="6207584824693813140">"Moi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Si vous maintenez enfoncées les deux touches de volume pendant quelques secondes, vous activez la fonctionnalité d\'accessibilité <xliff:g id="SERVICE">%1$s</xliff:g>. Cela peut modifier le fonctionnement de votre appareil.\n\nPour attribuer ce raccourci à une autre fonctionnalité, sélectionnez Paramètres > Accessibilité."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activer"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ne pas activer"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ACTIVÉ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DÉSACTIVÉ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Permettre à <xliff:g id="SERVICE">%1$s</xliff:g> de commander complètement votre appareil?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Si vous activez <xliff:g id="SERVICE">%1$s</xliff:g>, votre appareil n\'utilisera pas le verrouillage de l\'écran pour améliorer le chiffrement des données."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Le contrôle total convient aux applications qui répondent à vos besoins d\'accessibilité. Il ne convient pas à la plupart des applications."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Mise à jour par votre administrateur"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Pour prolonger l\'autonomie de la pile, l\'économiseur de pile effectue les actions suivantes :\n·Activer le thème sombre\n·Désactiver ou limiter l\'activité en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme « Ok Google »\n\n"<annotation id="url">"En savoir plus"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Pour prolonger l\'autonomie de la pile, l\'économiseur de pile effectue les actions suivantes :\n·Active le thème sombre\n·Désactive ou limite l\'activité en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme « Ok Google »"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Pour aider à diminuer l\'utilisation des données, la fonctionnalité Économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Une application que vous utilisez actuellement peut accéder à des données, mais peut le faire moins souvent. Cela peut signifier, par exemple, que les images ne s\'affichent pas jusqu\'à ce que vous les touchiez."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 8d0687dc8a72..75fc6671fdfb 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Les données de votre appareil vont être effacées"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Impossible d\'utiliser l\'application d\'administration. Les données de votre appareil vont maintenant être effacées.\n\nSi vous avez des questions, contactez l\'administrateur de votre organisation."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impression désactivée par <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Débloquez vos applis perso"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Applis seront bloquées demain"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Votre administrateur informatique ne vous autorise pas à mettre en pause votre profil professionnel pendant plus de <xliff:g id="DAYS">%1$d</xliff:g> jours"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activez profil professionnel"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vos applications personnelles sont bloquées jusqu\'à ce que vous activiez votre profil professionnel"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vos applications personnelles seront bloquées demain"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activer le profil professionnel"</string> <string name="me" msgid="6207584824693813140">"Moi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Si vous appuyez sur les deux touches de volume pendant quelques secondes, vous activez la fonctionnalité d\'accessibilité <xliff:g id="SERVICE">%1$s</xliff:g>. Cela peut affecter le fonctionnement de votre appareil.\n\nPour attribuer ce raccourci à une autre fonctionnalité, accédez à Paramètres > Accessibilité."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activer"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ne pas activer"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ACTIVÉE"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DÉSACTIVÉE"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Accorder le contrôle total de votre appareil au service <xliff:g id="SERVICE">%1$s</xliff:g> ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Si vous activez <xliff:g id="SERVICE">%1$s</xliff:g>, votre appareil n\'utilisera pas le verrouillage de l\'écran pour améliorer le chiffrement des données."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Le contrôle total convient aux applications qui répondent à vos besoins d\'accessibilité. Il ne convient pas à la plupart des applications."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Mis à jour par votre administrateur"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n· active le thème sombre ;\n· désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Ok Google\".\n\n"<annotation id="url">"En savoir plus"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie :\n· active le thème sombre ;\n· désactive ou restreint les activités en arrière-plan, certains effets visuels et d\'autres fonctionnalités, comme \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Pour réduire la consommation de données, l\'économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Ainsi, les applications que vous utilisez peuvent toujours accéder aux données, mais pas en permanence. Par exemple, il se peut que les images ne s\'affichent pas tant que vous n\'appuyez pas dessus."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'économiseur de données ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activer"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 0496810a3aa8..a475b41b5819 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Borrarase o teu dispositivo"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Non se pode utilizar a aplicación de administración. Borrarase o teu dispositivo.\n\nSe tes preguntas, contacta co administrador da organización."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> desactivou a impresión."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloquea as apps persoais"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"As apps bloquearanse mañá"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"O teu administrador de TI non permite que o teu perfil de traballo se poña en pausa máis de <xliff:g id="DAYS">%1$d</xliff:g> días"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activar perfil de traballo"</string> <string name="me" msgid="6207584824693813140">"Eu"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcións da tableta"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ao manter as dúas teclas de volume premidas durante uns segundos actívase <xliff:g id="SERVICE">%1$s</xliff:g>, unha función de accesibilidade. Esta acción pode cambiar o funcionamento do dispositivo.\n\nPodes cambiar o uso deste atallo para outra función en Configuración > Accesibilidade."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Non activar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"SI"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NON"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Queres permitir que <xliff:g id="SERVICE">%1$s</xliff:g> poida controlar totalmente o teu dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Se activas <xliff:g id="SERVICE">%1$s</xliff:g>, o dispositivo non utilizará o teu bloqueo de pantalla para mellorar a encriptación de datos."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"O control total é adecuado para as aplicacións que che axudan coa accesibilidade, pero non para a maioría das aplicacións."</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado polo teu administrador"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado polo teu administrador"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n·Activa o tema escuro\n·Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\"\n\n"<annotation id="url">"Máis información"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para aumentar a duración da batería, a función Aforro de batería fai o seguinte:\n·Activa o tema escuro\n·Desactiva ou restrinxe a actividade en segundo plano, algúns efectos visuais e outras funcións, como \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Para contribuír a reducir o uso de datos, o aforro de datos impide que algunhas aplicacións envíen ou reciban datos en segundo plano. Cando esteas utilizando unha aplicación, esta poderá acceder aos datos, pero é posible que o faga con menos frecuencia. Por exemplo, é posible que as imaxes non se mostren ata que as toques."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Queres activar o aforro de datos?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activar"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index e518096a334e..b6ea39a0c23c 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"તમારું ઉપકરણ કાઢી નાખવામાં આવશે"</string> <string name="factory_reset_message" msgid="2657049595153992213">"વ્યવસ્થાપક ઍપનો ઉપયોગ કરી શકાશે નહીં. તમારું ઉપકરણ હવે કાઢી નાખવામાં આવશે.\n\nજો તમને પ્રશ્નો હોય, તો તમારી સંસ્થાના વ્યવસ્થાપકનો સંપર્ક કરો."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> દ્વારા પ્રિન્ટ કરવાનું બંધ કરાયું છે."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"તમારી ખાનગી ઍપને અનબ્લૉક કરો"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ઍપ આવતીકાલે બ્લૉક કરાશે"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"તમારા IT વ્યવસ્થાપક તમારી કાર્યાલયની પ્રોફાઇલને <xliff:g id="DAYS">%1$d</xliff:g>થી વધુ દિવસ થોભાવી રાખવાની મંજૂરી આપતા નથી"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"કાર્યાલયની પ્રોફાઇલ ચાલુ કરો"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"જ્યાં સુધી તમે કાર્યાલયની પ્રોફાઇલ ચાલુ ન કરો ત્યાં સુધી તમારી વ્યક્તિગત ઍપ બ્લૉક કરેલી રહે છે"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"તમારી વ્યક્તિગત ઍપ આવતી કાલે બ્લૉક કરવામાં આવશે"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"કાર્યાલયની પ્રોફાઇલ ચાલુ કરો"</string> <string name="me" msgid="6207584824693813140">"હું"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ટેબ્લેટ વિકલ્પો"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"બન્ને વૉલ્યૂમ કીને થોડી સેકન્ડ સુધી દબાવી રાખવાથી ઍક્સેસિબિલિટી સુવિધા એવી <xliff:g id="SERVICE">%1$s</xliff:g> ચાલુ થઈ જાય છે. આનાથી તમારા ડિવાઇસની કામ કરવાની રીત બદલાઈ શકે છે.\n\nતમે સેટિંગ > ઍક્સેસિબિલિટીમાં જઈને આ શૉર્ટકટને બીજી સુવિધામાં બદલી શકો છો."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ચાલુ કરો"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ચાલુ કરશો નહીં"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ચાલુ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"બંધ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"શું <xliff:g id="SERVICE">%1$s</xliff:g>ને તમારા ડિવાઇસના સંપૂર્ણ નિયંત્રણની મંજૂરી આપીએ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"જો તમે <xliff:g id="SERVICE">%1$s</xliff:g> ચાલુ કરશો, તો તમારું ડિવાઇસ ડેટા એન્ક્રિપ્શનને બહેતર બનાવવા તમારા સ્ક્રીન લૉકનો ઉપયોગ કરશે નહીં."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ઍક્સેસિબિલિટી સંબંધિત આવશ્યકતા માટે સહાય કરતી ઍપ માટે સંપૂર્ણ નિયંત્રણ યોગ્ય છે, પણ મોટા ભાગની ઍપ માટે યોગ્ય નથી."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"તમારા વ્યવસ્થાપક દ્વારા અપડેટ કરવામાં આવેલ છે"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"તમારા વ્યવસ્થાપક દ્વારા કાઢી નાખવામાં આવેલ છે"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ઓકે"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"બૅટરીની આવરદા વધારવા માટે, બૅટરી સેવર:\n·ઘેરી થીમ ચાલુ કરે છે\n·બૅકગ્રાઉન્ડ પ્રવૃત્તિ, અમુક વિઝ્યુઅલ ઇફેક્ટ અને “હેય Google” જેવી અન્ય સુવિધાઓ બંધ અથવા પ્રતિબંધિત કરે છે\n\n"<annotation id="url">"વધુ જાણો"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"બૅટરીની આવરદા વધારવા માટે, બૅટરી સેવર:\n·ઘેરી થીમ ચાલુ કરે છે\n·બૅકગ્રાઉન્ડ પ્રવૃત્તિ, અમુક વિઝ્યુઅલ ઇફેક્ટ અને “હેય Google” જેવી અન્ય સુવિધાઓ બંધ અથવા પ્રતિબંધિત કરે છે"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ડેટા વપરાશને ઘટાડવામાં સહાય માટે, ડેટા સેવર કેટલીક ઍપને બૅકગ્રાઉન્ડમાં ડેટા મોકલવા અથવા પ્રાપ્ત કરવાથી અટકાવે છે. તમે હાલમાં ઉપયોગ કરી રહ્યાં છો તે ઍપ ડેટાને ઍક્સેસ કરી શકે છે, પરંતુ તે આ ક્યારેક જ કરી શકે છે. આનો અર્થ એ હોઈ શકે છે, ઉદાહરણ તરીકે, છબીઓ ત્યાં સુધી પ્રદર્શિત થશે નહીં જ્યાં સુધી તમે તેને ટૅપ નહીં કરો."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ડેટા સેવર ચાલુ કરીએ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ચાલુ કરો"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 0d2c90279d09..6116c5a1f81e 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"आपके डिवाइस को मिटा दिया जाएगा"</string> <string name="factory_reset_message" msgid="2657049595153992213">"एडमिन ऐप्लिकेशन का इस्तेमाल नहीं किया जा सकता. आपके डिवाइस पर मौजूद डेटा अब मिटा दिया जाएगा.\n\nअगर आप कुछ पूछना चाहते हैं तो, अपने संगठन के एडमिन से संपर्क करें."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ने प्रिंटिंग सुविधा बंद कर दी है."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"अपने निजी ऐप अनब्लॉक करें"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ऐप कल ब्लॉक कर दिए जाएंगे"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"आपका आईटी एडमिन आपकी वर्क प्रोफ़ाइल को <xliff:g id="DAYS">%1$d</xliff:g> दिनों से ज़्यादा रोकने की अनुमति नहीं देता"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"अपनी वर्क प्रोफ़ाइल चालू करें"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"निजी ऐप्लिकेशन अनब्लॉक करने के लिए, अपनी वर्क प्रोफ़ाइल चालू करें"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"आपके निजी ऐप्लिकेशन कल ब्लॉक कर दिए जाएंगे"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"वर्क प्रोफ़ाइल चालू करें"</string> <string name="me" msgid="6207584824693813140">"मैं"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"टैबलेट विकल्प"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"आवाज़ कम और ज़्यादा करने वाले दोनों बटन को कुछ सेकंड तक दबाकर रखने से <xliff:g id="SERVICE">%1$s</xliff:g> चालू हो जाती है, जो एक सुलभता सुविधा है. ऐसा करने से आपके डिवाइस के काम करने के तरीके में बदलाव हो सकता है.\n\nआप सेटिंग और सुलभता में जाकर इस शॉर्टकट को किसी दूसरी सुविधा के लिए बदल सकते हैं."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"चालू करें"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"चालू न करें"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"चालू है"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"बंद है"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> को अपना डिवाइस पूरी तरह कंट्रोल करने की मंज़ूरी दें?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"अगर आप <xliff:g id="SERVICE">%1$s</xliff:g> को चालू करते हैं, तो डेटा को एन्क्रिप्ट (सुरक्षित) करने के तरीके को बेहतर बनाने के लिए आपका डिवाइस सेट किए गए स्क्रीन लॉक का इस्तेमाल नहीं करेगा."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"पूरी तरह नियंत्रित करने की अनुमति उन ऐप्लिकेशन के लिए ठीक है जो सुलभता से जुड़ी ज़रूरतों के लिए बने हैं, लेकिन ज़्यादातर ऐप्लिकेशन के लिए यह ठीक नहीं है."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"आपके व्यवस्थापक ने अपडेट किया है"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"आपके व्यवस्थापक ने हटा दिया है"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ठीक है"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"बैटरी लाइफ़ बढ़ाने के लिए बैटरी सेवर:\n·गहरे रंग वाली थीम चालू करता है\n·बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या बंद करता है\n\n"<annotation id="url">"ज़्यादा जानें"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n गहरे रंग वाली थीम चालू करता है\nबैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाओं को रोकता या बंद करता है"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"डेटा खर्च को कम करने के लिए, डेटा सेवर कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकता है. फ़िलहाल, आप जिस ऐप्लिकेशन का इस्तेमाल कर रहे हैं वह डेटा ऐक्सेस कर सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक दिखाई नहीं देंगी जब तक कि आप उन पर टैप नहीं करते."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा बचाने की सेटिंग चालू करें?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"चालू करें"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index cab12f6eb8af..811df8fbafdc 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Uređaj će se izbrisati"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administratorska aplikacija ne može se upotrebljavati. Uređaj će se izbrisati.\n\nAko imate pitanja, obratite se administratoru organizacije."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Ispis je onemogućila aplikacija <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Deblokiranje osob. aplikacija"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Sutra se blokiraju aplikacije"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Vaš IT administrator ne dopušta pauziranje poslovnog profila dulje od <xliff:g id="DAYS">%1$d</xliff:g> dana"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Uključite poslovni profil"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Vaše su osobne aplikacije blokirane dok ne uključite poslovni profil"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Vaše će se osobne aplikacije sutra blokirati"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Uključi poslovni profil"</string> <string name="me" msgid="6207584824693813140">"Ja"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcije tabletnog uređaja"</string> @@ -1653,10 +1653,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ako na nekoliko sekundi pritisnete obje tipke za glasnoću, uključuje se značajka pristupačnosti <xliff:g id="SERVICE">%1$s</xliff:g>. Time se može promijeniti način na koji vaš uređaj radi.\n\nZnačajku na koju se taj prečac odnosi možete promijeniti u odjeljku Postavke > Pristupačnost."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Uključi"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nemoj uključiti"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"UKLJUČENO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ISKLJUČENO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Želite li dopustiti usluzi <xliff:g id="SERVICE">%1$s</xliff:g> potpunu kontrolu nad uređajem?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ako uključite <xliff:g id="SERVICE">%1$s</xliff:g>, vaš uređaj neće upotrebljavati zaključavanje zaslona za bolju enkripciju podataka."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Potpuna kontrola prikladna je za aplikacije koje vam pomažu s potrebama pristupačnosti, ali ne i za većinu aplikacija."</string> @@ -1819,8 +1817,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ažurirao administrator"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao administrator"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"U redu"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Da bi se produljilo trajanje baterije, Štednja baterije:\n·Uključuje Tamnu temu.\n·Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\".\n\n"<annotation id="url">"Saznajte više"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Da bi se produljilo trajanje baterije, Štednja baterije:\n·uključuje Tamnu temu\n·isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjio podatkovni promet, značajka Štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupiti podacima, no možda će to činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Štednju podatkovnog prometa?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index fb2a5ad17544..26f7584311a9 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"A rendszer törölni fogja eszközét"</string> <string name="factory_reset_message" msgid="2657049595153992213">"A rendszergazdai alkalmazás nem használható. A rendszer most törli az eszközt.\n\nKérdéseivel forduljon szervezete rendszergazdájához."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"A(z) <xliff:g id="OWNER_APP">%s</xliff:g> letiltotta a nyomtatást."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"A személyes appok feloldása"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Appok feloldása holnap"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Rendszergazdája nem engedélyezi, hogy a munkaprofil <xliff:g id="DAYS">%1$d</xliff:g> napnál tovább szüneteltetve legyen"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Munkaprofil bekapcsolása"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"A személyes alkalmazások le lesznek tiltva, amíg be nem kapcsolja a munkaprofilt"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Személyes alkalmazásai holnap lesznek letiltva"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Munkaprofil bekapcsolása"</string> <string name="me" msgid="6207584824693813140">"Saját"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Táblagép beállításai"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"A(z) <xliff:g id="SERVICE">%1$s</xliff:g> kisegítő lehetőség bekapcsolásához tartsa nyomva néhány másodpercig mindkét hangerőgombot. Ez hatással lehet az eszköz működésére.\n\nEzt a gyorsparancsot a Beállítások > Kisegítő lehetőségek pontban módosíthatja másik funkció használatára."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Bekapcsolás"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nem kapcsolom be"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"BE"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"KI"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Teljes körű vezérlést biztosít eszköze felett a(z) <xliff:g id="SERVICE">%1$s</xliff:g> szolgáltatás számára?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ha engedélyezi a(z) <xliff:g id="SERVICE">%1$s</xliff:g> szolgáltatást, az eszköz nem fogja használni a képernyőzárat az adattitkosítás növelése érdekében."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"A teljes vezérlés indokolt olyan alkalmazásoknál, amelyek kisegítő lehetőségeket nyújtanak, a legtöbb alkalmazásnál azonban nem."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"A rendszergazda által frissítve"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"A rendszergazda által törölve"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n Bekapcsolja a sötét témát.\n Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat.\n\n"<annotation id="url">"További információ"</annotation>"."</string> - <string name="battery_saver_description" msgid="7618492104632328184">"Az Akkumulátorkímélő mód az akkumulátor üzemidejének növelése érdekében a következőket teszi:\n Bekapcsolja a sötét témát.\n Kikapcsolja vagy korlátozza a háttérben futó tevékenységeket, egyes vizuális effekteket, az „Ok Google” parancsot és egyéb funkciókat."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Az adatforgalom csökkentése érdekében az Adatforgalom-csökkentő megakadályozza, hogy egyes alkalmazások adatokat küldjenek vagy fogadjanak a háttérben. Az Ön által jelenleg használt alkalmazások hozzáférhetnek az adatokhoz, de csak ritkábban. Ez például azt jelentheti, hogy a képek csak rákoppintás után jelennek meg."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Bekapcsolja az Adatforgalom-csökkentőt?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Bekapcsolás"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 019e9897ec01..d7d00f200a6d 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Ձեր սարքը ջնջվելու է"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Հնարավոր չէ օգտագործել ադմինիստրատորի հավելվածը։ Ձեր սարքից բոլոր տվյալները կջնջվեն։\n\nՀարցեր ունենալու դեպքում դիմեք ձեր կազմակերպության ադմինիստրատորին։"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Տպումն անջատված է <xliff:g id="OWNER_APP">%s</xliff:g> հավելվածի կողմից։"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Արգելաբացեք անձնական հավելվածները"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Հավելվածները վաղը կարգելափակվեն"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Ձեր ՏՏ ադմինիստրատորը չի թույլատրում <xliff:g id="DAYS">%1$d</xliff:g> օրից ավել դադարեցնել աշխատանքային պրոֆիլը։"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Միացնել աշխատանքային պրոֆիլը"</string> <string name="me" msgid="6207584824693813140">"Իմ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Պլանշետի ընտրանքները"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ձայնի կարգավորման երկու կոճակները մի քանի վայրկյան սեղմած պահելով կմիացնեք <xliff:g id="SERVICE">%1$s</xliff:g> ծառայությունը, որը հատուկ գործառույթ է։ Դրա արդյունքում սարքի աշխատաեղանակը կարող է փոխվել։\n\nԱյս դյուրանցումը մեկ այլ գործառույթով փոխելու համար անցեք Կարգավորումներ > Հատուկ գործառույթներ։"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Միացնել"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Չմիացնել"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ՄԻԱՑՎԱԾ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ԱՆՋԱՏՎԱԾ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Թույլատրե՞լ <xliff:g id="SERVICE">%1$s</xliff:g> ծառայությանը կառավարել ձեր սարքը"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Եթե միացնեք <xliff:g id="SERVICE">%1$s</xliff:g> ծառայությունը, ձեր սարքը չի օգտագործի էկրանի կողպումը՝ տվյալների գաղտնագրումը բարելավելու համար:"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Ամբողջական վերահսկումն անհրաժեշտ է միայն այն հավելվածներին, որոնք օգնում են ձեզ հատուկ գործառույթներից օգտվելիս։"</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Թարմացվել է ձեր ադմինիստրատորի կողմից"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Ջնջվել է ձեր ադմինիստրատորի կողմից"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Եղավ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը\n·միացնում է մուգ թեման,\n·անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ «OK Google» հրահանգը:\n\n"<annotation id="url">"Իմանալ ավելին"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Մարտկոցի աշխատաժամանակը երկարացնելու համար «Մարտկոցի տնտեսում» գործառույթը\n·միացնում է մուգ թեման,\n·անջատում կամ սահմանափակում է աշխատանքը ֆոնային ռեժիմում, որոշ վիզուալ էֆեկտներ և այլ գործառույթներ, օրինակ «OK Google» հրահանգը:"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Թրաֆիկի տնտեսման ռեժիմում որոշ հավելվածների համար տվյալների ֆոնային փոխանցումն անջատված է։ Հավելվածը, որն օգտագործում եք, կարող է տվյալներ փոխանցել և ստանալ, սակայն ոչ այնքան հաճախ: Օրինակ՝ պատկերները կցուցադրվեն միայն դրանց վրա սեղմելուց հետո։"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Միացնե՞լ թրաֆիկի խնայումը:"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Միացնել"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index f8af76cbe293..458df3b3ee92 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Perangkat akan dihapus"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Aplikasi admin tidak dapat digunakan. Perangkat Anda kini akan dihapus.\n\nJika ada pertanyaan, hubungi admin organisasi."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Fitur pencetakan dinonaktifkan oleh <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Batalkan pemblokiran aplikasi pribadi"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplikasi akan diblokir besok"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Admin IT tidak mengizinkan profil kerja Anda dijeda selama lebih dari <xliff:g id="DAYS">%1$d</xliff:g> hari"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Aktifkan profil kerja Anda"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Aplikasi pribadi Anda diblokir hingga Anda mengaktifkan profil kerja Anda"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Aplikasi kerja Anda akan diblokir besok"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktifkan profil kerja"</string> <string name="me" msgid="6207584824693813140">"Saya"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opsi tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Menahan kedua tombol volume selama beberapa detik akan mengaktifkan <xliff:g id="SERVICE">%1$s</xliff:g>, yang merupakan fitur aksesibilitas. Tindakan ini dapat mengubah cara kerja perangkat Anda.\n\nAnda dapat mengubah pintasan ini ke fitur lain di Setelan > Aksesibilitas."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktifkan"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Jangan aktifkan"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AKTIF"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NONAKTIF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Izinkan <xliff:g id="SERVICE">%1$s</xliff:g> memiliki kontrol penuh atas perangkat Anda?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Jika Anda mengaktifkan <xliff:g id="SERVICE">%1$s</xliff:g>, perangkat tidak akan menggunakan kunci layar untuk meningkatkan enkripsi data."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kontrol penuh sesuai untuk aplikasi yang membantu Anda terkait kebutuhan aksesibilitas, tetapi tidak untuk sebagian besar aplikasi."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Diupdate oleh admin Anda"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dihapus oleh admin Anda"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Oke"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai:\n·Mengaktifkan Tema gelap\n·Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”\n\n"<annotation id="url">"Pelajari lebih lanjut"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Untuk memperpanjang masa pakai baterai, Penghemat Baterai:\n·Mengaktifkan Tema gelap\n·Menonaktifkan atau membatasi aktivitas di latar belakang, beberapa efek visual, dan fitur lain seperti “Ok Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangi penggunaan data, Penghemat Data mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya saja, gambar hanya akan ditampilkan setelah diketuk."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Aktifkan Penghemat Data?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktifkan"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 010186ce24b1..fa03fbab425a 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Tækið verður hreinsað"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Ekki er hægt að nota stjórnunarforritið. Tækinu verður eytt.\n\nEf spurningar vakna skaltu hafa samband við kerfisstjóra fyrirtækisins."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> lokaði á prentun."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Opna fyrir persónuleg forrit"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Lokað á forrit á morgun"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Kerfisstjórinn þinn leyfir ekki að hlé sé gert á vinnusniði lengur en í <xliff:g id="DAYS">%1$d</xliff:g> daga"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Kveiktu á vinnusniði"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Lokað er á forrit til einkanota þar til þú kveikir á vinnusniði"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Lokað verður á forrit til einkanota á morgun"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Kveikja á vinnusniði"</string> <string name="me" msgid="6207584824693813140">"Ég"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Valkostir spjaldtölvu"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ef báðum hljóðstyrkstökkunum er haldið inni í nokkrar sekúndur er kveikt á aðgengiseiginleikanum <xliff:g id="SERVICE">%1$s</xliff:g>. Þetta getur breytt því hvernig tækið virkar.\n\nÞú getur breytt þessari flýtileið í annan eiginleika í Stillingar > Aðgengi."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Kveikja"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ekki kveikja"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"KVEIKT"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"SLÖKKT"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Viltu leyfa <xliff:g id="SERVICE">%1$s</xliff:g> að hafa fulla stjórn yfir tækinu þínu?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ef þú kveikir á <xliff:g id="SERVICE">%1$s</xliff:g> mun tækið ekki nota skjálásinn til að efla dulkóðun gagna."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full stjórnun er viðeigandi fyrir forrit sem hjálpa þér ef þú hefur ekki aðgang, en ekki fyrir flest forrit."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Kerfisstjóri uppfærði"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Kerfisstjóri eyddi"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Í lagi"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n·Kveikir á dökku þema\n·Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“.\n\n"<annotation id="url">"Frekari upplýsingar"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n·Kveikir á dökku þema\n·Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Ok Google“."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Gagnasparnaður getur hjálpað til við að draga úr gagnanotkun með því að hindra forrit í að senda eða sækja gögn í bakgrunni. Forrit sem er í notkun getur náð í gögn, en gerir það kannski sjaldnar. Niðurstaðan getur verið, svo dæmi sé tekið, að myndir eru ekki birtar fyrr en þú ýtir á þær."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Kveikja á gagnasparnaði?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Kveikja"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 94ab2b46bd38..1ed81f1054a9 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Il dispositivo verrà resettato"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Impossibile usare l\'app di amministrazione. Il dispositivo verrà resettato.\n\nPer eventuali domande, contatta l\'amministratore della tua organizzazione."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Stampa disattivata da <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Sblocca le tue app personali"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"App saranno bloccate domani"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"L\'amministratore IT non consente di sospendere il profilo di lavoro per più di <xliff:g id="DAYS">%1$d</xliff:g> giorni"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Attiva il profilo di lavoro"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Le tue app personali sono bloccate fino all\'attivazione del tuo profilo di lavoro"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Le tue app personali verranno bloccate domani"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Attiva profilo di lavoro"</string> <string name="me" msgid="6207584824693813140">"Io"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opzioni tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Se tieni premuti entrambi i tasti del volume per qualche secondo verrà attivata la funzione di accessibilità <xliff:g id="SERVICE">%1$s</xliff:g>. Questa operazione potrebbe modificare il funzionamento del dispositivo.\n\nPuoi associare questa scorciatoia a un\'altra funzionalità in Impostazioni > Accessibilità."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Attiva"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Non attivare"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vuoi consentire a <xliff:g id="SERVICE">%1$s</xliff:g> di avere il controllo totale del tuo dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Se attivi <xliff:g id="SERVICE">%1$s</xliff:g>, il dispositivo non utilizzerà il blocco schermo per migliorare la crittografia dei dati."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Il pieno controllo è appropriato per le app che rispondono alle tue esigenze di accessibilità, ma non per gran parte delle app."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Aggiornato dall\'amministratore"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminato dall\'amministratore"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Per estendere la durata della batteria, il risparmio energetico:\n·Attiva il Tema scuro\n·Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Ok Google\"\n\n"<annotation id="url">"Ulteriori informazioni"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Per estendere la durata della batteria, Risparmio energetico:\n·Attiva il Tema scuro\n·Disattiva o limita le attività in background, alcuni effetti visivi e altre funzionalità come \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Per contribuire a ridurre l\'utilizzo dei dati, la funzione Risparmio dati impedisce ad alcune app di inviare o ricevere dati in background. Un\'app in uso può accedere ai dati, ma potrebbe farlo con meno frequenza. Esempio: le immagini non vengono visualizzate finché non le tocchi."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Attivare Risparmio dati?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Attiva"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 71126c4bd762..a6d538aefa96 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -204,9 +204,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"תתבצע מחיקה של המכשיר"</string> <string name="factory_reset_message" msgid="2657049595153992213">"לא ניתן להשתמש באפליקציה של מנהל המערכת.\n\nאם יש לך שאלות, יש ליצור קשר עם מנהל המערכת של הארגון."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ההדפסה הושבתה על ידי <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ביטול חסימה של אפל\' אישיות"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"האפליקציות ייחסמו מחר"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"מנהל ה-IT לא מתיר השהיה של יותר מ-<xliff:g id="DAYS">%1$d</xliff:g> ימים של פרופיל העבודה"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"הפעלה של פרופיל העבודה"</string> <string name="me" msgid="6207584824693813140">"אני"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"אפשרויות טאבלט"</string> @@ -1842,8 +1845,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"עודכנה על ידי מנהל המערכת"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"נמחקה על ידי מנהל המערכת"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"אישור"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"התכונה \'חיסכון בסוללה\':\n·מפעילה עיצוב כהה\n·מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו \"Ok Google\", כדי להאריך את חיי הסוללה\n\n"<annotation id="url">"מידע נוסף"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"התכונה \'חיסכון בסוללה\':\n·מפעילה עיצוב כהה\n·מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו \"Ok Google\", כדי להאריך את חיי הסוללה"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"כדי לסייע בהפחתת השימוש בנתונים, חוסך הנתונים (Data Saver) מונע מאפליקציות מסוימות שליחה או קבלה של נתונים ברקע. אפליקציה שבה נעשה שימוש כרגע יכולה לגשת לנתונים, אבל בתדירות נמוכה יותר. המשמעות היא, למשל, שתמונות יוצגו רק לאחר שמקישים עליהן."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"להפעיל את חוסך הנתונים?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"הפעל"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 4b1650228c46..4695d24dcd72 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"デバイスのデータが消去されます"</string> <string name="factory_reset_message" msgid="2657049595153992213">"管理アプリを使用できません。デバイスのデータはこれから消去されます。\n\nご不明な点がある場合は、組織の管理者にお問い合わせください。"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"「<xliff:g id="OWNER_APP">%s</xliff:g>」により印刷は無効にされています。"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"個人用アプリのブロック解除"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"アプリは明日ブロックされます"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT 管理者は、仕事用プロファイルの一時停止が <xliff:g id="DAYS">%1$d</xliff:g> 日を超えることを許可していません"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"仕事用プロファイルを ON にする"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"個人用アプリは、仕事用プロファイルを ON にしない限りブロックされます"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"個人用アプリは、明日ブロックされます"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"仕事用プロファイルを有効にする"</string> <string name="me" msgid="6207584824693813140">"自分"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"タブレットオプション"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"音量大と音量小の両方のボタンを数秒ほど長押しすると、ユーザー補助機能の <xliff:g id="SERVICE">%1$s</xliff:g> が ON になります。この機能が ON になると、デバイスの動作が変わることがあります。\n\nこのショートカットは [設定] > [ユーザー補助] で別の機能に変更できます。"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ON にする"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ON にしない"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"オン"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"オフ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> にデバイスのフル コントロールを許可しますか?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> をオンにすると、デバイスデータの暗号化の強化に画面ロックは使用されなくなります。"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"フル コントロールは、ユーザー補助機能を必要とするユーザーをサポートするアプリには適していますが、ほとんどのアプリには適していません。"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"管理者により更新されています"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"管理者により削除されています"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n·ダークテーマを ON にする\n·バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能を OFF にする、または制限する\n\n"<annotation id="url">"詳細"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"電池を長持ちさせるためにバッテリー セーバーが行う操作:\n·ダークテーマを ON にする\n·バックグラウンド アクティビティ、一部の視覚効果や、「OK Google」などの機能を OFF にする、または制限する"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"データセーバーは、一部のアプリによるバックグラウンドでのデータ送受信を停止することでデータ使用量を抑制します。使用中のアプリからデータを送受信することはできますが、その頻度は低くなる場合があります。この影響として、たとえば画像はタップしないと表示されないようになります。"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"データセーバーを ON にしますか?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ON にする"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 3a205d95cca4..ee4d1169f1f3 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"თქვენი მოწყობილობა წაიშლება"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ადმინისტრატორის აპის გამოყენება ვერ მოხერხდება. თქვენი მოწყობილობა ახლა ამოიშლება.\n\nთუ შეკითხვები გაქვთ, დაუკავშირდით თქვენი ორგანიზაციის ადმინისტრატორს."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ბეჭდვა გათიშულია <xliff:g id="OWNER_APP">%s</xliff:g>-ის მიერ."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"განბლოკეთ თქვენი პირადი აპები"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"აპები ხვალ დაიბლოკება"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"თქვენი IT ადმინისტრატორი არ აძლევს უფლებას თქვენს სამსახურის პროფილს, დაპაუზებული იყოს <xliff:g id="DAYS">%1$d</xliff:g> დღეზე ხანგრძლივად."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ჩართეთ სამსახურის პროფილი"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"თქვენი პირადი აპები დაბლოკილი იქნება, სანამ სამსახურის პროფილს არ ჩართავთ"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"თქვენი პირადი აპები ხვალ დაიბლოკება"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"სამსახურის პროფილის ჩართვა"</string> <string name="me" msgid="6207584824693813140">"მე"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ტაბლეტის პარამეტრები"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ხმის ორივე ღილაკზე რამდენიმე წამის განმავლობაში დაჭერით ჩაირთვება <xliff:g id="SERVICE">%1$s</xliff:g>, რომელიც მარტივი წვდომის ფუნქციაა. ამან შეიძლება შეცვალოს თქვენი მოწყობილობის მუშაობის პრინციპი.\n\nამ მალსახმობის შეცვლა სხვა ფუნქციით შეგიძლიათ აქ: პარამეტრები > აპები."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ჩართვა"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"არ ჩაირთოს"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ჩართულია"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"გამორთულია"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"დართავთ ნებას <xliff:g id="SERVICE">%1$s</xliff:g>-ს, სრულად მართოს თქვენი მოწყობილობა?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g>-ს თუ ჩართავთ, მონაცემთა დაშიფვრის გასაძლიერებლად თქვენი მოწყობილობა ეკრანის დაბლოკვას არ გამოიყენებს."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"სრული კონტროლი გამოსადეგია აპებისთვის, რომლებიც მარტივი წვდომის საჭიროებისას გეხმარებათ, მაგრამ არა აპების უმრავლესობისთვის."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"წაიშალა თქვენი ადმინისტრატორის მიერ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"კარგი"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ბატარეის მუშაობის განრძლივობის მიზნით, ბატარეის დამზოგველი:\n·ირთვება ბნელ თემაზე\n·თიშავს ან ზღუდავს ფონის აქტივობებს, გარკვეულ ვიზუალურ ეფექტებს და სახვა შესაძლებლობებს, როგორიც არის “Hey Google”\n\n"<annotation id="url">"შეიტყვეთ მეტი"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ბატარეის მუშაობის გახანგრძლივების მიზნით, ბატარეის დამზოგველი:\n·ირთვება ბნელ თემაზე\n·თიშავს ან ზღუდავს ფონის აქტივობებს, გარკვეულ ვიზუალურ ეფექტებს და სახვა შესაძლებლობებს, როგორიც არის “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"მობილური ინტერნეტის მოხმარების შემცირების მიზნით, მონაცემთა დამზოგველი ზოგიერთ აპს ფონურ რეჟიმში მონაცემთა გაგზავნასა და მიღებას შეუზღუდავს. თქვენ მიერ ამჟამად გამოყენებული აპი მაინც შეძლებს მობილურ ინტერნეტზე წვდომას, თუმცა ამას ნაკლები სიხშირით განახორციელებს. ეს ნიშნავს, რომ, მაგალითად, სურათები არ გამოჩნდება მანამ, სანამ მათ საგანგებოდ არ შეეხებით."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ჩაირთოს მონაცემთა დამზოგველი?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ჩართვა"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 255d6ae1727b..29cce56a7f90 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Құрылғыңыздағы деректер өшіріледі"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Әкімші қолданбасын пайдалану мүмкін емес. Қазір құрылғыдағы деректер өшіріледі\n\nСұрақтарыңыз болса, ұйым әкімшісіне хабарласыңыз."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Басып шығаруды <xliff:g id="OWNER_APP">%s</xliff:g> өшірді."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Жеке қолданбалардың құлпын ашу"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Қолданбалар ертең құлыпталады"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Әкімші жұмыс профилін <xliff:g id="DAYS">%1$d</xliff:g> күннен аса мерзімге өшіруге рұқсат етпейді."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Жұмыс профиліңізді қосыңыз"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Жұмыс профиліңізді қоспайынша, жеке қолданбалар бөгеледі."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Жеке қолданбаларыңыз ертең бөгеледі."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Жұмыс профилін қосу"</string> <string name="me" msgid="6207584824693813140">"Мен"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Планшет опциялары"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Дыбыс деңгейі пернелерін бірнеше секунд басып тұрсаңыз, <xliff:g id="SERVICE">%1$s</xliff:g> арнайы қызметі іске қосылады. Бұл – құрылғының жүмысына әсер етуі мүмкін.\n\nБұл таңбашаны басқа функцияға \"Параметрлер > Арнайы мүмкіндіктер\" бөлімінен өзгерте аласыз."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Қосылсын"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Қосылмасын"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ҚОСУЛЫ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ӨШІРУЛІ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> қызметі құрылғыңызды толық басқаруына рұқсат етілсін бе?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> қоссаңыз, құрылғыңыз деректерді шифрлау үшін экранды бекітуді пайдаланбайды."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Арнайы мүмкіндіктер бойынша көмектесетін қолданбаларға ғана құрылғыны толық басқару рұқсатын берген дұрыс."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Әкімші жаңартқан"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Әкімші жойған"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Жарайды"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Батарея жұмысының ұзақтығын арттыру үшін Battery Saver:\n·Қараңғы тақырыпты іске қосады\n·фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді немесе шектейді.\n\n"<annotation id="url">"Толығырақ"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Батарея жұмысының ұзақтығын арттыру үшін Battery Saver:\n·Қараңғы тақырыпты іске қосады;\n·фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді немесе шектейді."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Дерек шығынын азайту үшін Data Saver функциясы кейбір қолданбаларға деректерді фондық режимде жіберуге және алуға жол бермейді. Ашық тұрған қолданба деректерді пайдаланады, бірақ шектеулі шамада (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Data Saver функциясын қосу керек пе?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Қосу"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 1c32ec1cd40d..7f482bc4b452 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ឧបករណ៍របស់អ្នកនឹងត្រូវបានលុប"</string> <string name="factory_reset_message" msgid="2657049595153992213">"មិនអាចប្រើកម្មវិធីអ្នកគ្រប់គ្រងបានទេ។ ឧបករណ៍របស់អ្នកនឹងលុបឥឡូវនេះ។\n\nប្រសិនបើអ្នកមានសំណួរផ្សេងៗ សូមទាក់ទងទៅអ្នកគ្រប់គ្រងស្ថាប័នរបស់អ្នក។"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ការបោះពុម្ពត្រូវបានបិទដោយ <xliff:g id="OWNER_APP">%s</xliff:g> ។"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ឈប់ទប់ស្កាត់កម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នក"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"កម្មវិធីនឹងត្រូវទប់ស្កាត់ថ្ងៃស្អែក"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"អ្នកគ្រប់គ្រងផ្នែកព័ត៌មានវិទ្យារបស់អ្នកមិនអនុញ្ញាតឱ្យផ្អាកកម្រងព័ត៌មានការងាររបស់អ្នកលើសពី <xliff:g id="DAYS">%1$d</xliff:g> ថ្ងៃទេ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"បើកកម្រងព័ត៌មានការងាររបស់អ្នក"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"កម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នកត្រូវបានទប់ស្កាត់ រហូតទាល់តែអ្នកបើកកម្រងព័ត៌មានការងាររបស់អ្នក"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"កម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នកនឹងត្រូវបានទប់ស្កាត់នៅថ្ងៃស្អែក"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"បើកកម្រងព័ត៌មានការងារ"</string> <string name="me" msgid="6207584824693813140">"ខ្ញុំ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ជម្រើសកុំព្យូទ័របន្ទះ"</string> @@ -1633,10 +1633,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ការសង្កត់គ្រាប់ចុចកម្រិតសំឡេងទាំងពីរឱ្យជាប់រយៈពេលពីរបីវិនាទីនឹងបើក <xliff:g id="SERVICE">%1$s</xliff:g> ដែលជាមុខងារភាពងាយប្រើ។ ការធ្វើបែបនេះអាចផ្លាស់ប្ដូររបៀបដែលឧបករណ៍របស់អ្នកដំណើរការ។\n\nអ្នកអាចប្ដូរផ្លូវកាត់នេះទៅមុខងារផ្សេងទៀតនៅក្នុងការកំណត់ > ភាពងាយស្រួល។"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"បើក"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"កុំបើក"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"បើក"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"បិទ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"អនុញ្ញាតឱ្យ <xliff:g id="SERVICE">%1$s</xliff:g> មានសិទ្ធិគ្រប់គ្រងឧបករណ៍របស់អ្នកទាំងស្រុងឬ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"បើអ្នកបើក <xliff:g id="SERVICE">%1$s</xliff:g> ឧបករណ៍របស់អ្នកនឹងមិនប្រើការចាក់សោអេក្រង់របស់អ្នក ដើម្បីបង្កើនប្រសិទ្ធភាពការអ៊ីនគ្រីបទិន្នន័យទេ។"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ការគ្រប់គ្រងទាំងស្រុងមានលក្ខណៈសមស្របសម្រាប់កម្មវិធី ដែលជួយអ្នកទាក់ទងនឹងការប្រើមុខងារភាពងាយស្រួល ប៉ុន្តែមិនសមស្របសម្រាប់កម្មវិធីភាគច្រើនទេ។"</string> @@ -1798,8 +1796,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ធ្វើបច្ចុប្បន្នភាពដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"លុបដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"យល់ព្រម"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម កម្មវិធីសន្សំថ្ម៖\n·បើករចនាប័ទ្មងងឹត\n·បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលជារូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Hey Google” ជាដើម\n\n"<annotation id="url">"ស្វែងយល់បន្ថែម"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ដើម្បីបង្កើនកម្រិតថាមពលថ្ម កម្មវិធីសន្សំថ្ម៖\n·បើករចនាប័ទ្មងងឹត\n·បិទ ឬដាក់កំហិតលើសកម្មភាពផ្ទៃខាងក្រោយ ឥទ្ធិពលជារូបភាពមួយចំនួន និងមុខងារផ្សេងទៀតដូចជា “Hey Google” ជាដើម"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ដើម្បីជួយកាត់បន្ថយការប្រើប្រាស់ទិន្នន័យ កម្មវិធីសន្សំសំចៃទិន្នន័យរារាំងកម្មវិធីមួយចំនួនមិនឲ្យបញ្ជូន ឬទទួលទិន្នន័យនៅផ្ទៃខាងក្រោយទេ។ កម្មវិធីដែលអ្នកកំពុងប្រើនាពេលបច្ចុប្បន្នអាចចូលប្រើប្រាស់ទិន្នន័យបាន ប៉ុន្តែអាចនឹងមិនញឹកញាប់ដូចមុនទេ។ ឧទាហរណ៍ រូបភាពមិនបង្ហាញទេ លុះត្រាតែអ្នកប៉ះរូបភាពទាំងនោះ។"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"បើកកម្មវិធីសន្សំសំចៃទិន្នន័យ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"បើក"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 75c4f1d37c04..c03f37e57464 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ನಿರ್ವಹಣೆ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಸಾಧನವನ್ನು ಇದೀಗ ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nನಿಮ್ಮಲ್ಲಿ ಪ್ರಶ್ನೆಗಳಿದ್ದರೆ, ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ಮೂಲಕ ಪ್ರಿಂಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳ ನಿರ್ಬಂಧ ತೆಗೆಯಿರಿ"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ಆ್ಯಪ್ಗಳನ್ನು ನಾಳೆ ನಿರ್ಬಂಧಿಸಲಾಗುವುದು"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="DAYS">%1$d</xliff:g> ದಿನಗಳಿಗಿಂತ ಹೆಚ್ಚು ಸಮಯ ವಿರಾಮಗೊಳಿಸಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವವರೆಗೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗುತ್ತದೆ"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳನ್ನು ನಾಳೆ ನಿರ್ಬಂಧಿಸಲಾಗುತ್ತದೆ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string> <string name="me" msgid="6207584824693813140">"ನಾನು"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ಟ್ಯಾಬ್ಲೆಟ್ ಆಯ್ಕೆಗಳು"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ಎರಡೂ ವಾಲ್ಯೂಮ್ ಕೀಗಳನ್ನು ಕೆಲವು ಸೆಕೆಂಡುಗಳ ಕಾಲ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವುದರಿಂದ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯವಾದ <xliff:g id="SERVICE">%1$s</xliff:g> ಆನ್ ಆಗುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಸಾಧನವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಬದಲಾಯಿಸಬಹುದು.\n\nನೀವು ಈ ಶಾರ್ಟ್ಕಟ್ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಅಕ್ಸೆಸಿಬಿಲಿಟಿಯಲ್ಲಿನ ಮತ್ತೊಂದು ವೈಶಿಷ್ಟ್ಯಕ್ಕೆ ಬದಲಾಯಿಸಬಹುದು."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ಆನ್ ಮಾಡಿ"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ಆನ್ ಮಾಡಬೇಡಿ"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ಆನ್ ಆಗಿದೆ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ಆಫ್ ಆಗಿದೆ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ನಿಮ್ಮ ಸಾಧನದ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ಹೊಂದಲು <xliff:g id="SERVICE">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"ನೀವು <xliff:g id="SERVICE">%1$s</xliff:g> ಅನ್ನು ಆನ್ ಮಾಡಿದರೆ, ನಿಮ್ಮ ಸಾಧನವು ಡೇಟಾ ಎನ್ಕ್ರಿಪ್ಶನ್ ಅನ್ನು ವರ್ಧಿಸಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ಲಾಕ್ ಅನ್ನು ಬಳಸುವುದಿಲ್ಲ."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ಪ್ರವೇಶಿಸುವಿಕೆಯ ಅವಶ್ಯಕತೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುವ ಆ್ಯಪ್ಗಳಿಗೆ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ನೀಡುವುದು ಸೂಕ್ತವಾಗಿರುತ್ತದೆ, ಆದರೆ ಬಹುತೇಕ ಆ್ಯಪ್ಗಳಿಗೆ ಇದು ಸೂಕ್ತವಲ್ಲ."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಪ್ಡೇಟ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಳಿಸಿದ್ದಾರೆ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ಸರಿ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು, ಬ್ಯಾಟರಿ ಸೇವರ್:\n·ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ\n·ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ದೃಶ್ಯಾತ್ಮಕ ಎಫೆಕ್ಟ್ಗಳು ಮತ್ತು “ಹೇ Google” ನಂತಹ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ ಅಥವಾ ನಿರ್ಬಂಧಿಸುತ್ತದೆ\n\n"<annotation id="url">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು, ಬ್ಯಾಟರಿ ಸೇವರ್:\n·ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡುತ್ತದೆ\n·ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆ, ಕೆಲವು ವಿಷುವಲ್ ಎಫೆಕ್ಟ್ಗಳು ಮತ್ತು “ಹೇ Google” ನಂತಹ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ ಅಥವಾ ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ಡೇಟಾ ಬಳಕೆ ಕಡಿಮೆ ಮಾಡುವ ನಿಟ್ಟಿನಲ್ಲಿ, ಡೇಟಾ ಸೇವರ್ ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಆದರೆ ಪದೇ ಪದೇ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಇದರರ್ಥ, ಉದಾಹರಣೆಗೆ, ನೀವು ಅವುಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವವರೆಗೆ ಆ ಚಿತ್ರಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ಡೇಟಾ ಸೇವರ್ ಆನ್ ಮಾಡಬೇಕೇ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ಆನ್ ಮಾಡಿ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 8437ab6a8c1c..66df0559def5 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"기기가 삭제됩니다."</string> <string name="factory_reset_message" msgid="2657049595153992213">"관리자 앱을 사용할 수 없습니다. 곧 기기가 삭제됩니다.\n\n궁금한 점이 있으면 조직의 관리자에게 문의하세요."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g>에 의해 사용 중지되었습니다."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"개인 앱 차단 해제"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"내일부터 앱이 차단됨"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT 관리자가 <xliff:g id="DAYS">%1$d</xliff:g>일보다 오래 직장 프로필을 일시중지하도록 허용하지 않습니다."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"직장 프로필 사용 설정"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"직장 프로필을 사용 설정할 때까지 개인 앱이 차단됩니다."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"개인 앱이 내일 차단됩니다."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"직장 프로필 사용 설정"</string> <string name="me" msgid="6207584824693813140">"나"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"태블릿 옵션"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"볼륨 키 2개를 몇 초 동안 길게 누르면 <xliff:g id="SERVICE">%1$s</xliff:g> 접근성 기능이 사용 설정됩니다. 이렇게 되면 기기 작동 방식이 달라질 수 있습니다.\n\n설정 > 접근성에서 이 단축키를 다른 기능으로 변경할 수 있습니다."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"사용 설정"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"사용 안 함"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"사용"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"사용 안함"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>에서 기기를 완전히 제어하도록 허용하시겠습니까?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g>을(를) 사용 설정하면 기기에서 데이터 암호화를 개선하기 위해 화면 잠금을 사용하지 않습니다."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"접근성 관련 지원을 제공하는 앱에는 완벽한 제어권을 부여하는 것이 좋으나, 대부분의 앱에는 적합하지 않습니다."</string> @@ -1796,8 +1794,8 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"관리자에 의해 업데이트되었습니다."</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"관리자에 의해 삭제되었습니다."</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"확인"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"배터리 수명을 늘리기 위해 절전 모드가 다음과 같이 작동합니다.\n·어두운 테마를 사용 설정합니다.\n·백그라운드 활동, 일부 시각 효과 및 \'Hey Google\'과 같은 기타 기능을 사용 중지하거나 제한합니다.\n\n"<annotation id="url">"자세히 알아보기"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"배터리 수명을 늘리기 위해 절전 모드가 다음과 같이 작동합니다.\n·어두운 테마를 사용 설정합니다.\n·백그라운드 활동, 일부 시각 효과 및 \'Hey Google\'과 같은 기타 기능을 사용 중지하거나 제한합니다."</string> + <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"배터리 수명을 늘리기 위해 절전 모드가 다음과 같이 작동합니다.\n\n•어두운 테마를 사용 설정합니다.\n•백그라운드 활동, 일부 시각 효과 및 \'Hey Google\'과 같은 기타 기능을 사용 중지하거나 제한합니다.\n\n"<annotation id="url">"자세히 알아보기"</annotation></string> + <string name="battery_saver_description" msgid="8587408568232177204">"배터리 수명을 늘리기 위해 절전 모드가 다음과 같이 작동합니다.\n\n•어두운 테마를 사용 설정합니다.\n•백그라운드 활동, 일부 시각 효과 및 \'Hey Google\'과 같은 기타 기능을 사용 중지하거나 제한합니다."</string> <string name="data_saver_description" msgid="4995164271550590517">"데이터 사용량을 줄이기 위해 데이터 절약 모드는 일부 앱이 백그라운드에서 데이터를 전송하거나 수신하지 못하도록 합니다. 현재 사용 중인 앱에서 데이터에 액세스할 수 있지만 빈도가 줄어듭니다. 예를 들면, 이미지를 탭하기 전에는 이미지가 표시되지 않습니다."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"데이터 절약 모드를 사용 설정하시겠습니까?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"사용 설정"</string> @@ -2044,15 +2042,12 @@ <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"전원 대화상자"</string> <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"잠금 화면"</string> <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"스크린샷"</string> - <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> - <skip /> - <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> - <skip /> + <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"터치식 접근성 단축키"</string> + <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"터치식 접근성 단축키 선택 도구"</string> <string name="accessibility_freeform_caption" msgid="8377519323496290122">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 자막 표시줄입니다."</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 항목이 RESTRICTED 버킷으로 이동함"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> - <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> - <skip /> + <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"이미지 보냄"</string> <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"대화"</string> <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"그룹 대화"</string> <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 1ba6094e85b9..e76ca6304e57 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Түзмөгүңүз тазаланат"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Түзмөктү башкаруучу колдонмо жараксыз. Түзмөгүңүз азыр тазаланат.\n\nСуроолоруңуз болсо, ишканаңыздын администраторуна кайрылыңыз."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Басып чыгаруу <xliff:g id="OWNER_APP">%s</xliff:g> тарабынан өчүрүлдү."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Жеке колд. бөгөттөн чыгарыңыз"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Колдонмолор эртең бөгөттөлөт"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT администраторуңуз жумуш профилиңиздин <xliff:g id="DAYS">%1$d</xliff:g> күндөн ашык тындырылышына тыюу салды"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Жумуш профилиңизди күйгүзүңүз"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Жумуш профилиңизди күйгүзмөйүнчө жеке колдонмолоруңуз бөгөттөлгөн боюнча калат"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Жеке колдонмолоруңуз эртең бөгөттөлөт"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Жумуш профилин күйгүзүү"</string> <string name="me" msgid="6207584824693813140">"Мен"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Планшет мүмкүнчүлүктөрү"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Үндү чоңойтуп/кичирейтүү баскычтарын бир нече секунд коё бербей басып турса, <xliff:g id="SERVICE">%1$s</xliff:g>, атайын мүмкүнчүлүктөр күйгүзүлөт. Бул түзмөгүңүздүн ишин өзгөртүшү мүмкүн.\n\nБул ыкчам баскычты Жөндөөлөр > Атайын мүмкүнчүлүктөр бөлүмүнөн башка функцияга өзгөртө аласыз."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Күйгүзүлсүн"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Күйгүзүлбөсүн"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"КҮЙҮК"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ӨЧҮК"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> кызматына түзмөгүңүздү толугу менен көзөмөлдөөгө уруксат бересизби?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Эгер <xliff:g id="SERVICE">%1$s</xliff:g> күйгүзүлсө, түзмөгүңүз дайын-даректерди шифрлөөнү күчтөндүрүү үчүн экраныңыздын кулпусун пайдаланбайт."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Толук көзөмөл атайын мүмкүнчүлүктөрдү пайдаланууга керек, бирок калган көпчүлүк колдонмолорго кереги жок."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Администраторуңуз жаңыртып койгон"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Администраторуңуз жок кылып салган"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ЖАРАЙТ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Батареяны үнөмдөө үчүн Батареяны үнөмдөгүч:\n·Караңгы теманы күйгүзөт\n·Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт\n\n"<annotation id="url">"Кеңири маалымат"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Батареянын иштешин узартуу үчүн, Батареяны үнөмдөөчү режим:\n·Караңгы теманы күйгүзөт;\n·Фондогу аракеттерди, айрым визуалдык эффекттерди жана \"Окей Google\" сыяктуу башка функцияларды өчүрөт же чектейт"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Трафикти үнөмдөө режиминде айрым колдонмолор дайын-даректерди фондо өткөрө алышпайт. Учурда сиз пайдаланып жаткан колдонмо дайын-даректерди жөнөтүп/ала алат, бирок адаттагыдан азыраак өткөргөндүктөн, анын айрым функциялары талаптагыдай иштебей коюшу мүмкүн. Мисалы, сүрөттөр басылмайынча жүктөлбөйт."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Трафикти үнөмдөө режимин иштетесизби?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Күйгүзүү"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 083e4cc12c15..fbcae03c92e6 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ອຸປະກອນຂອງທ່ານຈະຖືກລຶບ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ບໍ່ສາມາດໃຊ້ແອັບຜູ້ເບິ່ງແຍງລະບົບໄດ້. ອຸປະກອນຂອງທ່ານຈະຖືກລຶບຂໍ້ມູນໃນຕອນນີ້.\n\nຫາກທ່ານມີຄຳຖາມ, ໃຫ້ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບອົງກອນຂອງທ່ານ."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ການພິມຖືກປິດໄວ້ໂດຍ <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ປົດບລັອກແອັບສ່ວນຕົວຂອງທ່ານ"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ແອັບຈະຖືກບລັອກໃນມື້ອື່ນ"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຢຸດໂປຣໄຟລ໌ວຽກຂອງທ່ານເກີນ <xliff:g id="DAYS">%1$d</xliff:g> ມື້ໄດ້"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ເປີດໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"ແອັບສ່ວນຕົວຂອງທ່ານຈະຖືກບລັອກໄວ້ຈົນກວ່າທ່ານຈະເປີດໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"ແອັບສ່ວນຕົວຂອງທ່ານຈະຖືກບລັອກໄວ້ໃນມື້ອື່ນ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ເປີດໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string> <string name="me" msgid="6207584824693813140">"ຂ້າພະເຈົ້າ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ໂຕເລືອກແທັບເລັດ"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ກົດປຸ່ມລະດັບສຽງທັງສອງຄ້າງໄວ້ສອງສາມວິນາທີເພື່ອເປີດໃຊ້ <xliff:g id="SERVICE">%1$s</xliff:g>, ຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງ. ນີ້ອາດປ່ຽນວິທີການເຮັດວຽກຂອງອຸປະກອນທ່ານ.\n\nທ່ານສາມາດປ່ຽນທາງລັດນີ້ເປັນຄຸນສົມບັດອື່ນໄດ້ໃນການຕັ້ງຄ່າ > ການຊ່ວຍເຂົ້າເຖິງ."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ເປີດໃຊ້"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ບໍ່ເປີດ"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ເປີດ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ປິດ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ອະນຸຍາດໃຫ້ <xliff:g id="SERVICE">%1$s</xliff:g> ຄວບຄຸມອຸປະກອນທ່ານໄດ້ເຕັມຮູບແບບບໍ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"ຫາກທ່ານເປີດໃຊ້ <xliff:g id="SERVICE">%1$s</xliff:g>, ອຸປະກອນຂອງທ່ານຈະບໍ່ໃຊ້ການລັອກໜ້າຈໍຂອງທ່ານເພື່ອເພີ່ມການເຂົ້າລະຫັດຂໍ້ມູນ."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ການຄວບຄຸມແບບເຕັມຮູບແບບແມ່ນເໝາະສົມສຳລັບແອັບທີ່ຊ່ວຍທ່ານໃນດ້ານການຊ່ວຍເຂົ້າເຖິງ, ແຕ່ບໍ່ເໝາະສຳລັບທຸກແອັບ."</string> @@ -1796,8 +1794,8 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ຖືກອັບໂຫລດໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ຖືກລຶບອອກໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ຕົກລົງ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n·ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n·ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Hey Google”\n\n"<annotation id="url">"ສຶກສາເພີ່ມເຕີມ"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n·ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n·ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Hey Google”"</string> + <string name="battery_saver_description_with_learn_more" msgid="5997766757551917769">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n\n•ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n•ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Hey Google”\n\n"<annotation id="url">"ສຶກສາເພີ່ມເຕີມ"</annotation></string> + <string name="battery_saver_description" msgid="8587408568232177204">"ເພື່ອຍືດອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະ:\n\n•ເປີດໃຊ້ຮູບແບບສີສັນມືດ\n•ປິດ ຫຼື ຈຳກັດການເຄື່ອນໄຫວໃນພື້ນຫຼັງ, ເອັບເຟັກດ້ານພາບບາງຢ່າງ ແລະ ຄຸນສົມບັດອື່ນໆ ເຊັ່ນ: “Hey Google”"</string> <string name="data_saver_description" msgid="4995164271550590517">"ເພື່ອຊ່ວຍຫຼຸດຜ່ອນການນຳໃຊ້ຂໍ້ມູນ, ຕົວປະຢັດອິນເຕີເນັດຈະປ້ອງກັນບໍ່ໃຫ້ບາງແອັບສົ່ງ ຫຼື ຮັບຂໍ້ມູນໃນພື້ນຫຼັງ. ແອັບໃດໜຶ່ງທີ່ທ່ານກຳລັງໃຊ້ຢູ່ຈະສາມາດເຂົ້າເຖິງຂໍ້ມູນໄດ້ ແຕ່ອາດເຂົ້າເຖິງໄດ້ຖີ່ໜ້ອຍລົງ. ນີ້ອາດໝາຍຄວາມວ່າ ຮູບພາບຕ່າງໆອາດບໍ່ສະແດງຈົນກວ່າທ່ານຈະແຕະໃສ່ກ່ອນ."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ເປີດຕົວປະຢັດອິນເຕີເນັດບໍ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ເປີດໃຊ້"</string> @@ -2044,15 +2042,12 @@ <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"ກ່ອງໂຕ້ຕອບການເປີດປິດ"</string> <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"ໜ້າຈໍລັອກ"</string> <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ຮູບໜ້າຈໍ"</string> - <!-- no translation found for accessibility_system_action_accessibility_button_label (5941347017132886642) --> - <skip /> - <!-- no translation found for accessibility_system_action_accessibility_button_chooser_label (6973618519666227981) --> - <skip /> + <string name="accessibility_system_action_accessibility_button_label" msgid="5941347017132886642">"ທາງລັດການຊ່ວຍເຂົ້າເຖິງຢູ່ໜ້າຈໍ"</string> + <string name="accessibility_system_action_accessibility_button_chooser_label" msgid="6973618519666227981">"ຕົວເລືອກທາງລັດການຊ່ວຍເຂົ້າເຖິງຢູ່ໜ້າຈໍ"</string> <string name="accessibility_freeform_caption" msgid="8377519323496290122">"ແຖບຄຳບັນຍາຍຂອງ <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ຖືກວາງໄວ້ໃນກະຕ່າ \"ຈຳກັດ\" ແລ້ວ"</string> <string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string> - <!-- no translation found for conversation_single_line_image_placeholder (6983271082911936900) --> - <skip /> + <string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ສົ່ງຮູບແລ້ວ"</string> <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"ການສົນທະນາ"</string> <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"ການສົນທະນາກຸ່ມ"</string> <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 8dd7fa1f7076..56483e00999e 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Įrenginys bus ištrintas"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administratoriaus programos negalima naudoti. Dabar įrenginio duomenys bus ištrinti.\n\nJei turite klausimų, susisiekite su organizacijos administratoriumi."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Neleidžiama spausdinti (<xliff:g id="OWNER_APP">%s</xliff:g>)."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Asm. progr. blok. panaikinim."</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Progr. bus užblokuotos rytoj"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT administratorius neleidžia sustabdyti darbo profilio ilgiau nei <xliff:g id="DAYS">%1$d</xliff:g> d."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Įjunkite darbo profilį"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Asmeninės programos bus užblokuotos, kol įjungsite darbo profilį"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Jūsų asmeninės programos rytoj bus užblokuotos"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Įjungti darbo profilį"</string> <string name="me" msgid="6207584824693813140">"Aš"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Planšetinio kompiuterio parinktys"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Paspaudus abu garsumo klavišus ir palaikius kelias sekundes įjungiama pritaikymo neįgaliesiems funkcija „<xliff:g id="SERVICE">%1$s</xliff:g>“. Tai gali pakeisti įrenginio veikimą.\n\nGalite pakeisti šį spartųjį klavišą į kitą funkciją skiltyje „Nustatymai“ > „Pritaikomumas“."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Įjungti"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Neįjungti"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ĮJUNGTA"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"IŠJUNGTA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Leisti „<xliff:g id="SERVICE">%1$s</xliff:g>“ valdyti visas įrenginio funkcijas?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Jei įjungsite „<xliff:g id="SERVICE">%1$s</xliff:g>“, įrenginyje nebus naudojamas ekrano užraktas siekiant patobulinti duomenų šifruotę."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Galimybę valdyti visas funkcijas patariama suteikti programoms, kurios padeda specialiųjų poreikių turintiems asmenims, bet ne daugumai programų."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Atnaujino administratorius"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Ištrynė administratorius"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Gerai"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Kad akumuliatorius veiktų ilgiau, akumuliatoriaus tausojimo priemonė:\n·įjungia tamsiąją temą;\n·išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Hey Google“.\n\n"<annotation id="url">"Sužinokite daugiau"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Kad akumuliatorius veiktų ilgiau, akumuliatoriaus tausojimo priemonė:\n·įjungia tamsiąją temą;\n·išjungia arba apriboja veiklą fone, kai kuriuos vaizdinius efektus ir kitas funkcijas, pvz., „Hey Google“."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Kad padėtų sumažinti duomenų naudojimą, Duomenų taupymo priemonė neleidžia kai kurioms programoms siųsti ar gauti duomenų fone. Šiuo metu naudojama programa gali pasiekti duomenis, bet tai bus daroma rečiau. Tai gali reikšti, kad, pvz., vaizdai nebus pateikiami, jei jų nepaliesite."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Įj. Duomenų taupymo priemonę?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Įjungti"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 07693a9b2334..70056e828ff1 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Jūsu ierīces dati tiks dzēsti"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administratora lietotni nevar izmantot. Ierīcē saglabātie dati tiks dzēsti.\n\nJa jums ir kādi jautājumi, sazinieties ar savas organizācijas administratoru."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Drukāšanu atspējoja <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Atbloķējiet person. lietotnes"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Lietotnes tiks bloķētas rīt"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Jūsu IT administrators neatļauj apturēt jūsu darba profila darbību ilgāk nekā <xliff:g id="DAYS">%1$d</xliff:g> dienas"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Darba profila ieslēgšana"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Jūsu personīgās lietotnes būs bloķētas, līdz ieslēgsiet savu darba profilu."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Jūsu personīgās lietotnes rīt tiks bloķētas."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ieslēgt darba profilu"</string> <string name="me" msgid="6207584824693813140">"Man"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Planšetdatora opcijas"</string> @@ -1653,10 +1653,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Turot nospiestus abus skaļuma taustiņus dažas sekundes, tiek ieslēgta pieejamības funkcija <xliff:g id="SERVICE">%1$s</xliff:g>. Tas var mainīt ierīces darbību.\n\nŠo saīsni uz citu funkciju varat mainīt šeit: Iestatījumi > Pieejamība."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ieslēgt"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Neieslēgt"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"IESLĒGTA"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"IZSLĒGTA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vai atļaut pakalpojumam <xliff:g id="SERVICE">%1$s</xliff:g> pilnībā kontrolēt jūsu ierīci?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ja ieslēgsiet pakalpojumu <xliff:g id="SERVICE">%1$s</xliff:g>, ierīce neizmantos ekrāna bloķēšanu datu šifrēšanas uzlabošanai."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pilnīga kontrole ir piemērota lietotnēm, kas nepieciešamas lietotājiem ar īpašām vajadzībām, taču ne lielākajai daļai lietotņu."</string> @@ -1819,8 +1817,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Atjaunināja administrators"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dzēsa administrators"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Labi"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Lai pagarinātu akumulatora darbības ilgumu, akumulatora jaudas taupīšanas režīmā tiek veiktas tālāk norādītās darbības.\n·Tiek ieslēgts tumšais motīvs.\n·Tiek izslēgtas vai ierobežotas darbības fonā, daži vizuālie efekti un citas funkcijas, piemēram, “Hey Google”.\n\n"<annotation id="url">"Uzzināt vairāk"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Lai pagarinātu akumulatora darbības ilgumu, akumulatora jaudas taupīšanas režīmā tiek veiktas tālāk norādītās darbības.\n·Tiek ieslēgts tumšais motīvs.\n·Tiek izslēgtas vai ierobežotas darbības fonā, daži vizuālie efekti un citas funkcijas, piemēram, “Hey Google”."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Lai samazinātu datu lietojumu, datu lietojuma samazinātājs neļauj dažām lietotnēm fonā nosūtīt vai saņemt datus. Lietotne, kuru pašlaik izmantojat, var piekļūt datiem, bet, iespējams, piekļūs tiem retāk (piemēram, attēli tiks parādīti tikai tad, kad tiem pieskarsieties)."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vai ieslēgt datu lietojuma samazinātāju?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ieslēgt"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 6988893f7a8e..51501b45335b 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Уредот ќе се избрише"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Апликацијата на администраторот не може да се користи. Уредот ќе се избрише сега.\n\nАко имате прашања, контактирајте со администраторот на организацијата."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Печатењето е оневозможено од <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Деблокирајте лични апликации"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Блокирање на апликациите утре"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT-администраторот не дозволува паузирање на работниот профил за повеќе од <xliff:g id="DAYS">%1$d</xliff:g> дена"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Вклучи го работниот профил"</string> <string name="me" msgid="6207584824693813140">"Јас"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опции на таблет"</string> @@ -1633,10 +1636,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ако ги задржите притиснати двете копчиња за јачина на звук неколку секунди, ќе се вклучи функцијата за пристапност <xliff:g id="SERVICE">%1$s</xliff:g>. Ова може да го промени начинот на функционирање на уредот.\n\nМоже да ја измените кратенкава да биде за друга функција во „Поставки > Пристапност“."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Вклучи"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не вклучувај"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ВКЛУЧЕНО"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИСКЛУЧЕНО"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Дали дозволувате <xliff:g id="SERVICE">%1$s</xliff:g> да има целосна контрола врз вашиот уред?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ако вклучите <xliff:g id="SERVICE">%1$s</xliff:g>, уредот нема да го користи заклучувањето на екранот за да го подобри шифрирањето на податоците."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Целосната контрола е соодветна за апликации што ви помагаат со потребите за пристапност, но не и за повеќето апликации."</string> @@ -1798,8 +1799,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирано од администраторот"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Избришано од администраторот"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Во ред"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n·вклучува темна тема\n·исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Hey Google“\n\n"<annotation id="url">"Дознајте повеќе"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"За да го продолжи траењето на батеријата, „Штедачот на батерија“:\n·вклучува „Темна тема“;\n·исклучува или ограничува активност во заднина, некои визуелни ефекти и други функции како „Ok Google“."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"За да се намали користењето интернет, „Штедачот на интернет“ спречува дел од апликациите да испраќаат или да примаат податоци во заднина. Одредена апликација што ја користите ќе може да користи интернет, но можеби тоа ќе го прави поретко. Ова значи, на пример, дека сликите нема да се прикажуваат додека не ги допрете."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Да се вклучи „Штедач на интернет“?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Вклучи"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 8fa33ee82ab8..791117cb9bc6 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"നിങ്ങളുടെ ഉപകരണം മായ്ക്കും"</string> <string name="factory_reset_message" msgid="2657049595153992213">"അഡ്മിൻ ആപ്പ് ഉപയോഗിക്കാനാകില്ല. നിങ്ങളുടെ ഉപകരണം ഇപ്പോൾ മായ്ക്കപ്പെടും.\n\nനിങ്ങൾക്ക് ചോദ്യങ്ങൾ ഉണ്ടെങ്കിൽ, നിങ്ങളുടെ സ്ഥാപനത്തിന്റെ അഡ്മിനെ ബന്ധപ്പെടുക."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> പ്രിന്റിംഗ് പ്രവർത്തനരഹിതമാക്കി."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"വ്യക്തിപര ആപ്പ് അൺബ്ലോക്കാക്കൂ"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ആപ്പുകൾ നാളെ ബ്ലോക്ക് ചെയ്യും"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ <xliff:g id="DAYS">%1$d</xliff:g> ദിവസത്തിൽ കൂടുതൽ താൽക്കാലികമായി നിർത്താൻ നിങ്ങളുടെ ഐടി അഡ്മിൻ അനുവദിക്കുന്നില്ല"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ഔദ്യോഗിക പ്രൊഫൈൽ ഓണാക്കുക"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ ഓണാക്കുന്നത് വരെ നിങ്ങളുടെ വ്യക്തിപരമായ ആപ്പുകൾ ബ്ലോക്കായിരിക്കും"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"നിങ്ങളുടെ വ്യക്തിപര ആപ്പുകൾ നാളെ ബ്ലോക്ക് ചെയ്യും"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ഔദ്യോഗിക പ്രൊഫൈൽ ഓണാക്കുക"</string> <string name="me" msgid="6207584824693813140">"ഞാന്"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ടാബ്ലെറ്റ് ഓപ്ഷനുകൾ"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"രണ്ട് വോളിയം കീകളും അൽപ്പ നേരത്തേക്ക് അമർത്തിപ്പിടിക്കുന്നത് ഉപയോഗസഹായി ഫീച്ചറായ <xliff:g id="SERVICE">%1$s</xliff:g> എന്നതിനെ ഓണാക്കുന്നു. നിങ്ങളുടെ ഉപകരണം പ്രവർത്തിക്കുന്ന വിധം ഇത് മാറ്റിയേക്കാം.\n\nക്രമീകരണം > ഉപയോഗസഹായി എന്നതിലെ മറ്റൊരു ഫീച്ചറിലേക്ക് നിങ്ങൾക്ക് ഈ കുറുക്കുവഴി മാറ്റാനാവും."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ഓണാക്കുക"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ഓണാക്കരുത്"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ഓണാണ്"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ഓഫാണ്"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> എന്നതിന് നിങ്ങളുടെ ഉപകരണത്തിന്മേൽ പൂർണ്ണ നിയന്ത്രണം അനുവദിക്കണോ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> ഓണാക്കിയെങ്കിൽ, ഡാറ്റ എൻക്രിപ്ഷൻ മെച്ചപ്പെടുത്താൻ ഉപകരണം നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കില്ല."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ഉപയോഗസഹായി ആവശ്യങ്ങൾക്കായി നിങ്ങളെ സഹായിക്കുന്ന ആപ്പുകൾക്ക് പൂർണ്ണ നിയന്ത്രണം അനുയോജ്യമാണെങ്കിലും മിക്ക ആപ്പുകൾക്കും അനുയോജ്യമല്ല."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"നിങ്ങളുടെ അഡ്മിൻ അപ്ഡേറ്റ് ചെയ്യുന്നത്"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"നിങ്ങളുടെ അഡ്മിൻ ഇല്ലാതാക്കുന്നത്"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ശരി"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ബാറ്ററി ലെെഫ് വികസിപ്പിക്കാൻ, \'ബാറ്ററി ലാഭിക്കൽ\':\n ഡാർക്ക് തീം ഓണാക്കും\nപശ്ചാത്തല പ്രവർത്തനം, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, “ഹേയ് Google” പോലുള്ള മറ്റ് ഫീച്ചറുകൾ എന്നിവ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യും\n\n"<annotation id="url">"കൂടുതലറിയുക"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ബാറ്ററി ലെെഫ് വികസിപ്പിക്കാൻ, \'ബാറ്ററി ലാഭിക്കൽ\':\n ഡാർക്ക് തീം ഓണാക്കും\nപശ്ചാത്തല പ്രവർത്തനം, ചില വിഷ്വൽ ഇഫക്റ്റുകൾ, “ഹേയ് Google” പോലുള്ള മറ്റ് ഫീച്ചറുകൾ എന്നിവ ഓഫാക്കുകയോ നിയന്ത്രിക്കുകയോ ചെയ്യും"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ഡാറ്റാ ഉപയോഗം കുറയ്ക്കാൻ സഹായിക്കുന്നതിനായി പശ്ചാത്തലത്തിൽ ഡാറ്റ അയയ്ക്കുകയോ സ്വീകരിക്കുകയോ ചെയ്യുന്നതിൽ നിന്ന് ചില ആപ്പുകളെ ഡാറ്റാ സേവർ തടയുന്നു. നിങ്ങൾ നിലവിൽ ഉപയോഗിക്കുന്ന ഒരു ആപ്പിന് ഡാറ്റ ആക്സസ് ചെയ്യാനാകും, എന്നാൽ വല്ലപ്പോഴും മാത്രമെ സംഭവിക്കുന്നുള്ളു. ഇതിനർത്ഥം, ഉദാഹരണമായി നിങ്ങൾ ടാപ്പ് ചെയ്യുന്നത് വരെ ചിത്രങ്ങൾ പ്രദർശിപ്പിക്കുകയില്ല എന്നാണ്."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ഡാറ്റ സേവർ ഓണാക്കണോ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ഓണാക്കുക"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index bbeb09cf5e94..f7ac0696af58 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Таны төхөөрөмж устах болно."</string> <string name="factory_reset_message" msgid="2657049595153992213">"Админ аппыг ашиглах боломжгүй. Таны төхөөрөмжийг одоо устгана.\n\nХэрэв танд асуулт байгаа бол байгууллагынхаа админтай холбогдоно уу."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> хэвлэх үйлдлийг идэвхгүй болгосон."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Хувийн аппуудаа блокоос гаргана уу"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Аппуудыг маргааш блоклоно"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Таны мэдээлэл технологийн админ таны ажлын профайлыг <xliff:g id="DAYS">%1$d</xliff:g>-с олон хоног түр зогсоохыг зөвшөөрөхгүй байна"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ажлын профайлаа асаах"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Та ажлын профайлыг асаах хүртэл таны хувийн аппуудыг хориглосон"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Таны хувийн аппуудыг маргааш хориглоно"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ажлын профайлыг асаах"</string> <string name="me" msgid="6207584824693813140">"Би"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Таблетын сонголтууд"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Дууны түвшний түлхүүрийг хэдэн секундийн турш зэрэг дарах нь хандалтын онцлог болох <xliff:g id="SERVICE">%1$s</xliff:g>-г асаадаг. Энэ нь таны төхөөрөмжийн ажиллах зарчмыг өөрчилж болзошгүй.\n\nТа Тохиргоо > Хандалт хэсэгт энэ товчлолыг өөр онцлогт оноож өөрчлөх боломжтой."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Асаах"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Битгий асаа"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ИДЭВХТЭЙ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИДЭВХГҮЙ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>-д таны төхөөрөмжийг бүрэн хянахыг зөвшөөрөх үү?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Хэрэв та <xliff:g id="SERVICE">%1$s</xliff:g>-г асаавал таны төхөөрөмж өгөгдлийн шифрлэлтийг сайжруулахын тулд таны дэлгэцийн түгжээг ашиглахгүй."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Бүрэн хянах нь таны хандалтын үйлчилгээний шаардлагад тусалдаг аппуудад тохиромжтой боловч ихэнх аппад тохиромжгүй байдаг."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Таны админ шинэчилсэн"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Таны админ устгасан"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгч нь:\n·Бараан загварыг асаадаг\n·Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарладаг\n\n"<annotation id="url">"Нэмэлт мэдээлэл авах"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгч нь:\n·Бараан загварыг асаадаг\n·Арын үйл ажиллагаа, зарим визуал эффект болон “Hey Google” зэрэг бусад онцлогийг унтрааж эсвэл хязгаарладаг"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь ар талд ажиллаж буй зарим апп-н өгөгдлийг илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч тогтмол хандахгүй. Энэ нь жишээлбэл зургийг товших хүртэл харагдахгүй гэсэн үг юм."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Дата хэмнэгчийг асаах уу?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Асаах"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 9ee94369acc6..d842abdad39d 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"तुमचे डिव्हाइस मिटविले जाईल"</string> <string name="factory_reset_message" msgid="2657049595153992213">"प्रशासक अॅप वापरता येणार नाही. तुमचे डिव्हाइस आता साफ केले जाईल.\n\nतुम्हाला कुठलेही प्रश्न असल्यास, तुमच्या संस्थेच्या प्रशासकाशी संपर्क साधा."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> नी प्रिंट करणे बंद केले आहे."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"वैयक्तिक ॲप्स अनब्लॉक करा"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"अॅप्स उद्या ब्लॉक केली जातील"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"तुमचा आयटी अॅडमिन तुमची ऑफिस प्रोफाइल <xliff:g id="DAYS">%1$d</xliff:g> पेक्षा जास्त दिवसांसाठी थांबवण्याची अनुमती देत नाही"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"तुमची कार्य प्रोफाइल सुरू करा"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"तुम्ही तुमची कार्य प्रोफाइल सुरू करेपर्यंत तुमची वैयक्तिक ॲप्स ब्लॉक केली आहेत"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"तुमची वैयक्तिक ॲप्स उद्या ब्लॉक केली जातील"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ऑफिस प्रोफाइल सुरू करा"</string> <string name="me" msgid="6207584824693813140">"मी"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"टॅबलेट पर्याय"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"दोन्ही व्हॉल्यूम की काही सेकंद धरून ठेवल्याने <xliff:g id="SERVICE">%1$s</xliff:g>, एक अॅक्सेसिबिलिटी वैशिष्ट्य सुरू होते. यामुळे तुमचे डिव्हाइस कसे काम करते हे पूर्णपणे बदलते.\n\nतुम्ही हा शॉर्टकट सेटिंग्ज > अॅक्सेसिबिलिटी मध्ये बदलू शकता."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"सुरू करा"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"सुरू करू नका"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"सुरू आहे"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"बंद आहे"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> ला तुमचे डिव्हाइसच संपूर्णपणे नियंत्रित करायची अनुमती द्यायची का?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"तुम्ही <xliff:g id="SERVICE">%1$s</xliff:g> सुरू केल्यास, तुमचे डिव्हाइस डेटा एंक्रिप्शनमध्ये सुधारणा करण्यासाठी स्क्रीन लॉक वापरणार नाही."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"जी ॲप्स तुमच्या ॲक्सेसिबिलिटी गरजा पूर्ण करतात अशा ॲप्ससाठी संपूर्ण नियंत्रण योग्य आहे. पण ते सर्व ॲप्सना लागू होईल असे नाही."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"आपल्या प्रशासकाने अपडेट केले"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"आपल्या प्रशासकाने हटवले"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ओके"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"बॅटरी सेव्हर हे बॅटरीचे आयुष्य वाढवते:\n·गडद थीम सुरू करते \n· बॅकग्राउंड अॅक्टिव्हिटी, काही व्हिज्युअल इफेक्ट आणि \"Ok Google\" यासारखी वैशिष्ट्ये बंद किंवा मर्यादित करते.\n\n"<annotation id="url">"अधिक जाणून घ्या"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"बॅटरीचे आयुष्य वाढवण्यासाठी बॅटरी सेव्हर:\n·गडद थीम सुरू करते \n· बॅकग्राउंड अॅक्टिव्हिटी, काही व्हिज्युअल इफेक्ट आणि \"Ok Google\" यासारखी वैशिष्ट्ये बंद किंवा मर्यादित करते."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"डेटाचा वापर कमी करण्यात मदत करण्यासाठी काही अॅप्सना बॅकग्राउंडमध्ये डेटा पाठवण्यास किंवा मिळवण्यास डेटा सर्व्हर प्रतिबंध करतो. तुम्ही सध्या वापरत असलेले अॅप डेटा अॅक्सेस करू शकते, पण तसे खूप कमी वेळा होते. याचाच अर्थ असा की, तुम्ही इमेजवर टॅप करेपर्यंत त्या डिस्प्ले होणार नाहीत असे होऊ शकते."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा सेव्हर चालू करायचे?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"चालू करा"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index db9f4f22c1ee..2364c0aaa56d 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Peranti anda akan dipadam"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Apl pentadbir tidak dapat digunakan. Peranti anda akan dipadamkan sekarang.\n\nJika anda ingin mengemukakan soalan, hubungi pentadbir organisasi anda."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Pencetakan dilumpuhkan oleh <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Nyahsekat apl peribadi anda"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apl akan disekat esok"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Pentadbir IT anda tidak membenarkan profil kerja anda dijeda melebihi <xliff:g id="DAYS">%1$d</xliff:g> hari"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Hidupkan profil kerja anda"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Apl peribadi anda disekat sehingga anda menghidupkan profil kerja"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Apl peribadi anda akan disekat esok"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Hidupkan profil kerja"</string> <string name="me" msgid="6207584824693813140">"Saya"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Pilihan tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Tindakan menahan kedua-dua kekunci kelantangan selama beberapa saat akan menghidupkan <xliff:g id="SERVICE">%1$s</xliff:g>, iaitu satu ciri kebolehaksesan. Ini mungkin mengubah cara peranti anda berfungsi.\n\nAnda boleh menukar pintasan ini kepada ciri lain dalam Tetapan > Kebolehaksesan."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Hidupkan"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Jangan hidupkan"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"HIDUP"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"MATI"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Benarkan <xliff:g id="SERVICE">%1$s</xliff:g> mempunyai kawalan penuh atas peranti anda?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Jika anda menghidupkan <xliff:g id="SERVICE">%1$s</xliff:g>, peranti anda tidak akan menggunakan kunci skrin anda untuk meningkatkan penyulitan data."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kawalan penuh sesuai untuk apl yang membantu anda dengan keperluan kebolehaksesan tetapi bukan untuk kebanyakan apl."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Dikemas kini oleh pentadbir anda"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Dipadamkan oleh pentadbir anda"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n·Menghidupkan Tema gelap\n·Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri lain seperti “Hey Google”\n\n"<annotation id="url">"Ketahui lebih lanjut"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Untuk melanjutkan hayat bateri, Penjimat Bateri:\n·Menghidupkan Tema gelap\n·Mematikan atau mengehadkan aktiviti latar belakang, sesetengah kesan visual dan ciri lain seperti “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangkan penggunaan data, Penjimat Data menghalang sesetengah apl daripada menghantar atau menerima data di latar. Apl yang sedang digunakan boleh mengakses data tetapi mungkin tidak secara kerap. Perkara ini mungkin bermaksud bahawa imej tidak dipaparkan sehingga anda mengetik pada imej itu, contohnya."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Hidupkan Penjimat Data?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Hidupkan"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index c1f2b0231920..17b7c7c5f121 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"သင့်ကိရိယာအား ပယ်ဖျက်လိမ့်မည်"</string> <string name="factory_reset_message" msgid="2657049595153992213">"စီမံခန့်ခွဲမှု အက်ပ်ကို သုံး၍မရပါ။ သင်၏ စက်ပစ္စည်းအတွင်းရှိ အရာများကို ဖျက်လိုက်ပါမည်\n\nမေးစရာများရှိပါက သင့်အဖွဲ့အစည်း၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> က ပုံနှိပ်ထုတ်ယူခြင်းကို ပိတ်ထားသည်။"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ကိုယ်ပိုင်အက်ပ်ပြန်ဖွင့်ခြင်း"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"အက်များကို မနက်ဖြန်ပိတ်မည်"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="DAYS">%1$d</xliff:g> ရက်ထက်ပိုပြီး ခဏရပ်ထားရန် သင်၏ IT စီမံခန့်ခွဲသူက ခွင့်မပြုပါ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"သင့်အလုပ်ပရိုဖိုင် ဖွင့်ခြင်း"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"သင့်အလုပ်ပရိုဖိုင် ဖွင့်သည်အထိ ကိုယ်ပိုင်အက်ပ်များကို ပိတ်ထားသည်"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"သင့်ကိုယ်ပိုင်အက်ပ်များကို မနက်ဖြန် ပိတ်လိုက်ပါမည်"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"အလုပ်ပရိုဖိုင် ဖွင့်ရန်"</string> <string name="me" msgid="6207584824693813140">"ကျွန်ုပ်"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tabletဆိုင်ရာရွေးချယ်မှုများ"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"အသံခလုတ်နှစ်ခုလုံးကို စက္ကန့်အနည်းငယ် ဖိထားခြင်းက အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုဖြစ်သော <xliff:g id="SERVICE">%1$s</xliff:g> ကို ဖွင့်ပေးသည်။ ဤလုပ်ဆောင်ချက်က သင့်စက်အလုပ်လုပ်ပုံကို ပြောင်းလဲနိုင်သည်။\n\nဤဖြတ်လမ်းလင့်ခ်ကို \'ဆက်တင်များ > အများသုံးစွဲနိုင်မှု\' တွင် နောက်ဝန်ဆောင်မှုတစ်ခုသို့ ပြောင်းနိုင်သည်။"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ဖွင့်ရန်"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"မဖွင့်ပါနှင့်"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ဖွင့်ထားသည်"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ပိတ်ထားသည်"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> ကို သင့်စက်အား အပြည့်အဝထိန်းချုပ်ခွင့် ပေးလိုပါသလား။"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> ဖွင့်လိုက်ပါက သင်၏စက်သည် ဒေတာအသွင်ဝှက်ခြင်း ပိုကောင်းမွန်စေရန် သင့်ဖန်သားပြင်လော့ခ်ကို သုံးမည်မဟုတ်ပါ။"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"အများသုံးစွဲနိုင်မှု လိုအပ်ချက်များအတွက် အထောက်အကူပြုသည့် အက်ပ်များကို အပြည့်အဝထိန်းချုပ်ခြင်းသည် သင့်လျော်သော်လည်း အက်ပ်အများစုအတွက် မသင့်လျော်ပါ။"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"သင်၏ စီမံခန့်ခွဲသူက အပ်ဒိတ်လုပ်ထားသည်"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"သင်၏ စီမံခန့်ခွဲသူက ဖျက်လိုက်ပါပြီ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က \n·မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည် \n·နောက်ခံလုပ်ဆောင်ချက် အချို့ အမြင်အာရုံဆိုင်ရာ အထူးပြုလုပ်ချက်များနှင့် “Hey Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်ခြင်း သို့မဟုတ် ကန့်သတ်ခြင်းတို့ ပြုလုပ်သည်။\n\n"<annotation id="url">"ပိုမိုလေ့လာရန်"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ဘက်ထရီသက်တမ်း ပိုရှည်စေရန် \'ဘက်ထရီအားထိန်း\' က- \n·မှောင်သည့် အပြင်အဆင်ကို ဖွင့်သည်\n·နောက်ခံလုပ်ဆောင်ချက်၊ ပြသမှုဆိုင်ရာ အထူးပြုလုပ်ချက်အချို့နှင့် “Hey Google” ကဲ့သို့ အခြား ဝန်ဆောင်မှုများကို ပိတ်သည် သို့မဟုတ် ကန့်သတ်သည်။"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ဒေတာအသုံးလျှော့ချနိုင်ရန်အတွက် အက်ပ်များကို နောက်ခံတွင် ဒေတာပို့ခြင်းနှင့် လက်ခံခြင်းမပြုရန် \'ဒေတာချွေတာမှု\' စနစ်က တားဆီးထားပါသည်။ ယခုအက်ပ်ဖြင့် ဒေတာအသုံးပြုနိုင်သော်လည်း အကြိမ်လျှော့၍သုံးရပါမည်။ ဥပမာ၊ သင်က မတို့မချင်း ပုံများပေါ်လာမည် မဟုတ်ပါ။"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ဒေတာချွေတာမှုစနစ် ဖွင့်မလား။"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ဖွင့်ပါ"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index a6ce0e1f84c2..5b7787f0f9db 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Enheten blir slettet"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administratorappen kan ikke brukes. Enheten din blir nå tømt.\n\nTa kontakt med administratoren for organisasjonen din hvis du har spørsmål."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> har slått av utskrift."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Ikke blokkér personlige apper"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apper blir blokkert i morgen"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT-administratoren din tillater ikke at jobbprofilen din blir satt på pause i mer enn <xliff:g id="DAYS">%1$d</xliff:g> dager"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Slå på jobbprofilen din"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"De personlige appene dine er blokkert til du slår på jobbprofilen din"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"De personlige appene dine blokkeres i morgen"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Slå på jobbprofilen"</string> <string name="me" msgid="6207584824693813140">"Meg"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Innstillinger for nettbrettet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Hvis du holder inne begge volumtastene i noen sekunder, slår du på <xliff:g id="SERVICE">%1$s</xliff:g>, en tilgjengelighetsfunksjon. Dette kan endre hvordan enheten din fungerer.\n\nDu kan endre denne snarveien til en annen funksjon i Innstillinger > Tilgjengelighet."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Slå på"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ikke slå på"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"PÅ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"AV"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vil du gi <xliff:g id="SERVICE">%1$s</xliff:g> full kontroll over enheten din?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Hvis du slår på <xliff:g id="SERVICE">%1$s</xliff:g>, bruker ikke enheten skjermlåsen til å forbedre datakryptering."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full kontroll er passende for apper som hjelper deg med tilgjengelighetsbehov, men ikke for de fleste apper."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Oppdatert av administratoren din"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet av administratoren din"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"For å forlenge batterilevetiden slår Batterisparing\n·på mørkt tema\n·av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»\n\n"<annotation id="url">"Finn ut mer"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"For å forlenge batterilevetiden slår Batterisparing\n·på mørkt tema\n·av eller begrenser bakgrunnsaktivitet, enkelte visuelle effekter og andre funksjoner, for eksempel «Hey Google»"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Datasparing hindrer noen apper fra å sende og motta data i bakgrunnen, for å redusere dataforbruket. Aktive apper kan bruke data, men kanskje ikke så mye som ellers – for eksempel vises ikke bilder før du trykker på dem."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vil du slå på Datasparing?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Slå på"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index d58cbf0121a4..c592c75f5fc5 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"तपाईंको यन्त्र मेटिनेछ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"प्रशासकको एप प्रयोग गर्न मिल्दैन। तपाईंको यन्त्रको डेटा अब मेटाइने छ।\n\nतपाईंसँग प्रश्नहरू भएका खण्डमा आफ्नो संगठनका प्रशासकसँग सम्पर्क गर्नुहोस्।"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ले छाप्ने कार्यलाई असक्षम पार्यो।"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"आफ्ना व्यक्तिगत एपमाथिको रोक हटाउनु"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"भोलि एपहरूलाई रोक लगाइने छ"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"तपाईंका IT एडमिनले तपाईंको कार्यसम्बन्धी प्रोफाइल <xliff:g id="DAYS">%1$d</xliff:g> दिनभन्दा बढी पज गर्ने अनुमति दिनुभएको छैन"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"आफ्नो कार्य प्रोफाइल सक्रिय गर्नुहोस्"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"तपाईंले आफ्नो कार्य प्रोफाइल सक्रिय नगरुन्जेल तपाईंका व्यक्तिगत अनुप्रयोगहरूलाई रोक लगाइन्छ"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"तपाईंका व्यक्तिगत अनुप्रयोगहरूलाई भोलि रोक लगाइने छ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"कार्यसम्बन्धी प्रोफाइल सक्रिय गर्नुहोस्"</string> <string name="me" msgid="6207584824693813140">"मलाई"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ट्याब्लेट विकल्पहरू"</string> @@ -1637,10 +1637,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"केही सेकेन्डसम्म दुवै भोल्युम बटन थिचिराख्नुले <xliff:g id="SERVICE">%1$s</xliff:g> नामक पहुँचसम्बन्धी सुविधा सक्रिय गर्छ। यसले तपाईंको यन्त्रले काम गर्ने तरिका परिवर्तन गर्न सक्छ।\n\nतपाईं सेटिङ > पहुँचमा गई यो सर्टकटमार्फत अर्को सुविधा खुल्ने बनाउन सक्नुहुन्छ।"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"सक्रिय गरियोस्"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"सक्रिय नगरियोस्"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"सक्रिय"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"निष्क्रिय"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> लाई तपाईंको यन्त्र पूर्ण रूपमा नियन्त्रण गर्न दिने हो?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"तपाईंले <xliff:g id="SERVICE">%1$s</xliff:g> सक्रिय गर्नुभयो भने तपाईंको यन्त्रले डेटा इन्क्रिप्ट गर्ने सुविधाको स्तरोन्नति गर्न तपाईंको स्क्रिन लक सुविधाको प्रयोग गर्ने छैन।"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"तपाईंलाई पहुँच राख्न आवश्यक पर्ने कुरामा सहयोग गर्ने अनुप्रयोगहरूमाथि पूर्ण नियन्त्रण गर्नु उपयुक्त हुन्छ तर अधिकांश अनुप्रयोगहरूका हकमा यस्तो नियन्त्रण उपयुक्त हुँदैन।"</string> @@ -1802,8 +1800,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"तपाईंका प्रशासकले अद्यावधिक गर्नुभएको"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"तपाईंका प्रशासकले मेट्नुभएको"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ठिक छ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ब्याट्रीको आयु लामो बनाउन ब्याट्री सेभरले:\n·अँध्यारो थिम सक्रिय गर्छ\n·पृष्ठभूमिका गतिविधि, कतिपय भिजुअल प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू निष्क्रिय वा सीमित पार्छ।\n\n"<annotation id="url">"थप जान्नुहोस्"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ब्याट्रीको आयु बढाउन ब्याट्री सेभरले:\n·अँध्यारो थिम सक्रिय गर्छ\n·पृष्ठभूमिका गतिविधि, कतिपय भिजुअल प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू निष्क्रिय वा सीमित पार्छ।"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"डेटाको प्रयोगलाई कम गर्न डेटा सर्भरले केही अनुप्रयोगलाई पृष्ठभूमिमा डेटा पठाउन वा प्राप्त गर्न दिँदैन। तपाईंले हाल प्रयोग गरिरहनुभएको अनु्प्रयोगले डेटा चलाउन सक्छ, तर पहिला भन्दा कम अन्तरालमा मात्र। उदाहरणका लागि, तपाईले छविहरूमा ट्याप नगरेसम्म ती छविहरू देखिँदैनन्।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा सेभर सक्रिय गर्ने हो?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"सक्रिय गर्नुहोस्"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 684af964cd7f..f834adefe6b9 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Je apparaat wordt gewist"</string> <string name="factory_reset_message" msgid="2657049595153992213">"De beheer-app kan niet worden gebruikt. Je apparaat wordt nu gewist.\n\nNeem contact op met de beheerder van je organisatie als je vragen hebt."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Afdrukken uitgeschakeld door <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Blokkering van je persoonlijke apps opheffen"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Apps worden morgen geblokkeerd"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Je IT-beheerder staat niet toe dat je werkprofiel meer dan <xliff:g id="DAYS">%1$d</xliff:g> dagen wordt onderbroken"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Schakel je werkprofiel in"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Je persoonlijke apps zijn geblokkeerd totdat je je werkprofiel inschakelt"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Je persoonlijke apps worden morgen geblokkeerd"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Werkprofiel inschakelen"</string> <string name="me" msgid="6207584824693813140">"Ik"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tabletopties"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Als je beide volumetoetsen een paar seconden ingedrukt houdt, wordt de toegankelijkheidsfunctie <xliff:g id="SERVICE">%1$s</xliff:g> ingeschakeld. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nJe kunt deze sneltoets op een andere functie instellen via Instellingen > Toegankelijkheid."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Inschakelen"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Niet inschakelen"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AAN"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"UIT"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Toestaan dat <xliff:g id="SERVICE">%1$s</xliff:g> volledige controle over je apparaat heeft?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Als je <xliff:g id="SERVICE">%1$s</xliff:g> inschakelt, maakt je apparaat geen gebruik van schermvergrendeling om de gegevensversleuteling te verbeteren."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Volledige controle is gepast voor apps die je helpen met toegankelijkheid, maar voor de meeste apps is het ongepast."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Geüpdatet door je beheerder"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Verwijderd door je beheerder"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n·Het donkere thema inschakelen\n·Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitschakelen of beperken\n\n"<annotation id="url">"Meer informatie"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n Het donkere thema aanzetten\n·Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens verzenden of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Databesparing aanzetten?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Inschakelen"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index f0417192c5e4..24b4e2e16538 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ଆପଣଙ୍କ ଡିଭାଇସ୍ ବର୍ତ୍ତମାନ ଲିଭାଯିବ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ଆଡମିନ୍ ଆପ୍ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ। ଆପଣଙ୍କ ଡିଭାଇସ୍ର ସମସ୍ତ ଡାଟାକୁ ବର୍ତ୍ତମାନ ଲିଭାଇଦିଆଯିବ। \n\nଯଦି ଆପଣଙ୍କର କୌଣସି ପ୍ରଶ୍ନ ରହିଥାଏ, ଆପଣଙ୍କ ସଂସ୍ଥାର ଆଡମିନ୍ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ଦ୍ଵାରା ପ୍ରିଣ୍ଟିଙ୍ଗ ଅକ୍ଷମ କରାଯାଇଛି"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ଆପ ଅନବ୍ଲକ କର"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ଆସନ୍ତାକାଲି ଆପ୍ସ ବ୍ଲକ୍ ହୋଇଯିବ"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ଆପଣଙ୍କ IT ଆଡମିନ୍ ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲକୁ <xliff:g id="DAYS">%1$d</xliff:g>ରୁ ଅଧିକ ଦିନ ପାଇଁ ବିରତ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତି ନାହିଁ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଚାଲୁ କରନ୍ତୁ"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"ଆପଣ ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଚାଲୁ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଆପଣଙ୍କର ବ୍ୟକ୍ତିଗତ ଆପ୍ସ ବ୍ଲକ୍ କରାଯାଇଛି"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"ଆସନ୍ତାକାଲି ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ଆପ୍ସକୁ ବ୍ଲକ୍ କରାଯିବ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଚାଲୁ କରନ୍ତୁ"</string> <string name="me" msgid="6207584824693813140">"ମୁଁ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ଟାବଲେଟ୍ର ବିକଳ୍ପ"</string> @@ -1796,8 +1796,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ଆପଣଙ୍କ ଆଡମିନ୍ ଅପଡେଟ୍ କରିଛନ୍ତି"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ଆପଣଙ୍କ ଆଡମିନ୍ ଡିଲିଟ୍ କରିଛନ୍ତି"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ଠିକ୍ ଅଛି"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ବ୍ୟାଟେରୀ ଜୀବନ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n·ଗାଢା ଥିମ୍ ଚାଲୁ କରେ\n·ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପକୁ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବଗୁଡ଼ିକୁ ଏବଂ “ହେ Google” ପରି ଅନ୍ୟ ଫିଚର୍କୁ ବନ୍ଦ ରଖେ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ\n\n"<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ବ୍ୟାଟେରୀ ଜୀବନ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n·ଗାଢା ଥିମ୍ ଚାଲୁ କରେ\n·ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପକୁ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବଗୁଡ଼ିକୁ ଏବଂ “ହେ Google” ପରି ଅନ୍ୟ ଫିଚର୍କୁ ବନ୍ଦ ରଖେ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ଡାଟା ବ୍ୟବହାର କମ୍ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପ୍ରାପ୍ତ କରିବାକୁ କିଛି ଆପ୍କୁ ବାରଣ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପ୍, ଡାଟା ଆକ୍ସେସ୍ କରିପାରେ, କିନ୍ତୁ ଏହା କମ୍ ଥର କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ ଯେମିତି ଆପଣ ଟାପ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଇମେଜ୍ ଡିସପ୍ଲେ ହୁଏ ନାହିଁ।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ଡାଟା ସେଭର୍ ଚାଲୁ କରିବେ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ଅନ୍ କରନ୍ତୁ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index bdd9b0a9e3c1..893719eafd50 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਮਿਟਾਇਆ ਜਾਏਗਾ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਵਰਤੀ ਨਹੀਂ ਜਾ ਸਕਦੀ। ਹੁਣ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਡਾਟਾ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।\n\nਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਸਵਾਲ ਹਨ, ਤਾਂ ਆਪਣੀ ਸੰਸਥਾ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਿੰਟ ਕਰਨਾ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ਆਪਣੀਆਂ ਨਿੱਜੀ ਐਪਾਂ ਅਣਬਲਾਕ ਕਰੋ"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ਐਪਾਂ ਕੱਲ੍ਹ ਬਲਾਕ ਹੋ ਜਾਣਗੀਆਂ"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ਤੁਹਾਡਾ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ <xliff:g id="DAYS">%1$d</xliff:g> ਦਿਨਾਂ ਤੋਂ ਵੱਧ ਸਮੇਂ ਤੱਕ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦਾ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ਆਪਣਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਚਾਲੂ ਕਰੋ"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਚਾਲੂ ਨਹੀਂ ਕਰਦੇ ਤੁਹਾਡੀਆਂ ਨਿੱਜੀ ਐਪਾਂ ਬਲਾਕ ਰਹਿੰਦੀਆਂ ਹਨ"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"ਕੱਲ੍ਹ ਨੂੰ ਤੁਹਾਡੀਆਂ ਨਿੱਜੀ ਐਪਾਂ ਬਲਾਕ ਕਰ ਦਿੱਤੀਆਂ ਜਾਣਗੀਆਂ"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਚਾਲੂ ਕਰੋ"</string> <string name="me" msgid="6207584824693813140">"ਮੈਂ"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ਟੈਬਲੈੱਟ ਵਿਕਲਪ"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"ਕੁਝ ਸਕਿੰਟਾਂ ਲਈ ਦੋਵੇਂ ਅਵਾਜ਼ੀ ਕੁੰਜੀਆਂ ਨੂੰ ਦਬਾਈ ਰੱਖਣਾ <xliff:g id="SERVICE">%1$s</xliff:g>, ਇੱਕ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਚਾਲੂ ਕਰ ਦਿੰਦਾ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੇ ਕੰਮ ਕਰਨ ਦੇ ਤਰੀਕੇ ਨੂੰ ਬਦਲ ਸਕਦਾ ਹੈ।\n\nਸੈਟਿੰਗਾਂ ਅਤੇ ਪਹੁੰਚਯੋਗਤਾ ਵਿੱਚ ਤੁਸੀਂ ਇਸ ਸ਼ਾਰਟਕੱਟ ਨੂੰ ਕਿਸੇ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ।"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ਚਾਲੂ ਕਰੋ"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ਚਾਲੂ ਨਾ ਕਰੋ"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ਚਾਲੂ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ਬੰਦ"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ਕੀ <xliff:g id="SERVICE">%1$s</xliff:g> ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪੂਰਾ ਕੰਟਰੋਲ ਦੇਣਾ ਹੈ?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"ਜੇਕਰ ਤੁਸੀਂ <xliff:g id="SERVICE">%1$s</xliff:g> ਚਾਲੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਸ਼ਨ ਦਾ ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰੇਗਾ।"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"ਪੂਰਾ ਕੰਟਰੋਲ ਉਹਨਾਂ ਐਪਾਂ ਲਈ ਢੁਕਵਾਂ ਹੈ ਜੋ ਪਹੁੰਚਯੋਗਤਾ ਸੰਬੰਧੀ ਲੋੜਾਂ ਵਿੱਚ ਤੁਹਾਡੀ ਮਦਦ ਕਰਦੀਆਂ ਹਨ, ਪਰ ਜ਼ਿਆਦਾਤਰ ਐਪਾਂ ਲਈ ਢੁਕਵਾਂ ਨਹੀਂ ਹੁੰਦਾ।"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ਠੀਕ ਹੈ"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ:\n ਗੂੜ੍ਹਾ ਥੀਮ ਚਾਲੂ ਕਰਦਾ ਹੈ\n ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਭਾਵਾਂ, ਅਤੇ \"Ok Google\" ਵਰਗੀਆਂ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ ਜਾਂ ਉਹਨਾਂ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ\n\n"<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ:\n ਗੂੜ੍ਹਾ ਥੀਮ ਚਾਲੂ ਕਰਦਾ ਹੈ\n ਬੈਕਗ੍ਰਾਊਂਡ ਸਰਗਰਮੀ, ਕੁਝ ਦ੍ਰਿਸ਼ ਪ੍ਰਭਾਵਾਂ, ਅਤੇ \"Ok Google\" ਵਰਗੀਆਂ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ ਜਾਂ ਉਹਨਾਂ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦਾ ਹੈ"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ \'ਤੇ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ਕੀ ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ਚਾਲੂ ਕਰੋ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 15ec13371059..eee3dc6760f6 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Twoje urządzenie zostanie wyczyszczone"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Nie można użyć aplikacji administratora. Dane z urządzenia zostaną wykasowane.\n\nJeśli masz pytania, skontaktuj się z administratorem organizacji."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Drukowanie wyłączone przez: <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Odblokuj aplikacje osobiste"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Blokada aplikacji – jutro"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Administrator IT nie pozwala na wstrzymanie profilu do pracy na dłużej niż <xliff:g id="DAYS">%1$d</xliff:g> dni"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Włącz profil do pracy"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Zablokowano aplikacje osobiste do czasu włączenia profilu do pracy"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Twoje aplikacje osobiste zostaną zablokowane jutro"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Włącz profil do pracy"</string> <string name="me" msgid="6207584824693813140">"Ja"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcje tabletu"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Przytrzymanie obu klawiszy głośności przez kilka sekund włącza usługę <xliff:g id="SERVICE">%1$s</xliff:g>, stanowiącą ułatwienie dostępu. Może to zmienić sposób działania urządzenia.\n\nAby zmienić ten skrót i wskazać inną funkcję, kliknij Ustawienia > Ułatwienia dostępu."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Włącz"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nie włączaj"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"WŁ."</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"WYŁ."</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Pozwolić usłudze <xliff:g id="SERVICE">%1$s</xliff:g> na pełną kontrolę nad urządzeniem?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Jeśli włączysz usługę <xliff:g id="SERVICE">%1$s</xliff:g>, Twoje urządzenie nie będzie korzystać z blokady ekranu, by usprawnić szyfrowanie danych."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pełna kontrola jest odpowiednia dla aplikacji, które pomagają Ci radzić sobie z niepełnosprawnością, ale nie należy jej przyznawać wszystkim aplikacjom."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Zaktualizowany przez administratora"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Usunięty przez administratora"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Aby wydłużyć czas pracy na baterii, Oszczędzanie baterii:\n włącza tryb ciemny, \nwyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”.\n\n"<annotation id="url">"Więcej informacji"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Aby wydłużyć czas pracy na baterii, Oszczędzanie baterii:\n· włącza tryb ciemny,\n· wyłącza lub ogranicza aktywność w tle, niektóre efekty wizualne oraz inne funkcje, np. „OK Google”."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Oszczędzanie danych uniemożliwia niektórym aplikacjom wysyłanie i odbieranie danych w tle, zmniejszając w ten sposób ich użycie. Aplikacja, z której w tej chwili korzystasz, może uzyskiwać dostęp do danych, ale rzadziej. Może to powodować, że obrazy będą się wyświetlać dopiero po kliknięciu."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Włączyć Oszczędzanie danych?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Włącz"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index ae2b5216f742..8c37b5e30d4f 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Seu dispositivo será limpo"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível usar o aplicativo para administrador. Seu dispositivo passará por uma limpeza agora.\n\nEm caso de dúvidas, entre em contato com o administrador da sua organização."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloquear apps pessoais"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Os apps serão bloq. amanhã"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Seu administrador de TI não permite que o perfil de trabalho seja pausado por mais de <xliff:g id="DAYS">%1$d</xliff:g> dias"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ativar perfil de trabalho"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Seus apps pessoais ficarão bloqueados até você ativar o perfil de trabalho"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Seus apps pessoais serão bloqueados amanhã"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ativar perfil de trabalho"</string> <string name="me" msgid="6207584824693813140">"Eu"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opções do tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Manter as duas teclas de volume pressionadas por alguns segundos ativa o serviço <xliff:g id="SERVICE">%1$s</xliff:g>, um recurso de acessibilidade. Isso pode mudar a forma como seu dispositivo funciona.\n\nÉ possível trocar o uso desse atalho para outro recurso em \"Config. > Acessibilidade\"."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ativar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Não ativar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ATIVADO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DESATIVADO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Permitir que o <xliff:g id="SERVICE">%1$s</xliff:g> tenha controle total do seu dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Se o <xliff:g id="SERVICE">%1$s</xliff:g> for ativado, o dispositivo não usará o bloqueio de tela para melhorar a criptografia de dados."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"O controle total é adequado para apps que ajudam você com as necessidades de acessibilidade, mas não para a maioria dos apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para aumentar a duração da bateria, a \"Economia de bateria: \n ativa o tema escuro;\n·desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para aumentar a duração da carga, a \"Economia de bateria\": \n·ativa o tema escuro;\n·desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar Economia de dados?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> @@ -2055,7 +2055,7 @@ <skip /> <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string> <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa em grupo"</string> - <string name="unread_convo_overflow" msgid="920517615597353833">"+ de <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> + <string name="unread_convo_overflow" msgid="920517615597353833">"+ <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> <string name="resolver_personal_tab" msgid="2051260504014442073">"Pessoal"</string> <string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string> <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Visualização pessoal"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 0ae75ec4cd5e..a1c8f6be285d 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"O seu dispositivo será apagado"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível utilizar a aplicação de administrador. O seu dispositivo será agora apagado.\n\nSe tiver questões, contacte o administrador da entidade."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloqueie as apps pessoais"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"As apps são bloqueadas amanhã"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"O seu administrador de TI não permite que o seu perfil de trabalho seja colocado em pausa durante mais de <xliff:g id="DAYS">%1$d</xliff:g> dias."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ative o perfil de trabalho"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"As suas apps pessoais estão bloqueadas até ativar o seu perfil de trabalho."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"As suas apps pessoais serão bloqueadas amanhã."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ativar perfil de trabalho"</string> <string name="me" msgid="6207584824693813140">"Eu"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opções do tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Manter premidas ambas as teclas de volume durante alguns segundos ativa o serviço <xliff:g id="SERVICE">%1$s</xliff:g>, uma funcionalidade de acessibilidade. Esta pode alterar a forma como o seu dispositivo funciona.\n\nPode alterar este atalho para outra funcionalidade em Definições > Acessibilidade."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ativar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Não ativar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ATIVADO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DESATIVADO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Permitir que o serviço <xliff:g id="SERVICE">%1$s</xliff:g> tenha controlo total sobre o seu dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Se ativar o serviço <xliff:g id="SERVICE">%1$s</xliff:g>, o dispositivo não utilizará o bloqueio de ecrã para otimizar a encriptação de dados."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"O controlo total é adequado para aplicações que ajudam nas necessidades de acessibilidade, mas não para a maioria das aplicações."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu gestor"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado pelo seu gestor"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n·Ativa o tema escuro.\n·Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\".\n\n"<annotation id="url">"Saber mais"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para prolongar a autonomia da bateria, a Poupança de bateria:\n·Ativa o tema escuro.\n·Desativa ou restringe a atividade em segundo plano, alguns efeitos visuais e outras funcionalidades como \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir a utilização de dados, a Poupança de dados impede que algumas aplicações enviem ou recebam dados em segundo plano. Uma determinada aplicação que esteja a utilizar atualmente pode aceder aos dados, mas é possível que o faça com menos frequência. Isto pode significar, por exemplo, que as imagens não são apresentadas até que toque nas mesmas."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Pretende ativar a Poupança de dados?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index ae2b5216f742..8c37b5e30d4f 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Seu dispositivo será limpo"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Não é possível usar o aplicativo para administrador. Seu dispositivo passará por uma limpeza agora.\n\nEm caso de dúvidas, entre em contato com o administrador da sua organização."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Impressão desativada por <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Desbloquear apps pessoais"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Os apps serão bloq. amanhã"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Seu administrador de TI não permite que o perfil de trabalho seja pausado por mais de <xliff:g id="DAYS">%1$d</xliff:g> dias"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ativar perfil de trabalho"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Seus apps pessoais ficarão bloqueados até você ativar o perfil de trabalho"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Seus apps pessoais serão bloqueados amanhã"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ativar perfil de trabalho"</string> <string name="me" msgid="6207584824693813140">"Eu"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opções do tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Manter as duas teclas de volume pressionadas por alguns segundos ativa o serviço <xliff:g id="SERVICE">%1$s</xliff:g>, um recurso de acessibilidade. Isso pode mudar a forma como seu dispositivo funciona.\n\nÉ possível trocar o uso desse atalho para outro recurso em \"Config. > Acessibilidade\"."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Ativar"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Não ativar"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ATIVADO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DESATIVADO"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Permitir que o <xliff:g id="SERVICE">%1$s</xliff:g> tenha controle total do seu dispositivo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Se o <xliff:g id="SERVICE">%1$s</xliff:g> for ativado, o dispositivo não usará o bloqueio de tela para melhorar a criptografia de dados."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"O controle total é adequado para apps que ajudam você com as necessidades de acessibilidade, mas não para a maioria dos apps."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para aumentar a duração da bateria, a \"Economia de bateria: \n ativa o tema escuro;\n·desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\".\n\n"<annotation id="url">"Saiba mais"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para aumentar a duração da carga, a \"Economia de bateria\": \n·ativa o tema escuro;\n·desativa ou restringe atividades em segundo plano, alguns efeitos visuais e outros recursos, como o \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode fazer com que imagens não sejam exibidas até que você toque nelas."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Ativar Economia de dados?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Ativar"</string> @@ -2055,7 +2055,7 @@ <skip /> <string name="conversation_title_fallback_one_to_one" msgid="1980753619726908614">"Conversa"</string> <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Conversa em grupo"</string> - <string name="unread_convo_overflow" msgid="920517615597353833">"+ de <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> + <string name="unread_convo_overflow" msgid="920517615597353833">"+ <xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>"</string> <string name="resolver_personal_tab" msgid="2051260504014442073">"Pessoal"</string> <string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string> <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Visualização pessoal"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 7455e9eeba21..0f95eccfa572 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Datele de pe dispozitiv vor fi șterse"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Aplicația de administrare nu poate fi utilizată. Dispozitivul va fi șters.\n\nDacă aveți întrebări, contactați administratorul organizației dvs."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printare dezactivată de <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Deblocați aplicațiile personale"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplicațiile vor fi blocate mâine"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Administratorul IT nu permite ca profilul de serviciu să fie întrerupt mai mult de <xliff:g id="DAYS">%1$d</xliff:g> zile"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Activați profilul de serviciu"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Aplicațiile personale sunt blocate până când activați profilul de serviciu"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Aplicațiile personale vor fi blocate mâine"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Activați profilul de serviciu"</string> <string name="me" msgid="6207584824693813140">"Eu"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opțiuni tablet PC"</string> @@ -1653,10 +1653,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Dacă apăsați ambele taste de volum câteva secunde, activați funcția de accesibilitate <xliff:g id="SERVICE">%1$s</xliff:g>. Acest lucru poate schimba funcționarea dispozitivului.\n\nPuteți alege altă funcție pentru această comandă în Setări > Accesibilitate."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Activați"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nu activați"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ACTIVAT"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DEZACTIVAT"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Permiteți serviciului <xliff:g id="SERVICE">%1$s</xliff:g> să aibă control total asupra dispozitivului dvs.?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Dacă activați <xliff:g id="SERVICE">%1$s</xliff:g>, dispozitivul nu va folosi blocarea ecranului pentru a îmbunătăți criptarea datelor."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Controlul total este adecvat pentru aplicații care vă ajută cu accesibilitatea, însă nu pentru majoritatea aplicaților."</string> @@ -1819,8 +1817,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizat de administratorul dvs."</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Șters de administratorul dvs."</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Pentru a prelungi autonomia bateriei, Economisirea bateriei:\n·activează tema întunecată;\n·activează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”.\n\n"<annotation id="url">"Aflați mai multe"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Pentru a prelungi autonomia bateriei, Economisirea bateriei:\n·activează tema întunecată;\n·activează sau restricționează activitatea în fundal, unele efecte vizuale și alte funcții, cum ar fi „Ok Google”."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Pentru a contribui la reducerea utilizării de date, Economizorul de date împiedică unele aplicații să trimită sau să primească date în fundal. O aplicație pe care o folosiți poate accesa datele, însă mai rar. Aceasta poate însemna, de exemplu, că imaginile se afișează numai după ce le atingeți."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Activați Economizorul de date?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Activați"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index dd32364ecf04..c2e35eb4c033 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Все данные с устройства будут удалены"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Невозможно использовать приложение для администрирования. С устройства будут удалены все данные.\n\nЕсли у вас возникли вопросы, обратитесь к администратору."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Функция печати отключена приложением \"<xliff:g id="OWNER_APP">%s</xliff:g>\""</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Разблокируйте личные приложения"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Завтра приложения будут заблокированы"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Системный администратор запретил отключать рабочий профиль более чем на <xliff:g id="DAYS">%1$d</xliff:g> дн."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Включите рабочий профиль"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Личные приложения будут заблокированы, пока вы не включите рабочий профиль."</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Личные приложения будут заблокированы завтра."</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Включить рабочий профиль"</string> <string name="me" msgid="6207584824693813140">"Я"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Настройки планшетного ПК"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Чтобы включить функцию \"<xliff:g id="SERVICE">%1$s</xliff:g>\", нажмите обе кнопки регулировки громкости на несколько секунд. Обратите внимание, что в работе устройства могут произойти изменения.\n\nЧтобы назначить это сочетание клавиш другой функции, перейдите в настройки и выберите \"Специальные возможности\"."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Включить"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не включать"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"Включено"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"Выключено"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Предоставить сервису \"<xliff:g id="SERVICE">%1$s</xliff:g>\" полный контроль над устройством?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Если включить сервис \"<xliff:g id="SERVICE">%1$s</xliff:g>\", устройство не будет использовать блокировку экрана для защиты данных."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Полный контроль нужен приложениям для реализации специальных возможностей и не нужен большинству остальных."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Обновлено администратором"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Удалено администратором"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\nвключается тёмная тема;\nотключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\").\n\n"<annotation id="url">"Подробнее…"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Чтобы продлить время работы от батареи, в режиме энергосбережения:\nвключается тёмная тема;\nотключаются или ограничиваются фоновые процессы, некоторые визуальные эффекты и другие функции (например, распознавание команды \"Окей, Google\")."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"В режиме экономии трафика фоновая передача данных для некоторых приложений отключена. Приложение, которым вы пользуетесь, может получать и отправлять данные, но реже, чем обычно. Например, изображения могут не загружаться, пока вы не нажмете на них."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Включить экономию трафика?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Включить"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 7a912fcc8803..03ef434c4ed3 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ඔබගේ උපාංගය මකා දැමෙනු ඇත"</string> <string name="factory_reset_message" msgid="2657049595153992213">"පරිපාලක යෙදුම භාවිතා කළ නොහැකිය. ඔබේ උපාංගය දැන් මකා දමනු ඇත.\n\nඔබට ප්රශ්න තිබේ නම්, ඔබේ සංවිධානයේ පරිපාලකට අමතන්න."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> විසින් මුද්රණය කිරීම අබල කර ඇත."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"ඔබේ පෞද්ගලික යෙදුම් අනවහිර කර"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"හෙට යෙදුම් අවහිර කරනු ඇත"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ඔබේ IT පරිපාලක ඔබේ කාර්යාල පැතිකඩ දින <xliff:g id="DAYS">%1$d</xliff:g>කට වඩා විරාම කිරීමට ඉඩ නොදේ"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"ඔබේ කාර්යාල පැතිකඩ ඔන් කරන්න"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"ඔබ ඔබගේ කාර්යාල පැතිකඩ ක්රියාත්මක කරන තෙක් ඔබගේ පෞද්ගලික යෙදුම් අවහිර කර ඇත"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"ඔබේ පෞද්ගලික යෙදුම් හෙට අවහිර කරනු ඇත"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"කාර්යාල පැතිකඩ ක්රියාත්මක කරන්න"</string> <string name="me" msgid="6207584824693813140">"මම"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ටැබ්ලට විකල්ප"</string> @@ -1633,10 +1633,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"හඬ පරිමා යතුරු දෙකම තත්පර කීපයකට පහළට අල්ලාගෙන සිටීම ප්රවේශ්යතා විශේෂාංගයක් වන <xliff:g id="SERVICE">%1$s</xliff:g> ක්රියාත්මක කරයි. මෙය ඔබේ උපාංගය ක්රියා කරන ආකාරය වෙනස් කළ හැකිය.\n\nඔබට මෙම කෙටිමග සැකසීම් > ප්රවේශ්යතාව හි තවත් විශේෂාංගයකට වෙනස් කළ හැකිය."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ක්රියාත්මක කරන්න"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ක්රියාත්මක නොකරන්න"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"සක්රියයි"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"අක්රියයි"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> හට ඔබේ උපාංගයේ සම්පූර්ණ පාලනය තබා ගැනීමට ඉඩ දෙන්නද?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"ඔබ <xliff:g id="SERVICE">%1$s</xliff:g> ක්රියාත්මක කරන්නේ නම්, දත්ත සංකේතනය වැඩිදියුණු කිරීමට ඔබේ උපාංගය ඔබේ තිර අගුල භාවිත නොකරනු ඇත."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"පූර්ණ පාලනය ඔබට ප්රවේශ්යතා අවශ්යතා සමඟ උදවු කරන යෙදුම් සඳහා සුදුසු වන නමුත් බොහෝ යෙදුම් සඳහා සුදුසු නොවේ."</string> @@ -1798,8 +1796,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"ඔබගේ පරිපාලක මඟින් යාවත්කාලීන කර ඇත"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ඔබගේ පරිපාලක මඟින් මකා දමා ඇත"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"හරි"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n·අඳුරු තේමාව ක්රියාත්මක කරයි\n·පසුබිමේ ක්රියාකාරකම, සමහර දෘෂ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි\n\n"<annotation id="url">"තව දැන ගන්න"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"බැටරියේ ජීව කාලය දික් කිරීමට, බැටරි සුරැකුම:\n·අඳුරු තේමාව ක්රියාත්මක කරයි\n·පසුබිමේ ක්රියාකාරකම, සමහර දෘෂ්ය ප්රයෝග සහ “Hey Google” වැනි වෙනත් විශේෂාංග ක්රියාවිරහිත කරයි නැතහොත් අවහිර කරයි"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"දත්ත භාවිතය අඩු කිරීමට උදවු වීමට, දත්ත සුරැකුම සමහර යෙදුම් පසුබිමින් දත්ත යැවීම සහ ලබා ගැනීම වළක්වයි. ඔබ දැනට භාවිත කරන යෙදුමකට දත්ත වෙත පිවිසීමට හැකිය, නමුත් එසේ කරන්නේ කලාතුරකින් විය හැකිය. මෙයින් අදහස් වන්නේ, උදාහරණයක් ලෙස, එම රූප ඔබ ඒවාට තට්ටු කරන තෙක් සංදර්ශනය නොවන බවය."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"දත්ත සුරැකුම ක්රියාත්මක කරන්නද?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ක්රියාත්මක කරන්න"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 0c0e2f50a042..bee9e726f8fa 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -204,9 +204,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Vaše zariadenie bude vymazané"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Daná aplikácia na správu sa nedá použiť. Vaše zariadenie bude vymazané.\n\nV prípade otázok kontaktujte správcu organizácie."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Tlač zakázala aplikácia <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Odblokujte osobné aplikácie"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplikácie sa zajtra zablokujú"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Správca IT vám zakázal pozastaviť pracovný profil na viac ako <xliff:g id="DAYS">%1$d</xliff:g> d."</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Zapnúť pracovný profil"</string> <string name="me" msgid="6207584824693813140">"Ja"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabletu"</string> @@ -1675,10 +1678,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Pridržaním oboch klávesov hlasitosti na niekoľko sekúnd zapnete funkciu dostupnosti <xliff:g id="SERVICE">%1$s</xliff:g>. Môže sa tým zmeniť spôsob fungovania vášho zariadenia.\n\nTúto skratku môžete zmeniť na inú funkciu v časti Nastavenia > Dostupnosť."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Zapnúť"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Nezapínať"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ZAP."</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"VYP."</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Chcete povoliť službe <xliff:g id="SERVICE">%1$s</xliff:g> úplnú kontrolu nad zariadením?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ak zapnete službu <xliff:g id="SERVICE">%1$s</xliff:g>, vaše zariadenie nezvýši úroveň šifrovania údajov zámkou obrazovky."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Úplná kontrola je vhodná pre aplikácie, ktoré vám pomáhajú s dostupnosťou, ale nie pre väčšinu aplikácií."</string> @@ -1842,8 +1843,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizoval správca"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Odstránil správca"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Šetrič batérie predlžuje výdrž batérie:\n·zapnutím tmavého motívu;\n·vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad „Hey Google“.\n\n"<annotation id="url">"Ďalšie informácie"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Šetrič batérie predlžuje výdrž batérie:\n·zapnutím tmavého motívu;\n·vypnutím alebo obmedzením aktivity na pozadí, niektorých vizuálnych efektov a ďalších funkcií, ako napríklad „Hey Google“."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"S cieľom znížiť spotrebu dát bráni šetrič dát niektorým aplikáciám odosielať alebo prijímať dáta na pozadí. Aplikácia, ktorú práve používate, môže využívať dáta, ale možno to bude robiť menej často. Znamená to napríklad, že sa nezobrazia obrázky, kým na ne neklepnete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Chcete zapnúť šetrič dát?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Zapnúť"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index b37bece93e83..b22cb17fe1f5 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -204,9 +204,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Podatki v napravi bodo izbrisani"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Skrbniške aplikacije ni mogoče uporabljati. Podatki v napravi bodo izbrisani.\n\nČe imate vprašanja, se obrnite na skrbnika organizacije."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Tiskanje je onemogočil pravilnik <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Odblokirajte oseb. aplikacije"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Jutri bodo aplikac. blokirane"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Skrbnik za IT ne dovoli, da bi bil delovni profil začasno zaustavljen dlje kot <xliff:g id="DAYS">%1$d</xliff:g> dni"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Vklopi delovni profil"</string> <string name="me" msgid="6207584824693813140">"Jaz"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabličnega računalnika"</string> @@ -1675,10 +1678,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Če za nekaj sekund pridržite obe tipki za glasnost, boste vklopili storitev <xliff:g id="SERVICE">%1$s</xliff:g>, ki je funkcija za ljudi s posebnimi potrebami. To lahko spremeni način delovanja naprave.\n\nTo bližnjico lahko v meniju »Nastavitve« > »Funkcije za ljudi s posebnimi potrebami« spremenite, da bo uporabljena za drugo funkcijo."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Vklopi"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ne vklopi"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"VKLOPLJENO"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"IZKLOPLJ."</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Ali storitvi <xliff:g id="SERVICE">%1$s</xliff:g> dovolite popoln nadzor nad svojo napravo?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Če vklopite storitev <xliff:g id="SERVICE">%1$s</xliff:g>, vaša naprava ne bo uporabljala zaklepanja zaslona za izboljšanje šifriranja podatkov."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Popoln nadzor je ustrezen za aplikacije, ki vam pomagajo pri funkcijah za ljudi s posebnimi potrebami, vendar ne za večino aplikacij."</string> @@ -1842,8 +1843,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Posodobil skrbnik"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisal skrbnik"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"V redu"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Funkcija varčevanja z energijo baterije tako podaljša čas delovanja baterije:\n·Vklopi temno temo,\n·izklopi ali omeji izvajanje dejavnosti v ozadju, nekaterih vizualnih učinkov in drugih funkcij, kot je »Hey Google«.\n\n"<annotation id="url">"Več o tem"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Funkcija varčevanja z energijo baterije podaljša čas delovanja baterije tako:\n·vklopi temno temo,\n·izklopi ali omeji izvajanje dejavnosti v ozadju, nekaterih vizualnih učinkov in drugih funkcij, kot je »Hey Google«."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Zaradi zmanjševanja prenesene količine podatkov funkcija varčevanja s podatki nekaterim aplikacijam preprečuje, da bi v ozadju pošiljale ali prejemale podatke. Aplikacija, ki jo trenutno uporabljate, lahko prenaša podatke, vendar to morda počne manj pogosto. To na primer pomeni, da se slike ne prikažejo, dokler se jih ne dotaknete."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vklop varčevanja s podatki?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Vklop"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index f19d6e4bb065..10cb62da4215 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Pajisja do të spastrohet"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Aplikacioni i administratorit nuk mund të përdoret. Pajisja jote tani do të fshihet.\n\nNëse ke pyetje, kontakto me administratorin e organizatës."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Printimi është çaktivizuar nga <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Zhblloko aplikacionet e tua personale"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Aplikacionet do të bllokohen nesër"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Administratori yt i teknologjisë së informacionit nuk e lejon profilin tënd të punës të vendoset në pauzë për më shumë se <xliff:g id="DAYS">%1$d</xliff:g> ditë"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Aktivizo profilin e punës"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Aplikacionet e tua personale janë bllokuar derisa të aktivizosh profilin tënd të punës"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Aplikacionet e tua personale do të bllokohen nesër"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktivizo profilin e punës"</string> <string name="me" msgid="6207584824693813140">"Unë"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opsionet e tabletit"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Mbajtja shtypur e dy tasteve të volumit për pak sekonda aktivizon <xliff:g id="SERVICE">%1$s</xliff:g>, një veçori të qasshmërisë. Kjo mund të ndryshojë mënyrën se si funksionon pajisja jote.\n\nMund të ndryshosh këtë shkurtore te një veçori tjetër te Cilësimet > Qasshmëria."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktivizo"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Mos e aktivizo"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AKTIV"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"JOAKTIV"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Do të lejosh që <xliff:g id="SERVICE">%1$s</xliff:g> të ketë kontroll të plotë të pajisjes sate?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Nëse aktivizon <xliff:g id="SERVICE">%1$s</xliff:g>, pajisja nuk do të përdorë kyçjen e ekranit për të përmirësuar enkriptimin e të dhënave."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kontrolli i plotë është i përshtatshëm për aplikacionet që të ndihmojnë me nevojat e qasshmërisë, por jo për shumicën e aplikacioneve."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Përditësuar nga administratori"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Fshirë nga administratori"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Në rregull"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n·Aktivizon \"Temën e errët\"\n·Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”\n\n"<annotation id="url">"Mëso më shumë"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n·Aktivizon \"Temën e errët\"\n·Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Për të ndihmuar në reduktimin e përdorimit të të dhënave, \"Kursyesi i të dhënave\" pengon që disa aplikacione të dërgojnë apo të marrin të dhëna në sfond. Një aplikacion që po përdor aktualisht mund të ketë qasje te të dhënat, por këtë mund ta bëjë më rrallë. Kjo mund të nënkuptojë, për shembull, se imazhet nuk shfaqen kur troket mbi to."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Të aktivizohet \"Kursyesi i të dhënave\"?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivizo"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 1599cf57c755..67e1ff4fb148 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -202,9 +202,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Уређај ће бити обрисан"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Не можете да користите ову апликацију за администраторе. Уређај ће сада бити обрисан.\n\nАко имате питања, контактирајте администратора организације."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Штампање је онемогућила апликација <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Одблокирајте личне апликације"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Аплик. ће се блокирати сутра"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ИТ администратор вам не дозвољава да профил за Work паузирате више од <xliff:g id="DAYS">%1$d</xliff:g> дана"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Укључите профил за Work"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Личне апликације су блокиране док не укључите профил за Work"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Личне апликације ће бити блокиране сутра"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Укључи профил за Work"</string> <string name="me" msgid="6207584824693813140">"Ја"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опције за таблет"</string> @@ -1653,10 +1653,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ако задржите оба тастера за јачину звука пар секунди, укључује се <xliff:g id="SERVICE">%1$s</xliff:g>, функција приступачности. То може да промени начин рада уређаја.\n\nМожете да промените функцију на коју се односи ова пречица у одељку Подешавања > Приступачност."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Укључи"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не укључуј"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"УКЉУЧЕНО"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИСКЉУЧЕНО"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Желите ли да дозволите да услуга <xliff:g id="SERVICE">%1$s</xliff:g> има потпуну контролу над уређајем?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ако укључите услугу <xliff:g id="SERVICE">%1$s</xliff:g>, уређај неће користити закључавање екрана да би побољшао шифровање података."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Потпуна контрола је примерена за апликације које вам помажу код услуга приступачности, али не и за већину апликација."</string> @@ -1819,8 +1817,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Ажурирао је администратор"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Избрисао је администратор"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Потврди"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Ради дужег трајања батерије, уштеда батерије:\n·укључује тамну тему\n·искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример, „Ок Google“\n\n"<annotation id="url">"Сазнајте више"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Ради дужег трајања батерије, уштеда батерије:\n·укључује тамну тему\n·искључује или ограничава активности у позадини, неке визуелне ефекте и друге функције, на пример, „Ок Google“"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Да би се смањила потрошња података, Уштеда података спречава неке апликације да шаљу или примају податке у позадини. Апликација коју тренутно користите може да приступа подацима, али ће то чинити ређе. На пример, слике се неће приказивати док их не додирнете."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Желите да укључите Уштеду података?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Укључи"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index d5458216d9ab..840493cf3012 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Enheten kommer att rensas"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Det går inte att använda administratörsappen. Enheten rensas.\n\nKontakta organisationens administratör om du har några frågor."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Utskrift har inaktiverats av <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Återaktivera privata appar"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Appar blockeras i morgon"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT-administratören tillåter inte att din jobbprofil pausas i mer än <xliff:g id="DAYS">%1$d</xliff:g> dagar"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Aktivera jobbprofilen"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Privata appar blockeras tills du aktiverar jobbprofilen"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Dina privata appar blockeras i morgon"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Aktivera jobbprofilen"</string> <string name="me" msgid="6207584824693813140">"Jag"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Alternativ för surfplattan"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Om du trycker ned båda volymknapparna i ett par sekunder aktiveras <xliff:g id="SERVICE">%1$s</xliff:g>, en tillgänglighetsfunktion. Det kan leda till att enheten fungerar annorlunda.\n\nDu kan ändra vilken funktion som ska aktiveras med genvägen under Inställningar > Tillgänglighet."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktivera"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Aktivera inte"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"PÅ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"AV"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vill du tillåta att <xliff:g id="SERVICE">%1$s</xliff:g> får fullständig kontroll över enheten?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Om du aktiverar <xliff:g id="SERVICE">%1$s</xliff:g> används inte skärmlåset för att förbättra datakryptering på enheten."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Fullständig kontroll lämpar sig för appar med tillgänglighetsfunktioner, men är inte lämplig för de flesta appar."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Administratören uppdaterade paketet"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratören raderade paketet"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batterisparläget förlänger batteritiden genom att:\n·aktivera mörkt tema\n·inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”\n\n"<annotation id="url">"Läs mer"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batterisparläget förlänger batteritiden genom att:\n·aktivera mörkt tema\n·inaktivera eller begränsa aktivitet i bakgrunden, vissa visuella effekter och andra funktioner, som ”Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Med databesparing kan du minska dataanvändningen genom att hindra en del appar från att skicka eller ta emot data i bakgrunden. Appar som du använder kan komma åt data, men det sker kanske inte lika ofta. Detta innebär t.ex. att bilder inte visas förrän du trycker på dem."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vill du aktivera Databesparing?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aktivera"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index c42aad000b0d..360f41bdfc00 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Data iliyomo kwenye kifaa chako itafutwa"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Huwezi kutumia programu ya msimamizi. Sasa data iliyo kwenye kifaa chako itafutwa.\n\nIkiwa una maswali yoyote, wasiliana na msimamizi wa shirika lako."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Kipengele cha kuchapisha kimezimwa na <xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Acha kuzuia programu za binafsi"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Programu zitazuiwa kesho"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Msimamizi wako wa TEHAMA haruhusu wasifu wako wa kazini kusimamishwa kwa zaidi ya siku <xliff:g id="DAYS">%1$d</xliff:g>"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Washa wasifu wa kazini"</string> <string name="me" msgid="6207584824693813140">"Mimi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Chaguo za kompyuta ndogo"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Hatua ya kushikilia chini vitufe vyote viwili vya sauti kwa sekunde chache huwasha <xliff:g id="SERVICE">%1$s</xliff:g>, kipengele cha ufikivu. Huenda hatua hii ikabadilisha jinsi kifaa chako kinavyofanya kazi.\n\nUnaweza kubadilisha njia hii ya mkato iwe kipengele kingine katika Mipangilio > Ufikivu."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Washa"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Usiwashe"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"IMEWASHWA"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"IMEZIMWA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Ungependa kuruhusu <xliff:g id="SERVICE">%1$s</xliff:g> idhibiti kifaa chako kikamilifu?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Ukiwasha <xliff:g id="SERVICE">%1$s</xliff:g>, kifaa chako hakitatumia kipengele cha kufunga skrini yako ili kuboresha usimbaji wa data kwa njia fiche."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Udhibiti kamili unafaa kwa programu zinazokusaidia kwa mahitaji ya ufikivu, ila si kwa programu nyingi."</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Imesasishwa na msimamizi wako"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Imefutwa na msimamizi wako"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Sawa"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n.Huwasha Mandhari meusi\n. Huzima au kuzuia shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\"\n\n"<annotation id="url">"Pata maelezo zaidi"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Ili kuongeza muda wa matumizi ya betri, Kiokoa Betri:\n·Huwasha Mandhari meusi\n·Huzima au kuzuia shughuli za chinichini, baadhi ya madoido yanayoonekana na vipengele vingine kama vile \"Ok Google\""</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chinichini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozifungua."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Ungependa Kuwasha Kiokoa Data?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Washa"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 87fa6c6b4e02..c2c9d1615207 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -200,9 +200,12 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"சாதனத் தரவு அழிக்கப்படும்"</string> <string name="factory_reset_message" msgid="2657049595153992213">"நிர்வாகி ஆப்ஸை உபயோகிக்க முடியாது. இப்போது, உங்கள் சாதனம் ஆரம்ப நிலைக்கு மீட்டமைக்கப்படும்.\n\nஏதேனும் கேள்விகள் இருப்பின், உங்கள் நிறுவனத்தின் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"பிரிண்ட் செய்வதை <xliff:g id="OWNER_APP">%s</xliff:g> தடுத்துள்ளது."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"தனிப்பட்ட ஆப்ஸை அனுமதியுங்கள்"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ஆப்ஸ் நாளை தடை செய்யப்படும்"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"பணிக் கணக்கு <xliff:g id="DAYS">%1$d</xliff:g> நாட்களுக்கு மேல் இடைநிறுத்தப்படுவதை உங்கள் IT நிர்வாகி அனுமதிக்கவில்லை"</string> + <!-- no translation found for personal_apps_suspension_title (7561416677884286600) --> + <skip /> + <!-- no translation found for personal_apps_suspension_text (6115455688932935597) --> + <skip /> + <!-- no translation found for personal_apps_suspension_tomorrow_text (6322541302153673994) --> + <skip /> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"பணிக் கணக்கை ஆன் செய்"</string> <string name="me" msgid="6207584824693813140">"நான்"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"டேப்லெட் விருப்பங்கள்"</string> @@ -1631,10 +1634,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"இரண்டு ஒலியளவு விசைகளையும் சில விநாடிகள் பிடித்திருப்பதால் அணுகல்தன்மை அம்சமான <xliff:g id="SERVICE">%1$s</xliff:g> ஆன் ஆகும். இதனால் உங்கள் சாதனம் வேலை செய்யும் முறை மாறக்கூடும்.\n\nஅமைப்புகள் > அணுகல்தன்மைக்குச் சென்று இந்த ஷார்ட்கட்டை வேறு அம்சத்திற்கு மாற்ற முடியும்."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ஆன் செய்"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ஆன் செய்யாதே"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ஆன்"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ஆஃப்"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"உங்கள் சாதனத்தை முழுமையாகக் கட்டுப்படுத்த <xliff:g id="SERVICE">%1$s</xliff:g> சேவையை அனுமதிக்க வேண்டுமா?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> சேவையை ஆன் செய்தால் தரவு என்க்ரிப்ஷனை மேம்படுத்த சாதனம் திரைப் பூட்டைப் பயன்படுத்தாது."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"உங்களுக்கு உதவக்கூடிய ஆப்ஸுக்குக் தேவையான அணுகல்தன்மையை அளித்து முழுக் கட்டுப்பாட்டையும் அளிக்கலாம், ஆனால் பெரும்பாலான ஆப்ஸுக்கு இது பொருந்தாது."</string> @@ -1796,8 +1797,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"உங்கள் நிர்வாகி புதுப்பித்துள்ளார்"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"உங்கள் நிர்வாகி நீக்கியுள்ளார்"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"சரி"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"பேட்டரி நிலையை நீட்டிப்பதற்காக, பேட்டரி சேமிப்பான்:\n·டார்க் தீமினை ஆன் செய்யும்\n·“Hey Google” போன்ற பிற அம்சங்கள், பின்னணி செயல்பாடுகள், சில விஷுவல் எஃபெக்ட்கள், ஆகியவற்றை ஆஃப் செய்யும் அல்லது கட்டுப்படுத்தும்\n\n"<annotation id="url">"மேலும் அறிக"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"பேட்டரி நிலையை நீட்டிப்பதற்காக, பேட்டரி சேமிப்பான்:\n·டார்க் தீமினை ஆன் செய்யும்\n·“Hey Google” போன்ற பிற அம்சங்கள், பின்னணி செயல்பாடுகள், சில விஷுவல் எஃபெக்ட்கள், ஆகியவற்றை ஆஃப் செய்யும் அல்லது கட்டுப்படுத்தும்"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"டேட்டா உபயோகத்தைக் குறைப்பதற்கு உதவ, பின்புலத்தில் டேட்டாவை அனுப்புவது அல்லது பெறுவதிலிருந்து சில ஆப்ஸை டேட்டா சேமிப்பான் தடுக்கும். தற்போது பயன்படுத்தும் ஆப்ஸானது எப்போதாவது டேட்டாவை அணுகலாம். எடுத்துக்காட்டாக, படங்களை நீங்கள் தட்டும் வரை அவை காட்டப்படாது."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"டேட்டா சேமிப்பானை இயக்கவா?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"இயக்கு"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 0773bd990e78..b9ef76a27226 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"మీ పరికరంలోని డేటా తొలగించబడుతుంది"</string> <string name="factory_reset_message" msgid="2657049595153992213">"నిర్వాహక యాప్ ఉపయోగించడం సాధ్యపడదు. మీ పరికరంలోని డేటా ఇప్పుడు తొలగించబడుతుంది.\n\nమీకు ప్రశ్నలు ఉంటే, మీ సంస్థ యొక్క నిర్వాహకులను సంప్రదించండి."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"ముద్రణ <xliff:g id="OWNER_APP">%s</xliff:g> ద్వారా నిలిపివేయబడింది."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"మీపర్సనల్యాప్స్నిఅన్బ్లాక్"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"యాప్లు రేపు బ్లాక్ చేయబడతాయి"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="DAYS">%1$d</xliff:g> రోజుల కంటే ఎక్కువ పాజ్ చేసి ఉంచడానికి మీ IT అడ్మిన్ అనుమతించరు"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"మీ పని ప్రొఫైల్ను ఆన్ చేయి"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"మీరు మీ కార్యాలయ ప్రొఫైల్ను ప్రారంభించే వరకు, మీ వ్యక్తిగత యాప్లు బ్లాక్ చేయబడతాయి"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"మీ వ్యక్తిగత యాప్లు రేపు బ్లాక్ చేయబడతాయి"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"కార్యాలయ ప్రొఫైల్ను ఆన్ చేయండి"</string> <string name="me" msgid="6207584824693813140">"నేను"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"టాబ్లెట్ ఎంపికలు"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"రెండు వాల్యూమ్ కీలను కొన్ని సెకన్ల పాటు నొక్కి పట్టుకోవడం ద్వారా యాక్సెసిబిలిటీ అయిన <xliff:g id="SERVICE">%1$s</xliff:g> ఆన్ అవుతుంది. ఇది మీ పరికరం పని చేసే విధానాన్ని మార్చవచ్చు.\n\nసెట్టింగ్లు > యాక్సెసిబిలిటీలో, వేరొక ఫీచర్ను ప్రారంభించేలా ఈ షార్ట్ కట్ను మీరు మార్చవచ్చు."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"ఆన్ చేయి"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ఆన్ చేయకండి"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ఆన్"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ఆఫ్"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>కి మీ పరికరంపై పూర్తి నియంత్రణను ఇవ్వాలనుకుంటున్నారా?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"మీరు <xliff:g id="SERVICE">%1$s</xliff:g>ని ఆన్ చేస్తే, డేటా ఎన్క్రిప్షన్ను మెరుగుపరచడానికి మీ పరికరం మీ స్క్రీన్ లాక్ను ఉపయోగించదు."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"అవసరమైన యాక్సెస్ సామర్ధ్యం కోసం యాప్లకు పూర్తి నియంత్రణ ఇవ్వడం తగిన పనే అయినా, అన్ని యాప్లకు అలా ఇవ్వడం సరికాదు."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"మీ నిర్వాహకులు నవీకరించారు"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"మీ నిర్వాహకులు తొలగించారు"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"సరే"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్ వీటిని చేస్తుంది:\n·ముదురు రంగు థీమ్ను ఆన్ చేస్తుంది\n·బ్యాక్గ్రౌండ్ కార్యకలాపం, కొన్ని విజువల్ ఎఫెక్ట్స్లతో పాటు “Ok Google” వంటి ఇతర ఫీచర్లను ఆపివేస్తుంది లేదా పరిమితం చేస్తుంది\n\n"<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్ వీటిని చేస్తుంది:\n·ముదురు రంగు థీమ్ను ఆన్ చేస్తుంది\n·బ్యాక్గ్రౌండ్ కార్యకలాపం, కొన్ని విజువల్ ఎఫెక్ట్స్లతో పాటు “Ok Google” వంటి ఇతర ఫీచర్లను ఆపివేస్తుంది లేదా పరిమితం చేస్తుంది"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"డేటా వినియోగాన్ని తగ్గించడంలో డేటా సేవర్ సహాయకరంగా ఉంటుంది. బ్యాక్గ్రౌండ్లో కొన్ని యాప్లు డేటాను పంపకుండా లేదా స్వీకరించకుండా నిరోధిస్తుంది. మీరు ప్రస్తుతం ఉపయోగిస్తోన్న యాప్, డేటాను యాక్సెస్ చేయగలదు. కానీ తక్కువ సార్లు మాత్రమే అలా చేయవచ్చు. ఉదాహరణకు, మీరు నొక్కే వరకు ఫోటోలు ప్రదర్శించబడవు."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"డేటా సేవర్ను ఆన్ చేయాలా?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"ఆన్ చేయి"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index a700e7540c4e..6b8b9121fc62 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"ระบบจะลบข้อมูลในอุปกรณ์ของคุณ"</string> <string name="factory_reset_message" msgid="2657049595153992213">"ใช้แอปผู้ดูแลระบบนี้ไม่ได้ ขณะนี้ระบบจะลบข้อมูลในอุปกรณ์ของคุณ\n\nโปรดติดต่อผู้ดูแลระบบขององค์กรหากมีคำถาม"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ปิดใช้การพิมพ์แล้ว"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"เลิกบล็อกแอปส่วนตัว"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"ระบบจะบล็อกแอปพรุ่งนี้"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"ผู้ดูแลระบบไอทีไม่อนุญาตให้หยุดโปรไฟล์งานชั่วคราวเกิน <xliff:g id="DAYS">%1$d</xliff:g> วัน"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"เปิดโปรไฟล์งาน"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"แอปส่วนตัวจะถูกบล็อกไว้จนกว่าคุณจะเปิดโปรไฟล์งาน"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"แอปส่วนตัวจะถูกบล็อกในวันพรุ่งนี้"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"เปิดโปรไฟล์งาน"</string> <string name="me" msgid="6207584824693813140">"ฉัน"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ตัวเลือกของแท็บเล็ต"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"การกดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มค้างไว้ 2-3 วินาทีจะเปิด <xliff:g id="SERVICE">%1$s</xliff:g> ซึ่งเป็นฟีเจอร์การช่วยเหลือพิเศษ การดำเนินการนี้อาจเปลี่ยนแปลงลักษณะการทำงานของอุปกรณ์\n\nคุณแก้ไขทางลัดนี้ให้เปิดฟีเจอร์อื่นได้ในการตั้งค่า > การช่วยเหลือพิเศษ"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"เปิด"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ไม่ต้องเปิด"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"เปิด"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ปิด"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"อนุญาตให้ <xliff:g id="SERVICE">%1$s</xliff:g> ควบคุมอุปกรณ์อย่างเต็มที่ไหม"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"หากคุณเปิด <xliff:g id="SERVICE">%1$s</xliff:g> อุปกรณ์ของคุณจะไม่ใช้ล็อกหน้าจอเพื่อปรับปรุงการเข้ารหัสข้อมูล"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"การควบคุมอย่างเต็มที่เหมาะสำหรับแอปที่ช่วยคุณในเรื่องความต้องการความช่วยเหลือพิเศษแต่ไม่เหมาะสำหรับแอปส่วนใหญ่"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"อัปเดตโดยผู้ดูแลระบบ"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"ลบโดยผู้ดูแลระบบ"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ตกลง"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n·เปิดธีมมืด\n·ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น “Ok Google”\n\n"<annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"โหมดประหยัดแบตเตอรี่จะดำเนินการดังต่อไปนี้เพื่อยืดอายุการใช้งานแบตเตอรี่\n·เปิดธีมมืด\n·ปิดหรือจำกัดกิจกรรมในเบื้องหลัง เอฟเฟกต์ภาพบางอย่าง และฟีเจอร์อื่นๆ อย่างเช่น “Ok Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"เพื่อช่วยลดปริมาณการใช้อินเทอร์เน็ต โปรแกรมประหยัดอินเทอร์เน็ตจะช่วยป้องกันไม่ให้บางแอปส่งหรือรับข้อมูลโดยการใช้อินเทอร์เน็ตอยู่เบื้องหลัง แอปที่คุณกำลังใช้งานสามารถเข้าถึงอินเทอร์เน็ตได้ แต่อาจไม่บ่อยเท่าเดิม ตัวอย่างเช่น ภาพต่างๆ จะไม่แสดงจนกว่าคุณจะแตะที่ภาพเหล่านั้น"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"เปิดการประหยัดอินเทอร์เน็ตไหม"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"เปิด"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index d85ceb0ed9a9..f078b82de89b 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Buburahin ang iyong device"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Hindi magamit ang admin app. Mabubura na ang iyong device.\n\nKung mayroon kang mga tanong, makipag-ugnayan sa admin ng iyong organisasyon."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Na-disable ng <xliff:g id="OWNER_APP">%s</xliff:g> ang pag-print."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"I-unblock ang iyong mga personal na app"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Iba-block ang mga app bukas"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Hindi pinapayagan ng IT admin mo na ma-pause ang iyong profile sa trabaho sa loob ng mahigit <xliff:g id="DAYS">%1$d</xliff:g> (na) araw"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"I-on ang profile sa trabaho"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Naka-block ang iyong mga personal na app hangga\'t hindi mo ino-on ang profile sa trabaho mo"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Maba-block ang iyong mga personal na app bukas"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"I-on ang profile sa trabaho"</string> <string name="me" msgid="6207584824693813140">"Ako"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Mga pagpipilian sa tablet"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Mao-on ang feature ng pagiging accessible na <xliff:g id="SERVICE">%1$s</xliff:g> kapag pinindot nang matagal ang parehong volume key nang ilang segundo. Posibleng mabago nito ang paggana ng iyong device.\n\nPuwede mong palitan ng ibang feature ang shortcut na ito sa Mga Setting > Pagiging Accessible."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"I-on"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Huwag i-on"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"NAKA-ON"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NAKA-OFF"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Bigyan ang <xliff:g id="SERVICE">%1$s</xliff:g> ng ganap na kontrol sa iyong device?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Kung io-on mo ang <xliff:g id="SERVICE">%1$s</xliff:g>, hindi gagamitin ng iyong device ang lock ng screen mo para pahusayin ang pag-encrypt ng data."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Naaangkop ang ganap na kontrol sa mga app na tumutulong sa mga pangangailangan mo sa accessibility, pero hindi sa karamihan ng mga app."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Na-update ng iyong admin"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Na-delete ng iyong admin"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Para patagalin ang baterya, ginagawa ng Pangtipid sa Baterya na:\n·I-on ang Madilim na tema\n·I-off o paghigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”\n\n"<annotation id="url">"Matuto pa"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Para patagalin ang baterya, ginagawa ng Pangtipid sa Baterya na:\n·I-on ang Madilim na tema\n·I-off o paghigpitan ang aktibidad sa background, ilang visual effect, at iba pang feature gaya ng “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Upang makatulong na mabawasan ang paggamit ng data, pinipigilan ng Data Saver ang ilang app na magpadala o makatanggap ng data sa background. Maaaring mag-access ng data ang isang app na ginagamit mo sa kasalukuyan, ngunit mas bihira na nito magagawa iyon. Halimbawa, maaaring hindi lumabas ang mga larawan hangga\'t hindi mo nata-tap ang mga ito."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"I-on ang Data Saver?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"I-on"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index d87a8541cf69..a0ff1a81d8d4 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Cihazınız silinecek"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Yönetim uygulaması kullanılamıyor. Cihazınız şimdi silinecek.\n\nSorularınız varsa kuruluşunuzun yöneticisine başvurun."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Yazdırma işlemi <xliff:g id="OWNER_APP">%s</xliff:g> tarafından devre dışı bırakıldı."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Kişisel uygulamalarınızın engellemesini kaldırın"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Uygulamalar yarın engellenecek"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"BT yöneticiniz, iş profilinizin <xliff:g id="DAYS">%1$d</xliff:g> günden fazla duraklatılmasına izin vermiyor"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"İş profilinizi açın"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"İş profilinizi açana kadar kişisel uygulamalarınız engellendi"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Kişisel uygulamalarınız yarın engellenecek"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"İş profilini aç"</string> <string name="me" msgid="6207584824693813140">"Ben"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet seçenekleri"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ses tuşlarının ikisini birden birkaç saniyeliğine basılı tutmak <xliff:g id="SERVICE">%1$s</xliff:g> erişilebilirlik özelliğini etkinleştirir. Bu, cihazınızın çalışma şeklini değiştirebilir.\n\nBu kısayolu, Ayarlar > Erişilebilirlik\'te başka bir özellikle değiştirebilirsiniz."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Etkinleştir"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Etkinleştirme"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AÇIK"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"KAPALI"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> hizmetinin cihazınızı tamamen kontrol etmesine izin veriyor musunuz?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"<xliff:g id="SERVICE">%1$s</xliff:g> hizmetini açarsanız cihazınız veri şifrelemeyi geliştirmek için ekran kilidinizi kullanmaz."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Erişebilirlik ihtiyaçlarınıza yardımcı olan uygulamalara tam kontrol verilmesi uygundur ancak diğer pek çok uygulama için uygun değildir."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Yöneticiniz tarafından güncellendi"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Yöneticiniz tarafından silindi"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"Tamam"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Pil ömrünü uzatmak için Pil Tasarrufu:\n·Koyu temayı açar\n·Arka plan etkinliğini, bazı görsel efektleri ve \"Hey Google\" gibi diğer özellikleri kapatır veya kısıtlar\n\n"<annotation id="url">"Daha fazla bilgi"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Pil ömrünü uzatmak için Pil Tasarrufu:\n·Koyu temayı açar\n·Arka plan etkinliğini, bazı görsel efektleri ve \"Hey Google\" gibi diğer özellikleri kapatır veya kısıtlar"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Veri kullanımını azaltmaya yardımcı olması için Veri Tasarrufu, bazı uygulamaların arka planda veri göndermesini veya almasını engeller. Şu anda kullandığınız bir uygulama veri bağlantısına erişebilir, ancak bunu daha seyrek yapabilir. Bu durumda örneğin, siz resimlere dokunmadan resimler görüntülenmez."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Veri Tasarrufu açılsın mı?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Aç"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index ff8f1ecf45a1..da529bc989bb 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -204,9 +204,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"З вашого пристрою буде стерто всі дані"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Не можна запускати додаток для адміністраторів. Буде відновлено заводські налаштування пристрою.\n\nЯкщо у вас є запитання, зв’яжіться з адміністратором своєї організації."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Додаток <xliff:g id="OWNER_APP">%s</xliff:g> вимкнув друк."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Розблокуйте особисті додатки"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Додатки буде заблоковано завтра"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Ваш ІТ-адміністратор не дозволяє призупиняти робочий профіль більше ніж на <xliff:g id="DAYS">%1$d</xliff:g> дн."</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Увімкніть робочий профіль"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Особисті додатки заблоковано, доки ви не ввімкнете робочий профіль"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Завтра буде заблоковано ваші особисті додатки"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Увімкнути робочий профіль"</string> <string name="me" msgid="6207584824693813140">"Я"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Парам. пристрою"</string> @@ -1675,10 +1675,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Якщо втримувати обидві клавіші гучності впродовж кількох секунд, буде ввімкнено спеціальні можливості – <xliff:g id="SERVICE">%1$s</xliff:g>. Це може вплинути на роботу пристрою.\n\nДля цієї комбінації клавіш можна вибрати іншу функцію в меню \"Налаштування > Спеціальні можливості\"."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Увімкнути"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не вмикати"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"УВІМК."</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ВИМК."</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Надати сервісу <xliff:g id="SERVICE">%1$s</xliff:g> повний доступ до вашого пристрою?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Якщо ви ввімкнете сервіс <xliff:g id="SERVICE">%1$s</xliff:g>, дані на пристрої не захищатимуться екраном блокування."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Повний доступ доречний для додатків, які надають спеціальні можливості, але його не варто відкривати для більшості інших додатків."</string> @@ -1842,8 +1840,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Оновлено адміністратором"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Видалено адміністратором"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n·вмикає темну тему;\n·припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти й інші енергозатратні функції, зокрема Ok Google.\n\n"<annotation id="url">"Докладніше"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Щоб подовжити час роботи акумулятора, режим енергозбереження:\n·вмикає темну тему;\n·припиняє або обмежує фонову активність, вимикає деякі візуальні ефекти й інші енергозатратні функції, зокрема команду \"Ok Google\"."</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Щоб зменшити використання трафіку, функція \"Заощадження трафіку\" не дозволяє деяким додаткам надсилати чи отримувати дані у фоновому режимі. Поточний додаток зможе отримувати доступ до таких даних, але рідше. Наприклад, зображення не відображатиметься, доки ви не торкнетеся його."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Увімкнути заощадження трафіку?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Увімкнути"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 14de695b9351..0f09c611cacd 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"آپ کا آلہ صاف کر دیا جائے گا"</string> <string name="factory_reset_message" msgid="2657049595153992213">"منتظم کی ایپ استعمال نہیں کی جا سکتی۔ آپ کا آلہ اب مٹا دیا جائے گا۔\n\nاگر آپ کے سوالات ہیں تو اپنی تنظیم کے منتظم سے رابطہ کریں۔"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> نے پرنٹنگ کو غیر فعال کر دیا ہے۔"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"اپنے ذاتی ایپس غیر مسدود کریں"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"آئندہ کل ایپس کو مسدود کر دیا جائے گا"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"آپ کا IT منتظم آپ کی دفتری پروفائل کو <xliff:g id="DAYS">%1$d</xliff:g> دن سے زیادہ موقوف ہونے کی اجازت نہیں دیتا ہے"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"اپنی دفتری پروفائل آن کریں"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"آپ کے ذاتی ایپس کو اس وقت تک بلاک کر دیا جاتا ہے جب تک کہ آپ اپنے ورک پروفایل کو آن نہیں کرتے"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"آئندہ کل آپ کی ذاتی ایپس کو مسدود کر دیا جائے گا"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"دفتری پروفائل آن کریں"</string> <string name="me" msgid="6207584824693813140">"میں"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"ٹیبلیٹ کے اختیارات"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"والیوم کی دونوں کلیدوں کو کچھ سیکنڈز تک دبائے رکھنے سے <xliff:g id="SERVICE">%1$s</xliff:g> ایکسیسبیلٹی خصوصیت آن ہو جاتی ہے۔ اس سے آپ کے آلے کے کام کرنے کا طریقہ تبدیل ہو سکتا ہے۔\n\nآپ ترتیبات اور ایکسیسبیلٹی میں دیگر خصوصیت کے لیے اس شارٹ کٹ کو تبدیل کر سکتے ہیں۔"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"آن کریں"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"آن نہ کریں"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"آن"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"آف"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> کو آپ کے آلے کا مکمل کنٹرول حاصل کرنے کی اجازت دیں؟"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"اگر آپ <xliff:g id="SERVICE">%1$s</xliff:g> کو آن کرتے ہیں تو آپ کا آلہ ڈیٹا کی مرموزکاری کو بڑھانے کیلئے آپ کی اسکرین کا قفل استعمال نہیں کرے گا۔"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"مکمل کنٹرول ان ایپس کے لیے مناسب ہے جو ایکسیسبیلٹی کی ضروریات میں آپ کی مدد کرتی ہیں، لیکن زیادہ تر ایپس کیلئے مناسب نہیں۔"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"آپ کے منتظم کے ذریعے اپ ڈیٹ کیا گیا"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"آپ کے منتظم کے ذریعے حذف کیا گیا"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"ٹھیک ہے"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"بیٹری لائف کو بڑھانے کے لیے، بیٹری سیور:\n گہری تھیم کو آن کرتی ہے\n پس منظر کی سرگرمی، کچھ بصری اثرات اور دیگر خصوصیات جیسے کہ \"Ok Google\" کو آف یا محدود کرتی ہے\n\n"<annotation id="url">"مزید جانیں"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"بیٹری لائف کو بڑھانے کے لیے، بیٹری سیور:\n گہری تھیم کو آن کرتی ہے\n پس منظر کی سرگرمی، کچھ بصری اثرات اور دیگر خصوصیات جیسے کہ \"Ok Google\" کو آف یا محدود کرتی ہے"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"ڈیٹا کے استعمال کو کم کرنے میں مدد کیلئے، ڈیٹا سیور پس منظر میں کچھ ایپس کو ڈیٹا بھیجنے یا موصول کرنے سے روکتی ہے۔ آپ جو ایپ فی الحال استعمال کر رہے ہیں وہ ڈیٹا تک رسائی کر سکتی ہے مگر ہو سکتا ہے ایسا اکثر نہ ہو۔ اس کا مطلب مثال کے طور پر یہ ہو سکتا ہے کہ تصاویر تھپتھپانے تک ظاہر نہ ہوں۔"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"ڈیٹا سیور آن کریں؟"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"آن کریں"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 5fc642e987ce..d069a68084b7 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Qurilmangizdagi ma’lumotlar o‘chirib tashlanadi"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Administrator ilovasini ishlatib bo‘lmaydi. Qurilmada barcha ma’lumotlar o‘chirib tashlanadi.\n\nSavollaringiz bo‘lsa, administrator bilan bog‘laning."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Chop etish funksiyasi <xliff:g id="OWNER_APP">%s</xliff:g> tomonidan faolsizlantirilgan."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Shaxsiy ilovalarni blokdan chiqaring"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Ilovalar ertaga bloklanadi"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"AT administratoringiz ish profili <xliff:g id="DAYS">%1$d</xliff:g> kundan ortiq pauza qilinishini taqiqlagan"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Ish profilingizni yoqing"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Ish profilingiz yoniqligida shaxsiy ilovalaringiz bloklanadi"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Shaxsiy ilovalaringiz ertaga bloklanadi"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Ish profilini yoqish"</string> <string name="me" msgid="6207584824693813140">"Men"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Planshet sozlamalari"</string> @@ -1107,8 +1107,8 @@ <string name="deleteText" msgid="4200807474529938112">"O‘chirish"</string> <string name="inputMethod" msgid="1784759500516314751">"Kiritish uslubi"</string> <string name="editTextMenuTitle" msgid="857666911134482176">"Matn yozish"</string> - <string name="low_internal_storage_view_title" msgid="9024241779284783414">"Xotirada bo‘sh joy tugamoqda"</string> - <string name="low_internal_storage_view_text" msgid="8172166728369697835">"Ba‘zi tizim funksiyalari ishlamasligi mumkin"</string> + <string name="low_internal_storage_view_title" msgid="9024241779284783414">"Xotirada joy yetarli emas"</string> + <string name="low_internal_storage_view_text" msgid="8172166728369697835">"Ayrim funksiyalar ishlamasligi mumkin"</string> <string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"Tizim uchun xotirada joy yetarli emas. Avval 250 megabayt joy bo‘shatib, keyin qurilmani o‘chirib yoqing."</string> <string name="app_running_notification_title" msgid="8985999749231486569">"<xliff:g id="APP_NAME">%1$s</xliff:g> ishlamoqda"</string> <string name="app_running_notification_text" msgid="5120815883400228566">"Ilovani to‘xtatish yoki qo‘shimcha ma’lumot olish uchun bosing."</string> @@ -1314,8 +1314,8 @@ <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Wi-Fi orqali debaggingni faolsizlantirish uchun bosing."</string> <string name="test_harness_mode_notification_title" msgid="2282785860014142511">"Xavfsizlik sinovi rejimi yoqildi"</string> <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Xavfsizlik sinovi rejimini faolsizlantirish uchun zavod sozlamalariga qaytaring."</string> - <string name="console_running_notification_title" msgid="6087888939261635904">"Davomiy port terminali yoqildi"</string> - <string name="console_running_notification_message" msgid="7892751888125174039">"Samaradorlik pasaydi. Terminalni faolsizlantirish uchun operatsion tizim yuklagichini oching."</string> + <string name="console_running_notification_title" msgid="6087888939261635904">"Ketma-ket port konsoli yoqildi"</string> + <string name="console_running_notification_message" msgid="7892751888125174039">"Qurilma samaradorligi pasaydi. Konsolni faolsizlantirish uchun operatsion tizim yuklagichini oching."</string> <string name="usb_contaminant_detected_title" msgid="4359048603069159678">"USB portda suyuqlik yoki parcha bor"</string> <string name="usb_contaminant_detected_message" msgid="7346100585390795743">"USB port avtomatik tarzda faolsizlashtirildi. Batafsil axborot olish uchun bosing."</string> <string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"USB portdan foydalanish mumkin"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"<xliff:g id="SERVICE">%1$s</xliff:g> funksiyasini yoqish uchun ikkala tovush tugmalarini bir necha soniya bosib turing. Qurilmangiz ishlashida oʻzgarish yuz berishi mumkin.\n\nBu tezkor tugmalarni boshqa funksiyaga Sozlamalar ichidagi Maxsus imkoniyatlar orqali tayinlash mumkin."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Yoqilsin"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Yoqilmasin"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"YONIQ"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"YOQILMAGAN"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> xizmatiga qurilmangizni boshqarish uchun toʻliq ruxsat berilsinmi?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Agar <xliff:g id="SERVICE">%1$s</xliff:g> xizmatini yoqsangiz, qurilmangiz maʼlumotlarni shifrlashni kuchaytirish uchun ekran qulfidan foydalanmaydi."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Toʻliq nazorat maxsus imkoniyatlar bilan ishlovchi ilovalar uchun mos, lekin barcha ilovalar uchun emas."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Administrator tomonidan yangilangan"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Administrator tomonidan o‘chirilgan"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n·Tungi mavzuni yoqadi\n·Fondagi harakatlar, vizual effektlar va “Hey Google” kabi boshqa funksiyalarni faolsizlantiradi\n\n"<annotation id="url">"Batafsil"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Batareya quvvatini uzaytirish uchun Quvvat tejash funksiyasi:\n·Tungi mavzuni yoqadi\n·Fondagi harakatlar, vizual effektlar va “Hey Google” kabi boshqa funksiyalarni faolsizlantiradi"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Trafik tejash rejimida ayrim ilovalar uchun orqa fonda internetdan foydalanish imkoniyati cheklanadi. Siz ishlatayotgan ilova zaruratga qarab internet-trafik sarflashi mumkin, biroq cheklangan miqdorda. Masalan, rasmlar ustiga bosmaguningizcha ular yuklanmaydi."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Trafik tejash yoqilsinmi?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Yoqish"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index b6e1f2484105..479574b6a5df 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Thiết bị của bạn sẽ bị xóa"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Không thể sử dụng ứng dụng quản trị. Thiết bị của bạn sẽ bị xóa ngay bây giờ.\n\nHãy liên hệ với quản trị viên của tổ chức nếu bạn có thắc mắc."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> đã tắt tính năng in."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Bỏ chặn ứng dụng cá nhân của bạn"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Các ứng dụng sẽ bị chặn vào ngày mai"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Quản trị viên CNTT không cho phép bạn tạm dừng hồ sơ công việc quá <xliff:g id="DAYS">%1$d</xliff:g> ngày"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Bật hồ sơ công việc của bạn"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Ứng dụng cá nhân của bạn bị chặn cho tới khi bạn bật hồ sơ công việc"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Ứng dụng cá nhân của bạn sẽ bị chặn vào ngày mai"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Bật hồ sơ công việc"</string> <string name="me" msgid="6207584824693813140">"Tôi"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tùy chọn máy tính bảng"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Thao tác nhấn và giữ cả hai phím âm lượng trong vài giây sẽ bật <xliff:g id="SERVICE">%1$s</xliff:g>, một tính năng hỗ trợ tiếp cận. Việc bật tính năng này có thể thay đổi cách thiết bị của bạn hoạt động.\n\nBạn có thể chuyển phím tắt này thành một tính năng khác trong phần Cài đặt > Hỗ trợ tiếp cận."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Bật"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Không bật"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ĐANG BẬT"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ĐANG TẮT"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Cho phép <xliff:g id="SERVICE">%1$s</xliff:g> toàn quyền kiểm soát thiết bị của bạn?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Nếu bạn bật <xliff:g id="SERVICE">%1$s</xliff:g>, thiết bị của bạn sẽ không dùng phương thức khóa màn hình để tăng cường mã hóa dữ liệu."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Bạn chỉ nên cấp toàn quyền kiểm soát cho những ứng dụng trợ giúp mình khi cần hỗ trợ tiếp cận, chứ không nên cấp cho hầu hết các ứng dụng."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Do quản trị viên của bạn cập nhật"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Do quản trị viên của bạn xóa"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n·Bật Giao diện tối\n·Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”\n\n"<annotation id="url">"Tìm hiểu thêm"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Để tăng thời lượng pin, Trình tiết kiệm pin sẽ:\n·Bật giao diện tối\n·Tắt hoặc hạn chế hoạt động chạy trong nền, một số hiệu ứng hình ảnh và các tính năng khác như lệnh “Ok Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Để giúp giảm mức sử dụng dữ liệu, Trình tiết kiệm dữ liệu sẽ chặn một số ứng dụng gửi hoặc nhận dữ liệu trong nền. Ứng dụng mà bạn hiện sử dụng có thể dùng dữ liệu nhưng tần suất sẽ giảm. Ví dụ: hình ảnh sẽ không hiển thị cho đến khi bạn nhấn vào hình ảnh đó."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Bật Trình tiết kiệm dữ liệu?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Bật"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 790ac9c5f138..7f54194d6ae6 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"系统将清空您的设备"</string> <string name="factory_reset_message" msgid="2657049595153992213">"无法使用管理应用,系统现在将清空您的设备。\n\n如有疑问,请与您所在单位的管理员联系。"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"“<xliff:g id="OWNER_APP">%s</xliff:g>”已停用打印功能。"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"取消屏蔽个人应用"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"应用将于明日被屏蔽"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"您的 IT 管理员不允许工作资料的暂停时间超过 <xliff:g id="DAYS">%1$d</xliff:g> 天"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"开启工作资料"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"系统已屏蔽您的个人应用。您需要开启工作资料,系统才会取消屏蔽这些应用"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"系统将于明天屏蔽您的个人应用"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"开启工作资料"</string> <string name="me" msgid="6207584824693813140">"我"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"平板电脑选项"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同时按住两个音量键几秒钟,即可开启<xliff:g id="SERVICE">%1$s</xliff:g>无障碍功能。这样做可能会改变您设备的工作方式。\n\n您可以在“设置”>“无障碍”中将此快捷方式更改为开启另一项功能。"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"开启"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"不开启"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"开启"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"关闭"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要允许<xliff:g id="SERVICE">%1$s</xliff:g>完全控制您的设备吗?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"如果您开启<xliff:g id="SERVICE">%1$s</xliff:g>,您的设备将无法使用屏幕锁定功能来增强数据加密效果。"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"对于能满足您的无障碍功能需求的应用,可授予其完全控制权限;但对大部分应用来说,都不适合授予此权限。"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理员更新"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理员删除"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"确定"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"为了延长电池续航时间,省电模式会执行以下操作:\n开启深色主题\n关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”\n\n"<annotation id="url">"了解详情"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"为了延长电池续航时间,省电模式会执行以下操作:\n开启深色主题\n关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"要开启流量节省程序吗?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"开启"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 57c1c66a53a6..d71d2c5bed6b 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"您的裝置將被清除"</string> <string name="factory_reset_message" msgid="2657049595153992213">"無法使用管理員應用程式。系統會現在清除您的裝置。\n\n如有任何疑問,請聯絡您的機構管理員。"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"「<xliff:g id="OWNER_APP">%s</xliff:g>」暫停了列印。"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"解除封鎖您的個人應用程式"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"應用程式將於明天封鎖"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT 管理員不允許您的工作設定檔暫停使用超過 <xliff:g id="DAYS">%1$d</xliff:g> 天"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"開啟工作設定檔"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"系統會封鎖您的個人應用程式,直至您開啟工作設定檔為止"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"您的個人應用程式將於明天封鎖"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"啟用工作設定檔"</string> <string name="me" msgid="6207584824693813140">"我本人"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"平板電腦選項"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同時按下兩個音量鍵幾秒,以開啟 <xliff:g id="SERVICE">%1$s</xliff:g> 無障礙功能。這可能會變更裝置的運作。\n\n您可在「設定」>「無障礙功能」中變更此快速鍵。"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"開啟"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"不要開啟"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"開啟"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"關閉"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要允許 <xliff:g id="SERVICE">%1$s</xliff:g> 完全控制您的裝置嗎?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"如果您開啟 <xliff:g id="SERVICE">%1$s</xliff:g>,裝置將無法使用螢幕鎖定功能加強資料加密。"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"為您提供所需無障礙功能的應用程式有權完全控制您的裝置,但大部分應用程式均沒有此權限。"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理員更新"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理員刪除"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"好"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"為延長電池壽命,「省電模式」會:\n開啟深色主題背景\n關閉或限制背景活動、某些視覺效果和其他功能 (例如「Hey Google」)\n\n"<annotation id="url">"瞭解詳情"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"為延長電池壽命,「省電模式」會:\n開啟深色主題背景\n關閉或限制背景活動、某些視覺效果和其他功能 (例如「Hey Google」)"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟「數據節省模式」嗎?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 406b94fbc0f6..3c0312b76ca7 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"你的裝置資料將遭到清除"</string> <string name="factory_reset_message" msgid="2657049595153992213">"無法使用管理應用程式,系統現在將清除你裝置中的資料。\n\n如有任何問題,請與貴機構的管理員聯絡。"</string> <string name="printing_disabled_by" msgid="3517499806528864633">"「<xliff:g id="OWNER_APP">%s</xliff:g>」已停用列印功能。"</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"解除封鎖個人應用程式"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"系統將於明天封鎖應用程式"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"IT 管理員不允許你暫停工作資料夾超過 <xliff:g id="DAYS">%1$d</xliff:g> 天"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"開啟工作資料夾"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"系統已封鎖你的個人應用程式;你必須開啟工作資料夾,這些應用程式才會解除封鎖"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"系統將於明天封鎖你的個人應用程式"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"開啟工作資料夾"</string> <string name="me" msgid="6207584824693813140">"我"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"平板電腦選項"</string> @@ -1299,7 +1299,7 @@ <string name="usb_supplying_notification_title" msgid="5378546632408101811">"正在透過 USB 為連接的裝置充電"</string> <string name="usb_mtp_notification_title" msgid="1065989144124499810">"已開啟 USB 檔案傳輸模式"</string> <string name="usb_ptp_notification_title" msgid="5043437571863443281">"已開啟 USB PTP 模式"</string> - <string name="usb_tether_notification_title" msgid="8828527870612663771">"已開啟 USB 數據連線模式"</string> + <string name="usb_tether_notification_title" msgid="8828527870612663771">"已開啟 USB 網路共用模式"</string> <string name="usb_midi_notification_title" msgid="7404506788950595557">"已開啟 USB MIDI 模式"</string> <string name="usb_accessory_notification_title" msgid="1385394660861956980">"已連接 USB 配件"</string> <string name="usb_notification_message" msgid="4715163067192110676">"輕觸即可查看更多選項。"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同時按住音量調高鍵和調低鍵數秒,即可開啟「<xliff:g id="SERVICE">%1$s</xliff:g>」無障礙功能。這麼做可能會改變裝置的運作方式。\n\n你可以在 [設定] > [無障礙設定] 中變更這個快速鍵觸發的功能。"</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"開啟"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"不要開啟"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"已開啟"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"已關閉"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要將裝置的完整控制權授予「<xliff:g id="SERVICE">%1$s</xliff:g>」嗎?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"如果你開啟「<xliff:g id="SERVICE">%1$s</xliff:g>」,裝置將無法使用螢幕鎖定功能強化資料加密。"</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,可以將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"已由你的管理員更新"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由你的管理員刪除"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"確定"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"為了延長電池續航力,節約耗電量功能會執行以下動作:\n開啟深色主題\n關閉或限制背景活動、部分視覺效果和其他功能,例如「Hey Google」啟動字詞\n\n"<annotation id="url">"瞭解詳情"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"為了延長電池續航力,節約耗電量功能會執行以下動作:\n· 開啟深色主題\n· 關閉或限制背景活動、部分視覺效果和其他功能,例如「Hey Google」啟動字詞"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。你目前使用的應用程式可以存取資料,但存取頻率可能不如平時高。舉例來說,圖片可能不會自動顯示,在你輕觸後才會顯示。"</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟數據節省模式嗎?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index d7b3ee72d4f4..4acf3fe2d33c 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -200,9 +200,9 @@ <string name="factory_reset_warning" msgid="6858705527798047809">"Idivayisi yakho izosulwa"</string> <string name="factory_reset_message" msgid="2657049595153992213">"Uhlelo lokusebenza lomlawuli alikwazi ukusetshenziswa. Idivayisi yakho manje izosuswa.\n\nUma unemibuzo, xhumana nomlawuli wezinhlangano zakho."</string> <string name="printing_disabled_by" msgid="3517499806528864633">"Ukuphrinta kukhutshazwe nge-<xliff:g id="OWNER_APP">%s</xliff:g>."</string> - <string name="personal_apps_suspended_title" msgid="4543693107104417750">"Vula izinhlelo zakho zokusebenza zomuntu siqu"</string> - <string name="personal_apps_suspended_tomorrow_title" msgid="6414440257969874914">"Izinhlelo zokusebenza zizovinjelwa kusasa"</string> - <string name="personal_apps_suspended_text" msgid="8954038765131038226">"Umphathi wakho we-IT akavumeli ukuthi iphrofayela yakho yasemsebenzini imiswe okwesikhana izinsuku ezingaphezu kwezingu-<xliff:g id="DAYS">%1$d</xliff:g>"</string> + <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Vula iphrofayela yakho yomsebenzi"</string> + <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Izinhlelo zakho zokusebenza zomuntu siqu zivinjelwe kuze kube yilapho uvula iphrofayela yakho yomsebenzi"</string> + <string name="personal_apps_suspension_tomorrow_text" msgid="6322541302153673994">"Izinhlelo zakho zokusebenza zomuntu siqu zizovinjelwa kusasa"</string> <string name="personal_apps_suspended_turn_profile_on" msgid="4278188538997940785">"Vula iphrofayela yomsebenzi"</string> <string name="me" msgid="6207584824693813140">"Mina"</string> <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Okukhethwa kukho kwethebhulethi"</string> @@ -1631,10 +1631,8 @@ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Ukubambela phansi bobabili okhiye bevolumu amasekhondi ambalwa kuvula i-<xliff:g id="SERVICE">%1$s</xliff:g>, eyisici sokufinyelela Lokhu kungashintsha indlela idivayisi yakho esebenza ngayo.\n\nUngashintshela lesi sinqamuleli kwesinye isici Kuzilungiselelo > Ukufinyeleleka."</string> <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Vula"</string> <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ungavuli"</string> - <!-- no translation found for accessibility_shortcut_menu_item_status_on (6608392117189732543) --> - <skip /> - <!-- no translation found for accessibility_shortcut_menu_item_status_off (5531598275559472393) --> - <skip /> + <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"VULA"</string> + <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"VALA"</string> <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vumela i-<xliff:g id="SERVICE">%1$s</xliff:g> ukuthola ukulawula okuphelele kwedivayisi yakho?"</string> <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Uma uvula i-<xliff:g id="SERVICE">%1$s</xliff:g>, idivayisi yakho ngeke isebenzise ukukhiya kwakho kwesikrini sakho ukuthuthukisa ukubethelwa kwedatha."</string> <string name="accessibility_service_warning_description" msgid="291674995220940133">"Ukulawula okugcwele kulungele izinhlelo zokusebenza ezikusiza ngezidingo zokufinyelela, kodwa hhayi izinhlelo zokusebenza eziningi."</string> @@ -1796,8 +1794,10 @@ <string name="package_updated_device_owner" msgid="7560272363805506941">"Kubuyekezwe umlawuli wakho"</string> <string name="package_deleted_device_owner" msgid="2292335928930293023">"Kususwe umlawuli wakho"</string> <string name="confirm_battery_saver" msgid="5247976246208245754">"KULUNGILE"</string> - <string name="battery_saver_description_with_learn_more" msgid="1817385558636532621">"Ukuze unwebise impilo yebhethri, Isilondolozi Sebhethri:\n·Sivula itimu emnyama\n·Sivala noma sikhawulela umsebenzi wangasemuva, eminye imithelela yokubuka, nezinye izici ezifana nokuthi “Hey Google”\n\n"<annotation id="url">"Funda kabanzi"</annotation></string> - <string name="battery_saver_description" msgid="7618492104632328184">"Ukuze unwebise impilo yebhethri, Isilondolozi sebhethri:\n·Vula itimu emnyama\n·Vala noma ukhawulele umsebenzi wangasemuva, eminye imithelela yokubuka, nezinye izici ezifana nokuthi “Hey Google”"</string> + <!-- no translation found for battery_saver_description_with_learn_more (5997766757551917769) --> + <skip /> + <!-- no translation found for battery_saver_description (8587408568232177204) --> + <skip /> <string name="data_saver_description" msgid="4995164271550590517">"Ukusiza ukwehlisa ukusetshenziswa kwedatha, iseva yedatha igwema ezinye izinhlelo zokusebenza ukuthi zithumele noma zamukele idatha ngasemuva. Uhlelo lokusebenza olisebenzisa okwamanje lingafinyelela idatha, kodwa lingenza kanjalo kancane. Lokhu kungachaza, isibonelo, ukuthi izithombe azibonisi uze uzithephe."</string> <string name="data_saver_enable_title" msgid="7080620065745260137">"Vula iseva yedatha?"</string> <string name="data_saver_enable_button" msgid="4399405762586419726">"Vula"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index c388f751e628..33dd81dca33e 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4410,10 +4410,10 @@ shortcut enabled. [CHAR LIMIT=none] --> <string name="accessibility_shortcut_off">Don’t turn on</string> - <!-- Text for a feature status that is enabled. [CHAR LIMIT=10] --> + <!-- Text for a feature status that is enabled. [CHAR LIMIT=20] --> <string name="accessibility_shortcut_menu_item_status_on">ON</string> - <!-- Text for a feature status that is disabled. [CHAR LIMIT=10] --> + <!-- Text for a feature status that is disabled. [CHAR LIMIT=20] --> <string name="accessibility_shortcut_menu_item_status_off">OFF</string> <!-- Title for a warning about security implications of enabling an accessibility diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml index cc9c91441e84..67a57aaaa101 100644 --- a/core/tests/coretests/AndroidManifest.xml +++ b/core/tests/coretests/AndroidManifest.xml @@ -1470,7 +1470,7 @@ <key-sets> <key-set android:name="A" > <public-key android:name="keyA" - android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJoN1Nsgqf0V4C/bbN8wo8O2X/S5D76+5Mb9mlIsHkUTUTbHCNk+LxHIUYLm89YbP9zImrV0bUHLUAZUyoMUCiMCAwEAAQ=="/> + android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB"/> </key-set> <upgrade-key-set android:name="A"/> </key-sets> diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index c328d720426d..34417e68f11c 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -18,6 +18,8 @@ package android.app.activity; import static android.content.Intent.ACTION_EDIT; import static android.content.Intent.ACTION_VIEW; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static com.google.common.truth.Truth.assertThat; @@ -31,6 +33,7 @@ import android.app.Activity; import android.app.ActivityThread; import android.app.IApplicationThread; import android.app.PictureInPictureParams; +import android.app.ResourcesManager; import android.app.servertransaction.ActivityConfigurationChangeItem; import android.app.servertransaction.ActivityRelaunchItem; import android.app.servertransaction.ClientTransaction; @@ -38,8 +41,10 @@ import android.app.servertransaction.ClientTransactionItem; import android.app.servertransaction.NewIntentItem; import android.app.servertransaction.ResumeActivityItem; import android.app.servertransaction.StopActivityItem; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; +import android.hardware.display.DisplayManager; import android.os.IBinder; import android.util.MergedConfiguration; import android.view.Display; @@ -230,9 +235,9 @@ public class ActivityThreadTest { final ActivityThread activityThread = activity.getActivityThread(); final Configuration pendingConfig = new Configuration(); - pendingConfig.orientation = orientation == Configuration.ORIENTATION_LANDSCAPE - ? Configuration.ORIENTATION_PORTRAIT - : Configuration.ORIENTATION_LANDSCAPE; + pendingConfig.orientation = orientation == ORIENTATION_LANDSCAPE + ? ORIENTATION_PORTRAIT + : ORIENTATION_LANDSCAPE; pendingConfig.seq = seq + 2; activityThread.updatePendingActivityConfiguration(activity.getActivityToken(), pendingConfig); @@ -257,7 +262,7 @@ public class ActivityThreadTest { InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { final Configuration config = new Configuration(); config.seq = BASE_SEQ; - config.orientation = Configuration.ORIENTATION_PORTRAIT; + config.orientation = ORIENTATION_PORTRAIT; activityThread.handleActivityConfigurationChanged(activity.getActivityToken(), config, Display.INVALID_DISPLAY); @@ -307,6 +312,61 @@ public class ActivityThreadTest { } @Test + public void testOrientationChanged_DoesntOverrideVirtualDisplayOrientation() { + final TestActivity activity = mActivityTestRule.launchActivity(new Intent()); + final ActivityThread activityThread = activity.getActivityThread(); + + InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { + Context appContext = activity.getApplication(); + Configuration originalAppConfig = + new Configuration(appContext.getResources().getConfiguration()); + DisplayManager dm = appContext.getSystemService(DisplayManager.class); + + int virtualDisplayWidth; + int virtualDisplayHeight; + if (originalAppConfig.orientation == ORIENTATION_PORTRAIT) { + virtualDisplayWidth = 100; + virtualDisplayHeight = 200; + } else { + virtualDisplayWidth = 200; + virtualDisplayHeight = 100; + } + Display virtualDisplay = dm.createVirtualDisplay("virtual-display", + virtualDisplayWidth, virtualDisplayHeight, 200, null, 0).getDisplay(); + Context virtualDisplayContext = appContext.createDisplayContext(virtualDisplay); + int originalVirtualDisplayOrientation = virtualDisplayContext.getResources() + .getConfiguration().orientation; + + Configuration newAppConfig = new Configuration(originalAppConfig); + newAppConfig.seq++; + newAppConfig.orientation = newAppConfig.orientation == ORIENTATION_PORTRAIT + ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT; + + activityThread.updatePendingConfiguration(newAppConfig); + activityThread.handleConfigurationChanged(newAppConfig); + + try { + assertEquals("Virtual display orientation should not change when process" + + " configuration orientation changes.", + originalVirtualDisplayOrientation, + virtualDisplayContext.getResources().getConfiguration().orientation); + } finally { + // Make sure to reset the process config to prevent side effects to other + // tests. + Configuration activityThreadConfig = activityThread.getConfiguration(); + activityThreadConfig.seq = originalAppConfig.seq - 1; + + Configuration resourceManagerConfig = ResourcesManager.getInstance() + .getConfiguration(); + resourceManagerConfig.seq = originalAppConfig.seq - 1; + + activityThread.updatePendingConfiguration(originalAppConfig); + activityThread.handleConfigurationChanged(originalAppConfig); + } + }); + } + + @Test public void testResumeAfterNewIntent() { final Activity activity = mActivityTestRule.launchActivity(new Intent()); final ActivityThread activityThread = activity.getActivityThread(); @@ -386,7 +446,7 @@ public class ActivityThreadTest { final int numOfConfig = activity.mNumOfConfigChanges; Configuration config = new Configuration(); - config.orientation = Configuration.ORIENTATION_PORTRAIT; + config.orientation = ORIENTATION_PORTRAIT; config.seq = seq; activityThread.handleActivityConfigurationChanged(activity.getActivityToken(), config, Display.INVALID_DISPLAY); @@ -396,7 +456,7 @@ public class ActivityThreadTest { } config = new Configuration(); - config.orientation = Configuration.ORIENTATION_LANDSCAPE; + config.orientation = ORIENTATION_LANDSCAPE; config.seq = seq + 1; activityThread.handleActivityConfigurationChanged(activity.getActivityToken(), config, Display.INVALID_DISPLAY); diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index 79cb1f9f85f9..567552f66b35 100644 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -971,8 +971,6 @@ public class PackageManagerTests extends AndroidTestCase { if (retainData) { assertNotNull(info); assertEquals(info.packageName, ip.pkg.packageName); - File file = new File(info.dataDir); - assertTrue(file.exists()); } else { assertNull(info); } @@ -990,7 +988,6 @@ public class PackageManagerTests extends AndroidTestCase { @LargeTest - @Suppress // TODO(b/152007236): un-suppress when we root cause this public void testDeleteNormalInternalRetainData() throws Exception { deleteFromRawResource(0, PackageManager.DELETE_KEEP_DATA); } @@ -2306,7 +2303,6 @@ public class PackageManagerTests extends AndroidTestCase { } } - @Suppress // TODO(b/152007236): un-suppress when we root cause this public void testIsSignedBy() throws Exception { PackageManager pm = getPm(); String mPkgName = mContext.getPackageName(); diff --git a/core/tests/coretests/src/android/view/InsetsControllerTest.java b/core/tests/coretests/src/android/view/InsetsControllerTest.java index ccf4192ac2f4..cc85332590ba 100644 --- a/core/tests/coretests/src/android/view/InsetsControllerTest.java +++ b/core/tests/coretests/src/android/view/InsetsControllerTest.java @@ -93,6 +93,7 @@ public class InsetsControllerTest { private SurfaceSession mSession = new SurfaceSession(); private SurfaceControl mLeash; private ViewRootImpl mViewRoot; + private TestHost mTestHost; private TestHandler mTestHandler; private OffsettableClock mTestClock; private static InsetsModeSession sInsetsModeSession; @@ -123,8 +124,8 @@ public class InsetsControllerTest { } mTestClock = new OffsettableClock(); mTestHandler = new TestHandler(null, mTestClock); - mController = new InsetsController(new ViewRootInsetsControllerHost(mViewRoot), - (controller, type) -> { + mTestHost = new TestHost(mViewRoot); + mController = new InsetsController(mTestHost, (controller, type) -> { if (type == ITYPE_IME) { return new InsetsSourceConsumer(type, controller.getState(), Transaction::new, controller) { @@ -686,6 +687,24 @@ public class InsetsControllerTest { }); } + @Test + public void testRequestedState() { + InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { + mController.onControlsChanged(createSingletonControl(ITYPE_STATUS_BAR)); + mController.hide(statusBars()); + assertFalse(mTestHost.getModifiedState().peekSource(ITYPE_STATUS_BAR).isVisible()); + mController.onControlsChanged(new InsetsSourceControl[0]); + assertFalse(mTestHost.getModifiedState().peekSource(ITYPE_STATUS_BAR).isVisible()); + InsetsState newState = new InsetsState(mController.getState(), true /* copySource */); + mController.onStateChanged(newState); + assertFalse(mTestHost.getModifiedState().peekSource(ITYPE_STATUS_BAR).isVisible()); + mController.show(statusBars()); + assertFalse(mTestHost.getModifiedState().peekSource(ITYPE_STATUS_BAR).isVisible()); + mController.onControlsChanged(createSingletonControl(ITYPE_STATUS_BAR)); + assertTrue(mTestHost.getModifiedState().peekSource(ITYPE_STATUS_BAR).isVisible()); + }); + } + private void waitUntilNextFrame() throws Exception { final CountDownLatch latch = new CountDownLatch(1); Choreographer.getMainThreadInstance().postCallback(Choreographer.CALLBACK_COMMIT, @@ -717,4 +736,23 @@ public class InsetsControllerTest { mController.onControlsChanged(controls); return controls; } + + private static class TestHost extends ViewRootInsetsControllerHost { + + private InsetsState mModifiedState = new InsetsState(); + + TestHost(ViewRootImpl viewRoot) { + super(viewRoot); + } + + @Override + public void onInsetsModified(InsetsState insetsState) { + mModifiedState = new InsetsState(insetsState, true /* copySource */); + super.onInsetsModified(insetsState); + } + + public InsetsState getModifiedState() { + return mModifiedState; + } + } } diff --git a/core/tests/coretests/src/android/view/InsetsSourceTest.java b/core/tests/coretests/src/android/view/InsetsSourceTest.java index b3f6fe9e88b9..c61f33e15b18 100644 --- a/core/tests/coretests/src/android/view/InsetsSourceTest.java +++ b/core/tests/coretests/src/android/view/InsetsSourceTest.java @@ -16,6 +16,7 @@ package android.view; +import static android.view.InsetsState.ITYPE_CAPTION_BAR; import static android.view.InsetsState.ITYPE_IME; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; @@ -46,11 +47,13 @@ public class InsetsSourceTest { private InsetsSource mSource = new InsetsSource(ITYPE_NAVIGATION_BAR); private InsetsSource mImeSource = new InsetsSource(ITYPE_IME); + private InsetsSource mCaptionSource = new InsetsSource(ITYPE_CAPTION_BAR); @Before public void setUp() { mSource.setVisible(true); mImeSource.setVisible(true); + mCaptionSource.setVisible(true); } @Test @@ -102,6 +105,17 @@ public class InsetsSourceTest { } @Test + public void testCalculateInsets_caption_resizing() { + mCaptionSource.setFrame(new Rect(0, 0, 100, 100)); + Insets insets = mCaptionSource.calculateInsets(new Rect(0, 0, 200, 200), false); + assertEquals(Insets.of(0, 100, 0, 0), insets); + insets = mCaptionSource.calculateInsets(new Rect(0, 0, 50, 200), false); + assertEquals(Insets.of(0, 100, 0, 0), insets); + insets = mCaptionSource.calculateInsets(new Rect(100, 100, 200, 500), false); + assertEquals(Insets.of(0, 100, 0, 0), insets); + } + + @Test public void testCalculateInsets_invisible() { mSource.setFrame(new Rect(0, 0, 500, 100)); mSource.setVisible(false); diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 2d00010f51ee..da52cfef6bc6 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -686,6 +686,23 @@ public class AudioSystem String effectName = effects.length == 0 ? "None" : effects[0].name; if (cb != null) { + ArrayList<AudioPatch> audioPatches = new ArrayList<>(); + if (AudioManager.listAudioPatches(audioPatches) == AudioManager.SUCCESS) { + boolean patchFound = false; + int patchHandle = recordingFormat[6]; + for (AudioPatch patch : audioPatches) { + if (patch.id() == patchHandle) { + patchFound = true; + break; + } + } + if (!patchFound) { + // The cached audio patches in AudioManager is not up-to-date. + // Reset audio port generation to ensure callback side can + // get up-to-date audio port information. + AudioManager.resetAudioPortGeneration(); + } + } // TODO receive package name from native cb.onRecordingConfigurationChanged(event, riid, uid, session, source, portId, silenced, recordingFormat, clientEffects, effects, activeSource, ""); diff --git a/media/java/android/media/tv/tuner/filter/MediaEvent.java b/media/java/android/media/tv/tuner/filter/MediaEvent.java index 247c1c47560a..af63070027a2 100644 --- a/media/java/android/media/tv/tuner/filter/MediaEvent.java +++ b/media/java/android/media/tv/tuner/filter/MediaEvent.java @@ -28,14 +28,19 @@ import android.media.MediaCodec.LinearBlock; */ @SystemApi public class MediaEvent extends FilterEvent { - private native int nativeGetAudioHandle(); + private long mNativeContext; + private final Object mLock = new Object(); + + private native Long nativeGetAudioHandle(); + private native LinearBlock nativeGetLinearBlock(); + private native void nativeFinalize(); private final int mStreamId; private final boolean mIsPtsPresent; private final long mPts; private final long mDataLength; private final long mOffset; - private final LinearBlock mLinearBlock; + private LinearBlock mLinearBlock; private final boolean mIsSecureMemory; private final long mDataId; private final int mMpuSequenceNumber; @@ -103,7 +108,12 @@ public class MediaEvent extends FilterEvent { */ @Nullable public LinearBlock getLinearBlock() { - return mLinearBlock; + synchronized (mLock) { + if (mLinearBlock == null) { + mLinearBlock = nativeGetLinearBlock(); + } + return mLinearBlock; + } } /** @@ -163,4 +173,15 @@ public class MediaEvent extends FilterEvent { public AudioDescriptor getExtraMetaData() { return mExtraMetaData; } + + + /** + * Finalize the MediaEvent object. + * @hide + */ + @Override + protected void finalize() { + nativeFinalize(); + mNativeContext = 0; + } } diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index b2b707b00829..98e68b8b53f2 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -232,6 +232,13 @@ void JMediaCodec::release() { }); } +void JMediaCodec::releaseAsync() { + if (mCodec != NULL) { + mCodec->releaseAsync(); + } + mInitStatus = NO_INIT; +} + JMediaCodec::~JMediaCodec() { if (mLooper != NULL) { /* MediaCodec and looper should have been released explicitly already @@ -1114,7 +1121,10 @@ static sp<JMediaCodec> getMediaCodec(JNIEnv *env, jobject thiz) { } static void android_media_MediaCodec_release(JNIEnv *env, jobject thiz) { - setMediaCodec(env, thiz, NULL); + sp<JMediaCodec> codec = getMediaCodec(env, thiz); + if (codec != NULL) { + codec->releaseAsync(); + } } static void throwCodecException(JNIEnv *env, status_t err, int32_t actionCode, const char *msg) { @@ -2889,7 +2899,7 @@ static void android_media_MediaCodec_native_setup( static void android_media_MediaCodec_native_finalize( JNIEnv *env, jobject thiz) { - android_media_MediaCodec_release(env, thiz); + setMediaCodec(env, thiz, NULL); } // MediaCodec.LinearBlock diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h index 8899fee7a73d..400ce1bc98e7 100644 --- a/media/jni/android_media_MediaCodec.h +++ b/media/jni/android_media_MediaCodec.h @@ -61,6 +61,7 @@ struct JMediaCodec : public AHandler { void registerSelf(); void release(); + void releaseAsync(); status_t enableOnFrameRenderedListener(jboolean enable); diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index ab311c0e245a..805831442756 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -21,8 +21,7 @@ #include "android_media_tv_Tuner.h" #include "android_runtime/AndroidRuntime.h" -#include <C2BlockInternal.h> -#include <C2HandleIonInternal.h> +#include <android-base/logging.h> #include <android/hardware/tv/tuner/1.0/ITuner.h> #include <media/stagefright/foundation/ADebug.h> #include <nativehelper/JNIHelp.h> @@ -145,6 +144,7 @@ struct fields_t { jfieldID descramblerContext; jfieldID dvrRecorderContext; jfieldID dvrPlaybackContext; + jfieldID mediaEventContext; jmethodID frontendInitID; jmethodID filterInitID; jmethodID timeFilterInitID; @@ -169,6 +169,12 @@ static fields_t gFields; static int IP_V4_LENGTH = 4; static int IP_V6_LENGTH = 16; +void DestroyCallback(const C2Buffer * /* buf */, void *arg) { + android::sp<android::MediaEvent> event = (android::MediaEvent *)arg; + event->mAvHandleRefCnt--; + event->finalize(); +} + namespace android { /////////////// LnbCallback /////////////////////// LnbCallback::LnbCallback(jobject lnbObj, LnbId id) : mId(id) { @@ -280,17 +286,69 @@ MQ& Dvr::getDvrMQ() { return *mDvrMQ; } -/////////////// FilterCallback /////////////////////// -//TODO: implement filter callback -jobject FilterCallback::handleToLinearBlock(const native_handle_t* handle, uint32_t size) { - ALOGD("FilterCallback::handleToLinearBlock"); - C2HandleIon* ion = new C2HandleIon(handle->data[0], size); - std::shared_ptr<C2LinearBlock> block = _C2BlockFactory::CreateLinearBlock(ion); +/////////////// C2DataIdInfo /////////////////////// + +C2DataIdInfo::C2DataIdInfo(uint32_t index, uint64_t value) : C2Param(kParamSize, index) { + CHECK(isGlobal()); + CHECK_EQ(C2Param::INFO, kind()); + DummyInfo info{value}; + memcpy(this + 1, static_cast<C2Param *>(&info) + 1, kParamSize - sizeof(C2Param)); +} + +/////////////// MediaEvent /////////////////////// + +MediaEvent::MediaEvent(sp<IFilter> iFilter, hidl_handle avHandle, + uint64_t dataId, uint64_t dataLength, jobject obj) : mIFilter(iFilter), + mDataId(dataId), mDataLength(dataLength), mBuffer(nullptr), + mDataIdRefCnt(0), mAvHandleRefCnt(0), mIonHandle(nullptr) { + JNIEnv *env = AndroidRuntime::getJNIEnv(); + mMediaEventObj = env->NewWeakGlobalRef(obj); + mAvHandle = native_handle_clone(avHandle.getNativeHandle()); +} + +MediaEvent::~MediaEvent() { + JNIEnv *env = AndroidRuntime::getJNIEnv(); + env->DeleteWeakGlobalRef(mMediaEventObj); + mMediaEventObj = NULL; + native_handle_delete(mAvHandle); + if (mIonHandle != NULL) { + delete mIonHandle; + } + if (mC2Buffer != NULL) { + mC2Buffer->unregisterOnDestroyNotify(&DestroyCallback, this); + } +} + +void MediaEvent::finalize() { + if (mAvHandleRefCnt == 0) { + mIFilter->releaseAvHandle(hidl_handle(mAvHandle), mDataIdRefCnt == 0 ? mDataId : 0); + native_handle_close(mAvHandle); + } +} + +jobject MediaEvent::getLinearBlock() { + ALOGD("MediaEvent::getLinearBlock"); + if (mAvHandle == NULL) { + return NULL; + } + if (mLinearBlockObj != NULL) { + return mLinearBlockObj; + } + mIonHandle = new C2HandleIon(mAvHandle->data[0], mDataLength); + std::shared_ptr<C2LinearBlock> block = _C2BlockFactory::CreateLinearBlock(mIonHandle); JNIEnv *env = AndroidRuntime::getJNIEnv(); std::unique_ptr<JMediaCodecLinearBlock> context{new JMediaCodecLinearBlock}; context->mBlock = block; - + mC2Buffer = context->toC2Buffer(0, mDataLength); + if (mAvHandle->numInts > 0) { + // use first int in the native_handle as the index + int index = mAvHandle->data[mAvHandle->numFds]; + std::shared_ptr<C2Param> c2param = std::make_shared<C2DataIdInfo>(index, mDataId); + std::shared_ptr<C2Info> info(std::static_pointer_cast<C2Info>(c2param)); + mC2Buffer->setInfo(info); + } + mC2Buffer->registerOnDestroyNotify(&DestroyCallback, this); jobject linearBlock = env->NewObject( env->FindClass("android/media/MediaCodec$LinearBlock"), @@ -300,9 +358,18 @@ jobject FilterCallback::handleToLinearBlock(const native_handle_t* handle, uint3 gFields.linearBlockSetInternalStateID, (jlong)context.release(), true); - return linearBlock; + mLinearBlockObj = env->NewWeakGlobalRef(linearBlock); + mAvHandleRefCnt++; + return mLinearBlockObj; } +uint64_t MediaEvent::getAudioHandle() { + mDataIdRefCnt++; + return mDataId; +} + +/////////////// FilterCallback /////////////////////// + jobjectArray FilterCallback::getSectionEvent( jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) { JNIEnv *env = AndroidRuntime::getJNIEnv(); @@ -333,6 +400,7 @@ jobjectArray FilterCallback::getMediaEvent( "<init>", "(IZJJJLandroid/media/MediaCodec$LinearBlock;" "ZJIZLandroid/media/tv/tuner/filter/AudioDescriptor;)V"); + jfieldID eventContext = env->GetFieldID(eventClazz, "mNativeContext", "J"); for (int i = 0; i < events.size(); i++) { auto event = events[i]; @@ -358,12 +426,6 @@ jobjectArray FilterCallback::getMediaEvent( } jlong dataLength = static_cast<jlong>(mediaEvent.dataLength); - const native_handle_t* h = NULL; - jobject block = NULL; - if (mediaEvent.avMemory != NULL) { - h = mediaEvent.avMemory.getNativeHandle(); - block = handleToLinearBlock(h, dataLength); - } jint streamId = static_cast<jint>(mediaEvent.streamId); jboolean isPtsPresent = static_cast<jboolean>(mediaEvent.isPtsPresent); @@ -376,8 +438,18 @@ jobjectArray FilterCallback::getMediaEvent( jobject obj = env->NewObject(eventClazz, eventInit, streamId, isPtsPresent, pts, dataLength, - offset, block, isSecureMemory, avDataId, mpuSequenceNumber, isPesPrivateData, + offset, NULL, isSecureMemory, avDataId, mpuSequenceNumber, isPesPrivateData, audioDescriptor); + + if (mediaEvent.avMemory.getNativeHandle() != NULL || mediaEvent.avDataId != 0) { + sp<MediaEvent> mediaEventSp = + new MediaEvent(mIFilter, mediaEvent.avMemory, + mediaEvent.avDataId, dataLength, obj); + mediaEventSp->mAvHandleRefCnt++; + env->SetLongField(obj, eventContext, (jlong) mediaEventSp.get()); + mediaEventSp->incStrong(obj); + } + env->SetObjectArrayElement(arr, i, obj); } return arr; @@ -594,10 +666,10 @@ Return<void> FilterCallback::onFilterStatus(const DemuxFilterStatus status) { return Void(); } -void FilterCallback::setFilter(const jobject filter) { +void FilterCallback::setFilter(const sp<Filter> filter) { ALOGD("FilterCallback::setFilter"); - JNIEnv *env = AndroidRuntime::getJNIEnv(); - mFilter = env->NewWeakGlobalRef(filter); + mFilter = filter->mFilterObj; + mIFilter = filter->mFilterSp; } FilterCallback::~FilterCallback() { @@ -1431,7 +1503,7 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) { filterSp->incStrong(filterObj); env->SetLongField(filterObj, gFields.filterContext, (jlong)filterSp.get()); - callback->setFilter(filterObj); + callback->setFilter(filterSp); return filterObj; } @@ -2390,6 +2462,9 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) { gFields.onDvrPlaybackStatusID = env->GetMethodID(dvrPlaybackClazz, "onPlaybackStatusChanged", "(I)V"); + jclass mediaEventClazz = env->FindClass("android/media/tv/tuner/filter/MediaEvent"); + gFields.mediaEventContext = env->GetFieldID(mediaEventClazz, "mNativeContext", "J"); + jclass linearBlockClazz = env->FindClass("android/media/MediaCodec$LinearBlock"); gFields.linearBlockInitID = env->GetMethodID(linearBlockClazz, "<init>", "()V"); gFields.linearBlockSetInternalStateID = @@ -3507,6 +3582,52 @@ static jlong android_media_tv_Tuner_write_dvr_to_array( return copyData(env, dvrSp->mDvrMQ, dvrSp->mDvrMQEventFlag, buffer, offset, size); } +static sp<MediaEvent> getMediaEventSp(JNIEnv *env, jobject mediaEventObj) { + return (MediaEvent *)env->GetLongField(mediaEventObj, gFields.mediaEventContext); +} + +static jobject android_media_tv_Tuner_media_event_get_linear_block( + JNIEnv* env, jobject mediaEventObj) { + sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj); + if (mediaEventSp == NULL) { + ALOGD("Failed get MediaEvent"); + return NULL; + } + + return mediaEventSp->getLinearBlock(); +} + +static jobject android_media_tv_Tuner_media_event_get_audio_handle( + JNIEnv* env, jobject mediaEventObj) { + sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj); + if (mediaEventSp == NULL) { + ALOGD("Failed get MediaEvent"); + return NULL; + } + + android::Mutex::Autolock autoLock(mediaEventSp->mLock); + uint64_t audioHandle = mediaEventSp->getAudioHandle(); + jclass longClazz = env->FindClass("java/lang/Long"); + jmethodID longInit = env->GetMethodID(longClazz, "<init>", "(J)V"); + + jobject longObj = env->NewObject(longClazz, longInit, static_cast<jlong>(audioHandle)); + return longObj; +} + +static void android_media_tv_Tuner_media_event_finalize(JNIEnv* env, jobject mediaEventObj) { + sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj); + if (mediaEventSp == NULL) { + ALOGD("Failed get MediaEvent"); + return; + } + + android::Mutex::Autolock autoLock(mediaEventSp->mLock); + mediaEventSp->mAvHandleRefCnt--; + mediaEventSp->finalize(); + + mediaEventSp->decStrong(mediaEventObj); +} + static const JNINativeMethod gTunerMethods[] = { { "nativeInit", "()V", (void *)android_media_tv_Tuner_native_init }, { "nativeSetup", "()V", (void *)android_media_tv_Tuner_native_setup }, @@ -3629,6 +3750,15 @@ static const JNINativeMethod gLnbMethods[] = { { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_lnb }, }; +static const JNINativeMethod gMediaEventMethods[] = { + { "nativeGetLinearBlock", "()Landroid/media/MediaCodec$LinearBlock;", + (void *)android_media_tv_Tuner_media_event_get_linear_block }, + { "nativeGetAudioHandle", "()Ljava/lang/Long;", + (void *)android_media_tv_Tuner_media_event_get_audio_handle }, + { "nativeFinalize", "()V", + (void *)android_media_tv_Tuner_media_event_finalize }, +}; + static bool register_android_media_tv_Tuner(JNIEnv *env) { if (AndroidRuntime::registerNativeMethods( env, "android/media/tv/tuner/Tuner", gTunerMethods, NELEM(gTunerMethods)) != JNI_OK) { @@ -3677,6 +3807,13 @@ static bool register_android_media_tv_Tuner(JNIEnv *env) { ALOGE("Failed to register lnb native methods"); return false; } + if (AndroidRuntime::registerNativeMethods( + env, "android/media/tv/tuner/filter/MediaEvent", + gMediaEventMethods, + NELEM(gMediaEventMethods)) != JNI_OK) { + ALOGE("Failed to register MediaEvent native methods"); + return false; + } return true; } diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index 3da78acb2f90..c469a3ad8b76 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -18,10 +18,14 @@ #define _ANDROID_MEDIA_TV_TUNER_H_ #include <android/hardware/tv/tuner/1.0/ITuner.h> +#include <C2BlockInternal.h> +#include <C2HandleIonInternal.h> +#include <C2ParamDef.h> #include <fmq/MessageQueue.h> #include <fstream> #include <string> #include <unordered_map> +#include <utils/Mutex.h> #include <utils/RefBase.h> #include "jni.h" @@ -30,6 +34,7 @@ using ::android::hardware::EventFlag; using ::android::hardware::MQDescriptorSync; using ::android::hardware::MessageQueue; using ::android::hardware::Return; +using ::android::hardware::hidl_handle; using ::android::hardware::hidl_vec; using ::android::hardware::kSynchronizedReadWrite; using ::android::hardware::tv::tuner::V1_0::DemuxFilterEvent; @@ -106,15 +111,48 @@ struct Dvr : public RefBase { int mFd; }; +struct MediaEvent : public RefBase { + MediaEvent(sp<IFilter> iFilter, hidl_handle avHandle, uint64_t dataId, + uint64_t dataLength, jobject obj); + ~MediaEvent(); + jobject getLinearBlock(); + uint64_t getAudioHandle(); + void finalize(); + + sp<IFilter> mIFilter; + native_handle_t* mAvHandle; + uint64_t mDataId; + uint64_t mDataLength; + uint8_t* mBuffer; + android::Mutex mLock; + int mDataIdRefCnt; + int mAvHandleRefCnt; + jweak mMediaEventObj; + jweak mLinearBlockObj; + C2HandleIon* mIonHandle; + std::shared_ptr<C2Buffer> mC2Buffer; +}; + +struct Filter : public RefBase { + Filter(sp<IFilter> sp, jobject obj); + ~Filter(); + int close(); + sp<IFilter> getIFilter(); + sp<IFilter> mFilterSp; + std::unique_ptr<MQ> mFilterMQ; + EventFlag* mFilterMQEventFlag; + jweak mFilterObj; +}; + struct FilterCallback : public IFilterCallback { ~FilterCallback(); virtual Return<void> onFilterEvent(const DemuxFilterEvent& filterEvent); virtual Return<void> onFilterStatus(const DemuxFilterStatus status); - void setFilter(const jobject filter); - jobject handleToLinearBlock(const native_handle_t* handle, uint32_t size); + void setFilter(const sp<Filter> filter); private: jweak mFilter; + sp<IFilter> mIFilter; jobjectArray getSectionEvent( jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events); jobjectArray getMediaEvent( @@ -144,17 +182,6 @@ struct FrontendCallback : public IFrontendCallback { FrontendId mId; }; -struct Filter : public RefBase { - Filter(sp<IFilter> sp, jobject obj); - ~Filter(); - int close(); - sp<IFilter> getIFilter(); - sp<IFilter> mFilterSp; - std::unique_ptr<MQ> mFilterMQ; - EventFlag* mFilterMQEventFlag; - jweak mFilterObj; -}; - struct TimeFilter : public RefBase { TimeFilter(sp<ITimeFilter> sp, jweak obj); ~TimeFilter(); @@ -219,6 +246,14 @@ private: static jobject getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps); }; +class C2DataIdInfo : public C2Param { +public: + C2DataIdInfo(uint32_t index, uint64_t value); +private: + typedef C2GlobalParam<C2Info, C2Int64Value, 0> DummyInfo; + static const size_t kParamSize = sizeof(DummyInfo); +}; + } // namespace android #endif // _ANDROID_MEDIA_TV_TUNER_H_ diff --git a/media/packages/BluetoothMidiService/Android.bp b/media/packages/BluetoothMidiService/Android.bp index 77e6a14e1f00..48fc329276bd 100644 --- a/media/packages/BluetoothMidiService/Android.bp +++ b/media/packages/BluetoothMidiService/Android.bp @@ -20,7 +20,6 @@ android_library { "src/**/*.java", ], platform_apis: true, - plugins: ["java_api_finder"], manifest: "AndroidManifestBase.xml", } diff --git a/packages/CarSystemUI/res/layout/super_notification_shade.xml b/packages/CarSystemUI/res/layout/super_notification_shade.xml index e36d8caa67f3..db71c91ca695 100644 --- a/packages/CarSystemUI/res/layout/super_notification_shade.xml +++ b/packages/CarSystemUI/res/layout/super_notification_shade.xml @@ -44,14 +44,6 @@ </com.android.systemui.statusbar.BackDropView> <com.android.systemui.statusbar.ScrimView - android:id="@+id/scrim_for_bubble" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:importantForAccessibility="no" - sysui:ignoreRightInset="true" - /> - - <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_behind" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/packages/CarSystemUI/res/values/strings.xml b/packages/CarSystemUI/res/values/strings.xml index 881e746d633d..9fae4b3e2b46 100644 --- a/packages/CarSystemUI/res/values/strings.xml +++ b/packages/CarSystemUI/res/values/strings.xml @@ -16,15 +16,15 @@ --> <resources> - <!-- String to represent lowest setting of an HVAC system [CHAR LIMIT=5]--> + <!-- String to represent lowest setting of an HVAC system [CHAR LIMIT=10]--> <string name="hvac_min_text">Min</string> - <!-- String to represent largest setting of an HVAC system [CHAR LIMIT=5]--> + <!-- String to represent largest setting of an HVAC system [CHAR LIMIT=10]--> <string name="hvac_max_text">Max</string> <!-- Text for voice recognition toast. [CHAR LIMIT=60] --> <string name="voice_recognition_toast">Voice recognition now handled by connected Bluetooth device</string> - <!-- Name of Guest Profile. [CHAR LIMIT=30] --> + <!-- Name of Guest Profile. [CHAR LIMIT=35] --> <string name="car_guest">Guest</string> - <!-- Title for button that starts a guest session. [CHAR LIMIT=30] --> + <!-- Title for button that starts a guest session. [CHAR LIMIT=35] --> <string name="start_guest_session">Guest</string> <!-- Title for button that adds a new user. [CHAR LIMIT=30] --> <string name="car_add_user">Add User</string> diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index f1ec606243c4..83319cf788c2 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -577,8 +577,11 @@ public class ExternalStorageProvider extends FileSystemProvider { public Cursor querySearchDocuments(String rootId, String[] projection, Bundle queryArgs) throws FileNotFoundException { final File parent; + synchronized (mRootsLock) { - parent = mRoots.get(rootId).path; + RootInfo root = mRoots.get(rootId); + parent = root.visiblePath != null ? root.visiblePath + : root.path; } return querySearchDocuments(parent, projection, Collections.emptySet(), queryArgs); diff --git a/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml index 04de17474368..afebeba2d5ff 100644 --- a/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml +++ b/packages/SettingsLib/LayoutPreference/res/drawable/ic_swap_horiz_blue.xml @@ -18,8 +18,9 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="?android:attr/colorAccent"> <path android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z" - android:fillColor="#4285F4"/> + android:fillColor="@android:color/white"/> </vector> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 7587cc1338f4..7ca0e809143a 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -719,7 +719,7 @@ <!-- Setting Checkbox summary whether to disable Wifi scan throttling [CHAR LIMIT=NONE] --> <string name="wifi_scan_throttling_summary">Reduces battery drain & improves network performance</string> <!-- Setting Checkbox title whether to enable WiFi enhanced mac randomization. [CHAR LIMIT=NONE] --> - <string name="wifi_enhanced_mac_randomization_summary">This toggle affects MAC randomization behavior for client mode only.\nWhen this mode is activated, any networks that have MAC randomization enabled may have their MAC addresses re\u2011randomized during association, depending on when the client last disconnected from the network. Re\u2011randomization does not occur if the device reconnects in 4 hours or less.</string> + <string name="wifi_enhanced_mac_randomization_summary">When this mode is enabled, this device\u2019s MAC address may change each time it connects to a network that has MAC randomization enabled.</string> <!-- Label indicating network has been manually marked as metered --> <string name="wifi_metered_label">Metered</string> <!-- Label indicating network has been manually marked as unmetered --> diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java index 7ef080178a2f..bd0b9e93b09d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java @@ -185,7 +185,12 @@ public class MetricsFeatureProvider { sourceMetricsCategory); } - private boolean logSettingsTileClick(String logKey, int sourceMetricsCategory) { + /** + * Logs an event when the setting key is clicked. + * + * @return true if the key is loggable, otherwise false + */ + public boolean logSettingsTileClick(String logKey, int sourceMetricsCategory) { if (TextUtils.isEmpty(logKey)) { // Not loggable return false; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java index 204a93333d81..0e2a3cbbbd75 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java @@ -218,4 +218,29 @@ public class MetricsFeatureProviderTest { assertThat(mProvider.getAttribution(activity)).isEqualTo(100); } + + @Test + public void logSettingsTileClick_hasKey_shouldLog() { + final String key = "abc"; + final boolean loggable = mProvider.logSettingsTileClick(key, + MetricsEvent.SETTINGS_GESTURES); + + assertThat(loggable).isTrue(); + verify(mLogWriter).action( + MetricsEvent.SETTINGS_GESTURES, + MetricsEvent.ACTION_SETTINGS_TILE_CLICK, + SettingsEnums.PAGE_UNKNOWN, + key, + 0); + } + + @Test + public void logSettingsTileClick_keyEmpty_shouldNotLog() { + final String key = ""; + boolean loggable = mProvider.logSettingsTileClick(key, + MetricsEvent.SETTINGS_GESTURES); + + assertThat(loggable).isFalse(); + verifyNoMoreInteractions(mLogWriter); + } } diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index f63365bcd369..b55d246de65c 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -63,6 +63,8 @@ android_library { "androidx.lifecycle_lifecycle-extensions", "androidx.dynamicanimation_dynamicanimation", "androidx-constraintlayout_constraintlayout", + "kotlinx-coroutines-android", + "kotlinx-coroutines-core", "iconloader_base", "SystemUI-tags", "SystemUI-proto", diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java index f6f8f53c07f2..d43aaf07c6be 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/DetailAdapter.java @@ -19,6 +19,7 @@ import android.content.Intent; import android.view.View; import android.view.ViewGroup; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.plugins.annotations.ProvidesInterface; @ProvidesInterface(version = DetailAdapter.VERSION) @@ -44,4 +45,18 @@ public interface DetailAdapter { default boolean hasHeader() { return true; } + + default UiEventLogger.UiEventEnum openDetailEvent() { + return INVALID; + } + + default UiEventLogger.UiEventEnum closeDetailEvent() { + return INVALID; + } + + default UiEventLogger.UiEventEnum moreSettingsEvent() { + return INVALID; + } + + UiEventLogger.UiEventEnum INVALID = () -> 0; } diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java index e586c38a286a..aeedc16ffbd4 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java @@ -20,6 +20,7 @@ import android.graphics.drawable.Drawable; import android.metrics.LogMaker; import android.service.quicksettings.Tile; +import com.android.internal.logging.InstanceId; import com.android.systemui.plugins.annotations.DependsOn; import com.android.systemui.plugins.annotations.ProvidesInterface; import com.android.systemui.plugins.qs.QSTile.Callback; @@ -81,6 +82,18 @@ public interface QSTile { return logMaker; } + /** + * Return a string to be used to identify the tile in UiEvents. + */ + default String getMetricsSpec() { + return getClass().getSimpleName(); + } + + /** + * Return an {@link InstanceId} to be used to identify the tile in UiEvents. + */ + InstanceId getInstanceId(); + @ProvidesInterface(version = Callback.VERSION) public interface Callback { public static final int VERSION = 1; diff --git a/packages/SystemUI/res/layout-land/auth_credential_password_view.xml b/packages/SystemUI/res/layout-land/auth_credential_password_view.xml new file mode 100644 index 000000000000..d89f329039c6 --- /dev/null +++ b/packages/SystemUI/res/layout-land/auth_credential_password_view.xml @@ -0,0 +1,61 @@ +<!-- + ~ Copyright (C) 2020 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<com.android.systemui.biometrics.AuthCredentialPasswordView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center_horizontal" + android:elevation="@dimen/biometric_dialog_elevation"> + + <TextView + android:id="@+id/title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + style="@style/TextAppearance.AuthCredential.Title"/> + + <TextView + android:id="@+id/subtitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + style="@style/TextAppearance.AuthCredential.Subtitle"/> + + <TextView + android:id="@+id/description" + android:layout_width="match_parent" + android:layout_height="wrap_content" + style="@style/TextAppearance.AuthCredential.Description"/> + + <EditText + android:id="@+id/lockPassword" + android:layout_width="208dp" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:minHeight="48dp" + android:gravity="center" + android:inputType="textPassword" + android:maxLength="500" + android:imeOptions="actionNext|flagNoFullscreen|flagForceAscii" + style="@style/TextAppearance.AuthCredential.PasswordEntry"/> + + <TextView + android:id="@+id/error" + android:layout_width="match_parent" + android:layout_height="wrap_content" + style="@style/TextAppearance.AuthCredential.Error"/> + +</com.android.systemui.biometrics.AuthCredentialPasswordView>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml index e6f27904ee58..21a671cf9d5a 100644 --- a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml +++ b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml @@ -47,14 +47,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" - android:paddingEnd="8dp" android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title" /> <TextView android:id="@+id/conversation_notification_sender" - android:layout_width="match_parent" + android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" style="?attr/hybridNotificationTextStyle" diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI/res/layout/super_notification_shade.xml index dc070cbaae26..d322e0905ef6 100644 --- a/packages/SystemUI/res/layout/super_notification_shade.xml +++ b/packages/SystemUI/res/layout/super_notification_shade.xml @@ -44,14 +44,6 @@ </com.android.systemui.statusbar.BackDropView> <com.android.systemui.statusbar.ScrimView - android:id="@+id/scrim_for_bubble" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:importantForAccessibility="no" - sysui:ignoreRightInset="true" - /> - - <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_behind" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 48248e1c24d0..73b293fc0901 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skermopname"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Begin"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swiep op om programme te wissel"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Sleep regs om programme vinnig te wissel"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Wissel oorsig"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Verskyn boaan die gespreksafdeling en lyk soos \'n borrel."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Instellings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen onlangse borrels nie"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Onlangse borrels en borrels wat toegemaak is, sal hier verskyn"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Hierdie kennisgewings kan nie gewysig word nie."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Kies kontroles om toegang vanaf die aan/af-kieslys te kry"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hou en sleep om kontroles te herrangskik"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroles is verwyder"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Die lys met alle kontroles kon nie gelaai word nie."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Ander"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Voeg by toestelkontroles"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontroles opgedateer"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN bevat letters of simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifieer <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Verkeerde PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifieer tans …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Voer PIN in"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Probeer \'n ander PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Laai tans aanbevelings"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Maak hierdie mediasessie toe"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Onaktief, gaan program na"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Fout, probeer tans weer …"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Toestel is verwyder"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Kan nie status laai nie"</string> <string name="controls_error_failed" msgid="960228639198558525">"Fout, probeer weer"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Besig"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hou aan/af-skakelaar in om nuwe kontroles te sien"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index d3dd22b2c8d8..bc271198332d 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"የማያ ገጽ ቀረጻ"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ጀምር"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"አቁም"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"መሣሪያ"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"መተግበሪያዎችን ለመቀየር ወደ ላይ ያንሸራትቱ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"መተግበሪያዎችን በፍጥነት ለመቀየር ወደ ቀኝ ይጎትቱ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"አጠቃላይ እይታን ቀያይር"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"በውይይት ክፍል አናት ላይ ይታያል እና እንደ አረፋ ብቅ ይላል"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ቅንብሮች"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ቅድሚያ"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ውይይት-ተኮር ቅንብሮችን አይደግፍም"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ምንም የቅርብ ጊዜ አረፋዎች የሉም"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"የቅርብ ጊዜ አረፋዎች እና የተሰናበቱ አረፋዎች እዚህ ብቅ ይላሉ"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ከኃይል ምናሌ ላይ ለመድረስ መቆጣጠሪያዎችን ይምረጡ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"መቆጣጠሪያዎችን ዳግም ለማስተካከል ይያዙ እና ይጎትቱ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ሁሉም መቆጣጠሪያዎች ተወግደዋል"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"የሁሉም መቆጣጠሪያዎች ዝርዝር ሊጫን አልተቻለም።"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ሌላ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ወደ የመሣሪያ መቆጣጠሪያዎች ያክሉ"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"መቆጣጠሪያዎች ተዘምነዋል"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ፒን ፊደሎችን ወይም ምልክቶችን ይይዛል"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> አረጋግጥ"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"የተሳሳተ ፒን"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"በማረጋገጥ ላይ…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ፒን ያስገቡ"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ሌላ ፒን ይሞክሩ"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ምክሮችን በመጫን ላይ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ይህን የሚዲያ ክፍለ-ጊዜ ዝጋ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ንቁ ያልኾነ፣ መተግበሪያን ይፈትሹ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ስህተት፣ እንደገና በመሞከር ላይ…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"መሣሪያ ተወግዷል"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ሁኔታን መጫን አልተቻልም"</string> <string name="controls_error_failed" msgid="960228639198558525">"ስህተት፣ እንደገና ይሞክሩ"</string> <string name="controls_in_progress" msgid="4421080500238215939">"በሂደት ላይ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"አዲስ መቆጣጠሪያዎችን ለማየት የኃይል አዝራር ይያዙ"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index dd108d0497fc..564ba0d7b86c 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -438,6 +438,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"تسجيل الشاشة"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"بدء"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"إيقاف"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"مرّر سريعًا لأعلى لتبديل التطبيقات"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"اسحب لليسار للتبديل السريع بين التطبيقات"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"تبديل \"النظرة العامة\""</string> @@ -724,6 +726,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"تظهر كفقاعة محادثة في أعلى قسم المحادثات"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"الإعدادات"</string> <string name="notification_priority_title" msgid="2079708866333537093">"الأولوية"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ليس هناك فقاعات محادثات"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ستظهر هنا أحدث فقاعات المحادثات وفقاعات المحادثات التي تم إغلاقها."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"يتعذّر تعديل هذه الإشعارات."</string> @@ -1048,6 +1052,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"اختيار عناصر التحكّم التي تريد الوصول إليها من قائمة التشغيل"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"اضغط مع الاستمرار واسحب لإعادة ترتيب عناصر التحكّم."</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"تمت إزالة كل عناصر التحكّم."</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"تعذّر تحميل قائمة كل عناصر التحكّم."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"غير ذلك"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"إضافة إلى أدوات التحكم بالجهاز"</string> @@ -1056,6 +1062,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"تم تعديل عناصر التحكّم."</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"يشتمل رقم التعريف الشخصي على أحرف أو رموز."</string> <string name="controls_pin_verify" msgid="3452778292918877662">"إثبات ملكية <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"رقم تعريف شخصي خاطئ"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"جارٍ التحقّق…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"إدخال رقم التعريف الشخصي"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"حاوِل إدخال رقم تعريف شخصي آخر"</string> @@ -1065,6 +1072,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"جارٍ تحميل الاقتراحات"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"إغلاق جلسة تشغيل الوسائط هذه"</string> <string name="controls_error_timeout" msgid="794197289772728958">"غير نشط، تحقّق من التطبيق."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"حدث خطأ، جارٍ إعادة المحاولة…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"تمت إزالة الجهاز."</string> + <string name="controls_error_generic" msgid="352500456918362905">"يتعذّر تحميل الحالة."</string> <string name="controls_error_failed" msgid="960228639198558525">"حدث خطأ، يُرجى إعادة المحاولة."</string> <string name="controls_in_progress" msgid="4421080500238215939">"قيد التقدم"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"اضغط مع الاستمرار على زر التشغيل لعرض عناصر التحكّم الجديدة."</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 64d89125ef4e..d9f8b7747d7c 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"স্ক্ৰীন ৰেকর্ড"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"আৰম্ভ কৰক"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"বন্ধ কৰক"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"আনটো এপ্ ব্য়ৱহাৰ কৰিবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"খৰতকীয়াকৈ আনটো এপ্ ব্য়ৱহাৰ কৰিবলৈ সোঁফালে টানক"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"অৱলোকন ট’গল কৰক"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"বাৰ্তালাপ শাখাটোৰ শীৰ্ষত দেখুৱায় আৰু এটা বাবল হিচাপে প্ৰদর্শন হয়।"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ছেটিংসমূহ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"অগ্ৰাধিকাৰ"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"কোনো শেহতীয়া bubbles নাই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"শেহতীয়া bubbles আৰু অগ্ৰাহ্য কৰা bubbles ইয়াত প্ৰদর্শিত হ\'ব"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"পাৱাৰ মেনুখনৰ পৰা এক্সেছ পাবলৈ নিয়ন্ত্ৰণসমূহ বাছনি কৰক"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"নিয়ন্ত্ৰণসমূহ পুনৰ সজাবলৈ ধৰি ৰাখক আৰু টানি আনি এৰক"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"সকলো নিয়ন্ত্ৰণ আঁতৰোৱা হৈছে"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"নিয়ন্ত্ৰণসমূহৰ সম্পূর্ণ সূচীখন ল’ড কৰিব পৰা নগ’ল।"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহত যোগ দিয়ক"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"নিয়ন্ত্ৰণসমূহ আপডে\'ট কৰা হৈছে"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"পিনত বৰ্ণ অথবা প্ৰতীকসমূহ থাকে"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> সত্যাপন কৰক"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ভুল পিন"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"সত্যাপন কৰি থকা হৈছে…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"পিন দিয়ক"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"অন্য এটা পিন ব্যৱহাৰ কৰি চাওক"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"চুপাৰিছসমূহ ল’ড কৰি থকা হৈছে"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"এই মিডিয়া ছেশ্বনটো বন্ধ কৰক"</string> <string name="controls_error_timeout" msgid="794197289772728958">"সক্ৰিয় নহয়, এপ্টো পৰীক্ষা কৰক"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"আসোঁৱাহ, পুনৰ চেষ্টা কৰি আছে…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ডিভাইচটো আঁতৰোৱা হৈছে"</string> + <string name="controls_error_generic" msgid="352500456918362905">"স্থিতি ল’ড কৰিব নোৱাৰি"</string> <string name="controls_error_failed" msgid="960228639198558525">"আসোঁৱাহ হৈছে, আকৌ চেষ্টা কৰক"</string> <string name="controls_in_progress" msgid="4421080500238215939">"চলি আছে"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"নতুন নিয়ন্ত্ৰণসমূহ চাবলৈ পাৱাৰৰ বুটামটো ধৰি ৰাখক"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 708d79b6aed0..50d495395915 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekran yazması"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlayın"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dayandırın"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Tətbiqi dəyişmək üçün yuxarı sürüşdürün"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Tətbiqləri cəld dəyişmək üçün sağa çəkin"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"İcmala Keçin"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Söhbət bölməsinin yuxarısında göstərilir və yumrucuq kimi görünür."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ayarlar"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Yumrucuqlar yoxdur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son yumrucuqlar və buraxılmış yumrucuqlar burada görünəcək"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Enerji menyusundan daxil olacağınız nizamlayıcıları seçin"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Nizamlayıcıları yenidən tənzimləmək üçün tutub sürüşdürün"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Bütün nizamlayıcılar silindi"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Bütün nizamlayıcıların siyahısı yüklənmədi."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Digər"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Cihaz idarəetmələrinə əlavə edin"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Nizamlayıcılar güncəlləndi"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN hərflər və ya simvollar ehtiva edir"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> cihazını doğrulayın"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Yanlış PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Doğrulanır…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN daxil edin"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Başqa PIN\'i yoxlayın"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Tövsiyələr yüklənir"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Bu media sessiyasını bağlayın"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Aktiv deyil, tətbiqi yoxlayın"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Xəta, yenidən cəhd edilir…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Cihaz silindi"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Statusu yükləmək alınmadı"</string> <string name="controls_error_failed" msgid="960228639198558525">"Xəta, yenidən cəhd edin"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Davam edir"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Yeni nizamlayıcıları görmək üçün yandırıb-söndürmə düyməsinə basıb saxlayın"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 76e30cadad66..d290521ec123 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -432,6 +432,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Snimak ekrana"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Počnite"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavite"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Uređaj"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Prevucite nagore da biste menjali aplikacije"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Prevucite udesno da biste brzo promenili aplikacije"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Uključi/isključi pregled"</string> @@ -715,6 +716,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Prikazuje se u vrhu odeljka konverzacije i kao oblačić."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Podešavanja"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava podešavanja za konverzacije"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Ovde se prikazuju nedavni i odbačeni oblačići"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ova obaveštenja ne mogu da se menjaju."</string> @@ -1030,6 +1032,7 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Odaberite kontrole kojima ćete pristupati iz menija napajanja"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i prevucite da biste promenili raspored kontrola"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string> + <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promene nisu sačuvane"</string> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Učitavanje liste svih kontrola nije uspelo."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string> @@ -1038,6 +1041,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN sadrži slova ili simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifikujte: <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Pogrešan PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifikuje se…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Unesite PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Probajte pomoću drugog PIN-a"</string> @@ -1047,6 +1051,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavaju se preporuke"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zatvorite ovu sesiju medija"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno. Vidite aplikaciju"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Greška, pokušava se ponovo…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Uređaj je uklonjen"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Učitavanje statusa nije uspelo"</string> <string name="controls_error_failed" msgid="960228639198558525">"Greška. Probajte ponovo"</string> <string name="controls_in_progress" msgid="4421080500238215939">"U toku"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Zadržite dugme za uključivanje da biste videli nove kontrole"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 40c083e98936..ca3f2dbd7412 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -434,6 +434,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Запіс экрана"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Пачаць"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Спыніць"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Правядзіце ўверх, каб пераключыць праграмы"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Каб хутка пераключыцца паміж праграмамі, перацягніце ўправа"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Уключыць/выключыць агляд"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Паказваецца ўверсе раздзела размоў у выглядзе ўсплывальнага апавяшчэння."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Налады"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Прыярытэт"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Няма нядаўніх усплывальных апавяшчэнняў"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Нядаўнія і адхіленыя ўсплывальныя апавяшчэнні будуць паказаны тут"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Гэтыя апавяшчэнні нельга змяніць."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Выберыце элементы кіравання, да якіх вы хочаце мець доступ з меню сілкавання"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Каб змяніць парадак элементаў кіравання, утрымлівайце і перацягвайце іх"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Усе элементы кіравання выдалены"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Не ўдалося загрузіць спіс усіх сродкаў кіравання."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Іншае"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Дадаць у элементы кіравання прыладай"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Элементы кіравання абноўлены"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-код складаецца з літар або знакаў"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Спраўдзіце прыладу \"<xliff:g id="DEVICE">%s</xliff:g>\""</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Няправільны PIN-код"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Ідзе спраўджванне…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Увядзіце PIN-код"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Паспрабуйце іншы PIN-код"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Загружаюцца рэкамендацыі"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Закрыць гэты сеанс мультымедыя"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактыўна, праверце праграму"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Памылка, паўторная спроба…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Прылада выдалена"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Не ўдалося загрузіць стан"</string> <string name="controls_error_failed" msgid="960228639198558525">"Памылка, паўтарыце спробу"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Выконваецца"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Каб убачыць новыя элементы кіравання, утрымлівайце кнопку сілкавання націснутай"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 4393f9524272..7108f792163e 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Записване на екрана"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Старт"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Стоп"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Устройство"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Прекарайте пръст нагоре, за да превключите между приложенията"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Плъзнете надясно за бързо превключване между приложенията"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Превключване на общия преглед"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Показва се като балонче в горната част на секцията с разговори."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Настройки"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддържа свързаните с разговорите настройки"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Няма скорошни балончета"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Скорошните и отхвърлените балончета ще се показват тук"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Тези известия не могат да бъдат променяни."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Избиране на контроли, които да са достъпни в менюто за захранване"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задръжте и плъзнете, за да пренаредите контролите"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Всички контроли са премахнати"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Списъкът с всички контроли не бе зареден."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Добавяне към контролите за устройството"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Контролите са актуализирани"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ПИН кодът съдържа букви или символи"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Потвърждаване на <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Грешен ПИН код"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Потвърждава се…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Въведете ПИН кода"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Опитайте с друг ПИН код"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Препоръките се зареждат"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Затваряне на тази сесия за мултимедия"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно, проверете прилож."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Грешка. Извършва се нов опит…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Устройството бе премахнато"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Състоян. не може да се зареди"</string> <string name="controls_error_failed" msgid="960228639198558525">"Грешка. Опитайте отново"</string> <string name="controls_in_progress" msgid="4421080500238215939">"В ход"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Задръжте бутона за захранване, за да видите новите контроли"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index a04f5c2ed88c..a2a8689179e3 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"স্ক্রিন রেকর্ড"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"শুরু করুন"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"বন্ধ করুন"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"অন্য অ্যাপে যেতে উপরের দিকে সোয়াইপ করুন"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"একটি অ্যাপ ছেড়ে দ্রুত অন্য অ্যাপে যেতে ডান দিকে টেনে আনুন"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"\'এক নজরে\' বৈশিষ্ট্যটি চালু বা বন্ধ করুন"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"কথোপকথন বিভাগের উপরে বাবল হিসেবে দেখা যায়।"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"সেটিংস"</string> <string name="notification_priority_title" msgid="2079708866333537093">"অগ্রাধিকার"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"কোনও সাম্প্রতিক বাবল নেই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"সাম্প্রতিক ও বাতিল করা বাবল এখানে দেখা যাবে"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"এই বিজ্ঞপ্তিগুলি পরিবর্তন করা যাবে না।"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"যেসব কন্ট্রোল অ্যাক্সেস করতে চান সেগুলি পাওয়ার মেনু থেকে বেছে নিন"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"কন্ট্রোলগুলিকে আবার সাজানোর জন্য ধরে রেখে টেনে আনুন"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"সমস্ত কন্ট্রোল সরানো হয়েছে"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"সব কন্ট্রোলের তালিকা লোড করা যায়নি।"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ডিভাইস কন্ট্রোলে যোগ করুন"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"কন্ট্রোল আপডেট করা হয়েছে"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"পিন-এ অক্ষর বা চিহ্ন রয়েছে"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> যাচাই করুন"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ভুল পিন"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"যাচাই করা হচ্ছে…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"পিন লিখুন"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"আরেকটি পিন লিখে চেষ্টা করুন"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"সাজেশন লোড করা হচ্ছে"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"এই মিডিয়া সেশন বেছে নিন"</string> <string name="controls_error_timeout" msgid="794197289772728958">"বন্ধ আছে, অ্যাপ চেক করুন"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"সমস্যা, আবার চেষ্টা করা হচ্ছে…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ডিভাইস সরিয়ে দেওয়া হয়েছে"</string> + <string name="controls_error_generic" msgid="352500456918362905">"স্ট্যাটাস লোড করা যাচ্ছে না"</string> <string name="controls_error_failed" msgid="960228639198558525">"সমস্যা হয়েছে, আবার চেষ্টা করুন"</string> <string name="controls_in_progress" msgid="4421080500238215939">"চলছে"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"নতুন কন্ট্রোল দেখতে পাওয়ার বোতাম টিপে ধরে থাকুন"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 28dda35c178e..91b19d72e615 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -432,6 +432,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Snimanje ekrana"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Započnite"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavite"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Uređaj"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Prevucite prema gore za promjenu aplikacije"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Prevucite udesno za brzu promjenu aplikacija"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Pregled uključivanja/isključivanja"</string> @@ -717,6 +718,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Prikazuje se na vrhu odjeljka za razgovor u vidu oblačića."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Postavke"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava postavke karakteristične za razgovor"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Nedavni i odbačeni oblačići će se pojaviti ovdje"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ta obavještenja se ne mogu izmijeniti."</string> @@ -1032,6 +1034,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izaberite kontrole za pristup iz menija napajanja"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite i prevucite da preuredite kontrole"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Učitavanje liste svih kontrola nije uspjelo."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string> @@ -1040,6 +1044,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN sadrži slova ili simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Potvrdite <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Pogrešan PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Potvrđivanje…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Unesite PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Pokušajte s drugim PIN-om"</string> @@ -1049,6 +1054,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavanje preporuka"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zatvori ovu medijsku sesiju"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, vidite aplikaciju"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Greška, ponovni pokušaj…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Uređaj je uklonjen"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Nije moguće učitati status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Greška, pokušajte ponovo"</string> <string name="controls_in_progress" msgid="4421080500238215939">"U toku"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Zadržite dugme za uključivanje da vidite nove kontrole"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 1d08662b3e0a..cb4d21574e67 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravació de pantalla"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inicia"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Atura"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Llisca cap amunt per canviar d\'aplicació"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrossega el dit cap a la dreta per canviar ràpidament d\'aplicació"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activa o desactiva Aplicacions recents"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Es mostra com a bombolla a la part superior de la secció de converses."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuració"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritat"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hi ha bombolles recents"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bombolles recents i les ignorades es mostraran aquí"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Aquestes notificacions no es poden modificar."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Selecciona els controls per accedir-hi des del menú d\'engegada"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén premut i arrossega per reorganitzar els controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"S\'han suprimit tots els controls"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"No s\'ha pogut carregar la llista completa de controls."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altres"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Afegeix als controls de dispositius"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"S\'han actualitzat els controls"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"El PIN conté lletres o símbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifica <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorrecte"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"S\'està verificant…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Introdueix el PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prova un altre PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregant les recomanacions"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Tanca aquesta sessió multimèdia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactiu; comprova l\'aplicació"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error. S\'està tornant a provar…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"El dispositiu s\'ha suprimit"</string> + <string name="controls_error_generic" msgid="352500456918362905">"No es pot carregar l\'estat"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error; torna-ho a provar"</string> <string name="controls_in_progress" msgid="4421080500238215939">"En curs"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantén premut el botó d\'engegada per veure controls nous"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 15fff7389791..3b0f340b9718 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -434,6 +434,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Záznam obrazovky"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Spustit"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončit"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Zařízení"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Přejetím nahoru přepnete aplikace"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Přetažením doprava rychle přepnete aplikace"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Přepnout přehled"</string> @@ -718,6 +719,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Zobrazuje se v horní části sekce konverzace a má podobu bubliny."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nastavení"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorita"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> nepodporuje specifická nastavení pro konverzaci"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Žádné nedávné bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Zde se budou zobrazovat nedávné bubliny a zavřené bubliny"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tato oznámení nelze upravit."</string> @@ -1036,6 +1038,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vyberte ovládací prvky, které budou zobrazeny v nabídce vypínače"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ovládací prvky můžete uspořádat podržením a přetažením"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Všechny ovládací prvky byly odstraněny"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Načtení seznamu všech ovládacích prvků se nezdařilo."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Jiné"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Přidání ovládání zařízení"</string> @@ -1044,6 +1048,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Ovládací prvky aktualizovány"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Kód PIN obsahuje písmena nebo symboly"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Ověření zařízení <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Chybný PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Ověřování…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Zadejte PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Zkuste jiný PIN"</string> @@ -1053,6 +1058,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Načítání doporučení"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zavřít tuto mediální relaci"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivní, zkontrolujte aplikaci"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Chyba. Nový pokus…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Zařízení bylo odebráno"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Stav nelze načíst"</string> <string name="controls_error_failed" msgid="960228639198558525">"Chyba, zkuste to znovu"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Probíhá"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Nové ovládací prvky zobrazíte podržením vypínače"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 76390f0e04f7..2bc0e25f5210 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Optag skærm"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Enhed"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Stryg opad for at skifte apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Træk til højre for hurtigt at skifte app"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Slå Oversigt til/fra"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Vises som en boble øverst i samtalesektionen."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Indstillinger"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> understøtter ikke samtalespecifikke indstillinger"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ingen seneste bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Nye bobler og afviste bobler vises her"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse notifikationer kan ikke redigeres."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vælg, hvilke indstillinger der skal være i menuen for afbryderknappen"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Flyt rundt på styringselementer ved at holde dem nede og trække"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle styringselementerne blev fjernet"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Listen over styringselementer kunne ikke indlæses."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andre"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Føj til enhedsstyring"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Betjeningselementerne er opdateret"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Pinkoden indeholder bogstaver eller symboler"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Bekræft <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Forkert pinkode"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Bekræfter…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Angiv pinkode"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prøv en anden pinkode"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Indlæser anbefalinger"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Luk denne mediesession"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv. Tjek appen"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Fejl. Prøver igen…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Enheden er fjernet"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Statussen kan ikke indlæses"</string> <string name="controls_error_failed" msgid="960228639198558525">"Der opstod en fejl. Prøv igen"</string> <string name="controls_in_progress" msgid="4421080500238215939">"I gang"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold afbryderknappen nede for at se nye betjeningselementer"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 82b778eeffc7..3efafecd5585 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Bildschirmaufnahme"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starten"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Beenden"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Nach oben wischen, um Apps zu wechseln"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Zum schnellen Wechseln der Apps nach rechts ziehen"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Übersicht ein-/ausblenden"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Wird oben im Bereich für Unterhaltungen als Bubble angezeigt."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Einstellungen"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorität"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Keine kürzlich geschlossenen Bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Hier werden aktuelle und geschlossene Bubbles angezeigt"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Diese Benachrichtigungen können nicht geändert werden."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Karten auswählen, auf die man über das Ein-/Aus-Menü zugreifen kann"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zum Verschieben von Steuerelementen halten und ziehen"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle Steuerelemente entfernt"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Fehler beim Laden der Liste mit Steuerelementen."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andere"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Zur Gerätesteuerung hinzufügen"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Gerätekarten aktualisiert"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Die PIN enthält Buchstaben oder Symbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> bestätigen"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Falsche PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Wird geprüft…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN eingeben"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Andere PIN ausprobieren"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Empfehlungen werden geladen"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Diese Mediensitzung schließen"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv – sieh in der App nach"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Fehler. Neuer Versuch…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Gerät entfernt"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Status kann nicht geladen werden"</string> <string name="controls_error_failed" msgid="960228639198558525">"Fehler – versuch es noch mal"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Läuft"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Zum Anzeigen der Karten für neue Geräte Ein-/Aus-Taste gedrückt halten"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index c1df6d54e2f6..f9ac3f21dd8c 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Εγγραφή οθόνης"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Έναρξη"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Διακοπή"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Συσκευή"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Σύρετε προς τα επάνω για εναλλαγή των εφαρμογών"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Σύρετε προς τα δεξιά για γρήγορη εναλλαγή εφαρμογών"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Εναλλαγή επισκόπησης"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Εμφανίζεται στο επάνω μέρος της ενότητας συζήτησης ως συννεφάκι."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ρυθμίσεις"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Προτεραιότητα"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν υποστηρίζει ρυθμίσεις για συγκεκριμένη συνομιλία"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Δεν υπάρχουν πρόσφατα συννεφάκια"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Τα πρόσφατα συννεφάκια και τα συννεφάκια που παραβλέψατε θα εμφανίζονται εδώ."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Επιλέξτε τα στοιχεία ελέγχου στα οποία θα έχετε πρόσβαση από το μενού λειτουργίας."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Κρατήστε και σύρετε για αναδιάταξη των στοιχείων ελέγχου"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Όλα τα στοιχεία ελέγχου καταργήθηκαν"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Ανεπιτυχής φόρτωση λίστας όλων των στοιχ. ελέγχου."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Άλλο"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Προσθήκη στα στοιχεία ελέγχου συσκευής"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Ενημέρωση στοιχείων ελέγχου"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Το PIN περιέχει γράμματα ή σύμβολα"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Επαλήθευση <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Λάθος PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Επαλήθευση…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Εισαγωγή PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Δοκιμάστε άλλο PIN."</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Φόρτωση προτάσεων"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Κλείσιμο αυτής της περιόδου λειτουργίας μέσων."</string> <string name="controls_error_timeout" msgid="794197289772728958">"Ανενεργό, έλεγχος εφαρμογής"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Προέκυψε σφάλμα. Επανάληψη…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Η συσκευή καταργήθηκε"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Αδυναμία φόρτωσης κατάστασης"</string> <string name="controls_error_failed" msgid="960228639198558525">"Σφάλμα, προσπαθήστε ξανά."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Σε εξέλιξη"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Πατήστε το κουμπί λειτουργίας για να δείτε νέα στοιχεία ελέγχου."</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index b4c380b4794a..bf276a97ce1d 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Screen record"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swipe up to switch apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Drag right to quickly switch apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Toggle Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shows at top of conversation section and appears as a bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support conversation-specific settings"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN contains letters or symbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verify <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Wrong PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifying…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Enter PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Close this media session"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Device removed"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Can’t load status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, try again"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In progress"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold Power button to see new controls"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index c719ea022478..fccdffef9134 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Screen record"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swipe up to switch apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Drag right to quickly switch apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Toggle Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shows at top of conversation section and appears as a bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support conversation-specific settings"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN contains letters or symbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verify <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Wrong PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifying…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Enter PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Close this media session"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Device removed"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Can’t load status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, try again"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In progress"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold Power button to see new controls"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index b4c380b4794a..bf276a97ce1d 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Screen record"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swipe up to switch apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Drag right to quickly switch apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Toggle Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shows at top of conversation section and appears as a bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support conversation-specific settings"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN contains letters or symbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verify <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Wrong PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifying…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Enter PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Close this media session"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Device removed"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Can’t load status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, try again"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In progress"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold Power button to see new controls"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index b4c380b4794a..bf276a97ce1d 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Screen record"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swipe up to switch apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Drag right to quickly switch apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Toggle Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shows at top of conversation section and appears as a bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support conversation-specific settings"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN contains letters or symbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verify <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Wrong PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifying…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Enter PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Close this media session"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Device removed"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Can’t load status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, try again"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In progress"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold Power button to see new controls"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 2e5f1e726879..74dfa34d4b85 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Screen Record"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swipe up to switch apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Drag right to quickly switch apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Toggle Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shows at top of conversation section and appears as a bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Settings"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support conversation specific settings"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recent bubbles and dismissed bubbles will appear here"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string> @@ -1024,6 +1026,7 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Choose controls to access from the power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold & drag to rearrange controls"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string> + <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string> <string name="controls_favorite_load_error" msgid="2533215155804455348">"The list of all controls could not be loaded."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Add to device controls"</string> @@ -1032,6 +1035,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controls updated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN contains letters or symbols"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verify <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Wrong PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifying…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Enter PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string> @@ -1041,6 +1045,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Close this media session"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactive, check app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, retrying…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Device removed"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Can’t load status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, try again"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In progress"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold Power button to see new controls"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 53dda2fe729f..97ead2c95982 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Grabar pantalla"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Desliza el dedo hacia arriba para cambiar de app"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra a la derecha para cambiar aplicaciones rápidamente"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Ocultar o mostrar Recientes"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece como una burbuja en la parte superior de la sección de la conversación."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuración"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridad"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Las burbujas recientes y las que se descartaron aparecerán aquí"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"No se pueden modificar estas notificaciones."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Elige los controles a los que quieres acceder desde el menú de encendido"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén presionado y arrastra para reorganizar los controles"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Se quitaron todos los controles"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"No se cargó la lista completa de controles."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Agregar a controles de dispositivos"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles actualizados"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"El PIN contiene letras o símbolos"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificar <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorrecto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verificando…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Ingresa el PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Probar con otro PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendaciones"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Cerrar esta sesión multimedia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo. Verifica la app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Hubo un error. Reintentando…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Se quitó el dispositivo"</string> + <string name="controls_error_generic" msgid="352500456918362905">"No se pudo cargar el estado"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error. Vuelve a intentarlo."</string> <string name="controls_in_progress" msgid="4421080500238215939">"En curso"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantén presionado el botón de encendido para ver los nuevos controles"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 01fdb37efde9..f1b2b37692f4 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Grabación de la pantalla"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inicio"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Desliza el dedo hacia arriba para cambiar de aplicación"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra hacia la derecha para cambiar rápidamente de aplicación"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Mostrar u ocultar aplicaciones recientes"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece en la parte superior de la sección de una conversación en forma de burbuja."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ajustes"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridad"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Las burbujas recientes y las cerradas aparecerán aquí"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificaciones no se pueden modificar."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Elige los controles a los que acceder desde el menú de encendido"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén pulsado y arrastra un control para reubicarlo"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos los controles quitados"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"No se ha podido cargar la lista de los controles."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Añadir a control de dispositivos"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles actualizados"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"El PIN contiene letras o símbolos"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificar <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorrecto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verificando…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Introduce el PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prueba con otro PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendaciones"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Cerrar esta sesión multimedia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo, comprobar aplicación"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error; reintentando…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispositivo quitado"</string> + <string name="controls_error_generic" msgid="352500456918362905">"No se ha podido cargar el estado"</string> <string name="controls_error_failed" msgid="960228639198558525">"Se ha producido un error. Vuelve a intentarlo."</string> <string name="controls_in_progress" msgid="4421080500238215939">"En curso"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantén pulsado el botón de encendido para ver los controles nuevos"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 5966e0d7930c..6fe4bf28ea1a 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekraanisalvestus"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Alustage"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Peatage"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Seade"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Rakenduste vahetamiseks pühkige üles"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Lohistage paremale, et rakendusi kiiresti vahetada"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Lehe Ülevaade sisse- ja väljalülitamine"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Kuvatakse vestluste jaotise ülaosas mullina."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Seaded"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioriteet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei toeta vestluspõhiseid seadeid"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Hiljutisi mulle pole"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Siin kuvatakse hiljutised ja suletud mullid."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Neid märguandeid ei saa muuta."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Valige toitemenüüs saadaolevad juhtelemendid"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Juhtnuppude ümberpaigutamiseks hoidke neid all ja lohistage"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Kõik juhtnupud eemaldati"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Kõikide juhtelementide loendit ei saanud laadida."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Seadmete juhtimisvidinate hulka lisamine"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Juhtelemente värskendati"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-kood sisaldab tähti või sümboleid"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Kinnitage <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Vale PIN-kood"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Kinnitamine …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Sisestage PIN-kood"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Proovige muud PIN-koodi"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Soovituste laadimine"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Sulge see meediaseanss"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Passiivne, vaadake rakendust"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Viga, proovitakse uuesti …"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Seade on eemaldatud"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Olekut ei saa laadida"</string> <string name="controls_error_failed" msgid="960228639198558525">"Ilmnes viga, proovige uuesti"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Pooleli"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Uute juhtelementide vaatamiseks hoidke all toitenuppu"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 1d90e929fbae..30e4eec50abf 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Pantaila-grabaketa"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hasi"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Gelditu"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Egin gora aplikazioa aldatzeko"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastatu eskuinera aplikazioa azkar aldatzeko"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Aldatu ikuspegi orokorra"</string> @@ -709,9 +711,11 @@ <string name="notification_channel_summary_default" msgid="3539949463907902037">"Arreta erakartzen du soinua eta dardara eginda."</string> <string name="notification_channel_summary_default_with_bubbles" msgid="6298026344552480458">"Arreta erakartzen du soinua eta dardara eginda. Modu lehenetsian, <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko elkarrizketak burbuila gisa agertzen dira."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Eduki honetarako lasterbide gainerakor bat eskaintzen dizu, arretarik gal ez dezazun."</string> - <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Elkarrizketa-atalaren goialdean agertzen da, burbuila gisa."</string> + <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Elkarrizketen atalaren goialdean agertzen da, burbuila gisa."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ezarpenak"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Lehentasuna"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ez dago azkenaldiko burbuilarik"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Azken burbuilak eta baztertutakoak agertuko dira hemen"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Jakinarazpen horiek ezin dira aldatu."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Aukeratu itzaltzeko menutik atzitu nahi dituzun kontrolatzeko aukerak"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Kontrolatzeko aukerak antolatzeko, eduki itzazu sakatuta, eta arrastatu"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Kontrolatzeko aukera guztiak kendu dira"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Ezin izan da kargatu kontrol guztien zerrenda."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Beste bat"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Gehitu gailuak kontrolatzeko widgetetan"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Eguneratu dira kontrolatzeko aukerak"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN kodeak hizkiak edo ikurrak ditu"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Egiaztatu <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN okerra"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Egiaztatzen…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Idatzi PIN kodea"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Saiatu beste PIN kode batekin"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Gomendioak kargatzen"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Itxi multimedia-saio hau"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktibo; egiaztatu aplikazioa"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Errorea. Berriro saiatzen…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Gailua kendu da"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Ezin da kargatu egoera"</string> <string name="controls_error_failed" msgid="960228639198558525">"Errorea. Saiatu berriro."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Abian"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Eduki sakatuta etengailua kontrolatzeko aukera berriak ikusteko"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 2b2959e22825..a65cc3700c4f 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ضبط کردن صفحهنمایش"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"شروع"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"توقف"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"دستگاه"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"برای تغییر برنامهها، تند به بالا بکشید"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"برای جابهجایی سریع میان برنامهها، به چپ بکشید"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"تغییر وضعیت نمای کلی"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"در بالای بخش مکالمه نمایش داده میشود و بهصورت ابزارک اعلان نمایان میشود."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"تنظیمات"</string> <string name="notification_priority_title" msgid="2079708866333537093">"اولویت"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> از تنظیمات خاص مکالمه پشتیبانی نمیکند"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"هیچ ابزارک اعلان جدیدی وجود ندارد"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ابزارک اعلان اخیر و ابزارک اعلان ردشده اینجا ظاهر خواهند شد"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"این اعلانها قابل اصلاح نیستند."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"برای دسترسی از منوی روشن/خاموش، کنترلها را انتخاب کنید"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"برای تغییر دادن ترتیب کنترلها، آنها را نگه دارید و بکشید"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"همه کنترلها برداشته شدهاند"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"فهرست همه کنترلها را نمیتوان بارگیری کرد."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"موارد دیگر"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"افزودن به کنترلهای دستگاه"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"کنترلها بهروزرسانی شد"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"پین شامل حروف یا نماد است"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"تأیید <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"پین اشتباه است"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"درحال به تأیید رساندن…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"پین را وارد کنید"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"پین دیگری را امتحان کنید"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"درحال بار کردن توصیهها"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"بستن این جلسه رسانه"</string> <string name="controls_error_timeout" msgid="794197289772728958">"غیرفعال، برنامه را بررسی کنید"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"خطا، درحال تلاش مجدد…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"دستگاه برداشته شد"</string> + <string name="controls_error_generic" msgid="352500456918362905">"وضعیت بارگیری نشد"</string> <string name="controls_error_failed" msgid="960228639198558525">"خطا، دوباره امتحان کنید"</string> <string name="controls_in_progress" msgid="4421080500238215939">"درحال انجام"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"برای دیدن کنترلهای جدید، دکمه روشن/خاموش را پایین نگه دارید"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 4bab845eaf38..56a43cffea73 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Näytön tallentaminen"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Aloita"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Lopeta"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Vaihda sovellusta pyyhkäisemällä ylös"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Vaihda sovellusta nopeasti vetämällä oikealle"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Näytä/piilota viimeisimmät"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Näkyy keskusteluosion yläosassa kuplana"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Asetukset"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Tärkeä"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ei viimeaikaisia kuplia"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viimeaikaiset ja äskettäin ohitetut kuplat näkyvät täällä"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Valitse säätimet, joita käytetään virtavalikosta"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Järjestele säätimiä koskettamalla pitkään ja vetämällä"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Kaikki säätimet poistettu"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Kaikkien säätimien luetteloa ei voitu ladata."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Lisää laitteiden hallintaan"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Säätimet päivitetty"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-koodi sisältää kirjaimia tai symboleja"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Vahvista <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Väärä PIN-koodi"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Vahvistetaan…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Lisää PIN-koodi"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Kokeile toista PIN-koodia"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Ladataan suosituksia"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Sulje tämä median käyttökerta"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Epäaktiivinen, tarkista sovellus"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Virhe, yritetään uudelleen…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Laite poistettu"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Tilaa ei voi ladata"</string> <string name="controls_error_failed" msgid="960228639198558525">"Virhe, yritä uudelleen"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Käynnissä"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Paina virtapainiketta pitkään nähdäksesi uudet säätimet"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 6917db510491..9376fea4fd18 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Enregistrement d\'écran"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Démarrer"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Arrêter"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Balayez vers le haut pour changer d\'application"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Balayez l\'écran vers la droite pour changer rapidement d\'application"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Basculer l\'aperçu"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"S\'affiche en haut de la section des conversations sous forme de bulle."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Paramètres"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorité"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bulles récentes et les bulles ignorées s\'afficheront ici"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ces notifications ne peuvent pas être modifiées"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Sélectionnez les commandes auxquelles vous souhaitez accéder à partir du menu de l\'interrupteur"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Maintenez le doigt sur l\'écran, puis glissez-le pour réorganiser les commandes"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossible de charger la liste des commandes."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Ajouter aux commandes de contrôle des appareils"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Commandes mises à jour"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Le NIP contient des lettres ou des symboles"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Vérifier <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"NIP incorrect"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Vérification en cours…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Entrez le NIP"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Essayez un autre NIP"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Chargement des recommandations…"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Fermer cette session multimédia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Délai expiré, vérifiez l\'appli"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erreur, nouvelle tentative…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Appareil supprimé"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Impossible de charger l\'état"</string> <string name="controls_error_failed" msgid="960228639198558525">"Erreur. Veuillez réessayer."</string> <string name="controls_in_progress" msgid="4421080500238215939">"En cours"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Maintenez enfoncé l\'interrupteur pour afficher les nouvelles commandes"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 8ef8334acdbc..e6bc8093606c 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Enregistrement de l\'écran"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Démarrer"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Arrêter"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Balayer l\'écran vers le haut pour changer d\'application"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Déplacer vers la droite pour changer rapidement d\'application"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activer/Désactiver l\'aperçu"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"S\'affiche en haut de la section des conversations et apparaît sous forme de bulle."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Paramètres"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritaire"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Les bulles récentes et ignorées s\'afficheront ici"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Sélectionnez les commandes auxquelles vous souhaitez accéder depuis le menu de démarrage"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Appuyer et faire glisser pour réorganiser les commandes"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossible de charger toutes les commandes."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Ajouter aux commandes de contrôle des appareils"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Commandes mises à jour"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Le code contient des lettres ou des symboles"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Valider <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Code incorrect"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Validation…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Saisissez le code"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Essayez un autre code PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Chargement des recommandations"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Fermer cette session multimédia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Délai expiré, vérifier l\'appli"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erreur. Nouvelle tentative…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Appareil supprimé"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Impossible de charger l\'état"</string> <string name="controls_error_failed" msgid="960228639198558525">"Erreur. Veuillez réessayer."</string> <string name="controls_in_progress" msgid="4421080500238215939">"En cours"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Appuyez de manière prolongée sur le bouton Marche/Arrêt pour afficher les nouvelles commandes"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index bb5ee8e78593..f9e65e3702d9 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravación da pantalla"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Deter"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Pasar o dedo cara arriba para cambiar de aplicación"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arrastra cara á dereita para cambiar de aplicacións rapidamente"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Activar/desactivar Visión xeral"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Móstrase na parte superior da sección da conversa en forma de burbulla."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configuración"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Non hai burbullas recentes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"As burbullas recentes e ignoradas aparecerán aquí."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificacións non se poden modificar."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolle os controis para acceder desde o menú de acendido"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Para reorganizar os controis, mantenos premidos e arrástraos"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Quitáronse todos os controis"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Non se puido cargar a lista de todos os controis."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outra"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Engadir ao control de dispositivos"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Actualizáronse os controis"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"O PIN contén letras ou símbolos"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificar <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"O PIN é incorrecto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verificando…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Escribe o PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Proba con outro PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendacións"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Pechar esta sesión multimedia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactivo. Comproba a app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando de novo…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Quitouse o dispositivo"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Non se puido cargar o estado"</string> <string name="controls_error_failed" msgid="960228639198558525">"Erro. Téntao de novo"</string> <string name="controls_in_progress" msgid="4421080500238215939">"En curso"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantén premido o botón de acendido para ver os novos controis"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index fb539003ae40..b9b237213bb8 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"સ્ક્રીન રેકૉર્ડ કરો"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"શરૂ કરો"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"રોકો"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ઍપ સ્વિચ કરવા માટે ઉપરની તરફ સ્વાઇપ કરો"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ઍપને ઝડપથી સ્વિચ કરવા માટે જમણે ખેંચો"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ઝલકને ટૉગલ કરો"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"વાતચીત વિભાગની ટોચ પર બતાવે છે અને બબલ તરીકે દેખાય છે."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"સેટિંગ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"પ્રાધાન્યતા"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"તાજેતરના કોઈ બબલ નથી"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"એકદમ નવા બબલ અને છોડી દીધેલા બબલ અહીં દેખાશે"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"આ નોટિફિકેશનમાં કોઈ ફેરફાર થઈ શકશે નહીં."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"પાવર મેનૂમાંથી ઍક્સેસ કરવા માટેના નિયંત્રણોને પસંદ કરો"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"નિયંત્રણોને ફરીથી ગોઠવવા માટે તેમને હોલ્ડ કરીને ખેંચો"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"બધા નિયંત્રણો કાઢી નાખ્યા"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"બધા નિયંત્રણોની સૂચિ લોડ કરી શકાઈ નથી."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"અન્ય"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ડિવાઇસનાં નિયંત્રણોમાં ઉમેરો"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"નિયંત્રણ અપડેટ કર્યા"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"પિનમાં અક્ષરો અથવા પ્રતીકોનો સમાવેશ થાય છે"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>ને ચકાસો"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ખોટો પિન"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"ચકાસી રહ્યાં છીએ…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"પિન દાખલ કરો"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"બીજા પિનને અજમાવી જુઓ"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"સુઝાવ લોડ કરી રહ્યાં છીએ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"આ મીડિયા સત્રને બંધ કરો"</string> <string name="controls_error_timeout" msgid="794197289772728958">"નિષ્ક્રિય, ઍપને ચેક કરો"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ભૂલ, ફરી પ્રયાસ કરી રહ્યા છીએ…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ડિવાઇસ કાઢી નાખ્યું"</string> + <string name="controls_error_generic" msgid="352500456918362905">"સ્ટેટસ લોડ કરી શકાતું નથી"</string> <string name="controls_error_failed" msgid="960228639198558525">"ભૂલ, ફરીથી પ્રયાસ કરો"</string> <string name="controls_in_progress" msgid="4421080500238215939">"પ્રક્રિયા ચાલુ છે"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"નવા નિયંત્રણ જોવા માટે પાવર બટનને દબાવી રાખો"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 19799839e7a9..ac89c0cefdd4 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -432,6 +432,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"स्क्रीन रिकॉर्ड"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"शुरू करें"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"रोकें"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ऐप्लिकेशन बदलने के लिए ऊपर स्वाइप करें"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ऐप्लिकेशन को झटपट स्विच करने के लिए उसे दाईं ओर खींचें और छोड़ें"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"खास जानकारी टॉगल करें"</string> @@ -714,6 +716,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"यह बातचीत सेक्शन में सबसे ऊपर और एक बबल के तौर पर दिखती है."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"सेटिंग"</string> <string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"हाल ही के बबल्स मौजूद नहीं हैं"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"हाल ही के बबल्स और हटाए गए बबल्स यहां दिखेंगे"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ये सूचनाएं नहीं बदली जा सकती हैं."</string> @@ -1026,6 +1030,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"पावर मेन्यू से ऐक्सेस करने के लिए कंट्रोल चुनें"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"कंट्रोल का क्रम फिर से बदलने के लिए उन्हें दबाकर रखें और खींचें"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"सभी कंट्रोल हटा दिए गए"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"सभी कंट्रोल की सूची लोड नहीं हो सकी."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"डिवाइस कंट्रोल में जोड़ें"</string> @@ -1034,6 +1040,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"कंट्रोल अपडेट किए गए"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"पिन में अक्षर या चिह्न शामिल होते हैं"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> की पुष्टि करें"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"गलत पिन"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"पुष्टि की जा रही है…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"पिन डालें"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"कोई और पिन आज़माएं"</string> @@ -1043,6 +1050,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"सुझाव लोड हो रहे हैं"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"इस मीडिया सेशन को बंद करें"</string> <string name="controls_error_timeout" msgid="794197289772728958">"काम नहीं कर रहा, ऐप जांचें"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"कोई गड़बड़ी हुई, फिर से कोशिश की जा रही है…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"डिवाइस हटाया गया"</string> + <string name="controls_error_generic" msgid="352500456918362905">"स्थिति लोड नहीं की जा सकती"</string> <string name="controls_error_failed" msgid="960228639198558525">"गड़बड़ी हुई, फिर से कोशिश करें"</string> <string name="controls_in_progress" msgid="4421080500238215939">"जारी है"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"नए कंट्रोल देखने के लिए पावर बटन दबाकर रखें"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 7bcb22eceae8..6e77cd107b07 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -432,6 +432,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Snimač zaslona"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Početak"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavi"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Uređaj"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Prijeđite prstom prema gore da biste promijenili aplikaciju"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Povucite udesno da biste brzo promijenili aplikaciju"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Uključivanje/isključivanje pregleda"</string> @@ -715,6 +716,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Prikazuje se pri vrhu odjeljka razgovora kao oblačić."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Postavke"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava postavke koje se odnose na razgovor"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nema nedavnih oblačića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Ovdje će se prikazivati nedavni i odbačeni oblačići"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Te se obavijesti ne mogu izmijeniti."</string> @@ -1030,6 +1032,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Odaberite kontrole kojima želite pristupati iz izbornika napajanja"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i povucite da biste promijenili raspored kontrola"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve su kontrole uklonjene"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Popis svih kontrola nije se učitao."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Dodavanje kontrolama uređaja"</string> @@ -1038,6 +1042,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrole su ažurirane"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN sadrži slova ili simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Potvrdite uređaj <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Pogrešan PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Potvrđivanje…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Unesite PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Pokušajte s drugim PIN-om"</string> @@ -1047,6 +1052,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavanje preporuka"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zatvorite ovu medijsku sesiju"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, provjerite aplik."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Pogreška, pokušavamo ponovo…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Uređaj je uklonjen"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Status se ne može učitati"</string> <string name="controls_error_failed" msgid="960228639198558525">"Pogreška, pokušajte ponovo"</string> <string name="controls_in_progress" msgid="4421080500238215939">"U tijeku"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Zadržite tipku za uključivanje/isključivanje za prikaz novih kontrola"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 521ca575525e..34cc36beec92 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Képernyő rögzítése"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Kezdés"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Leállítás"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Váltás az alkalmazások között felfelé csúsztatással"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Húzza jobbra az ujját az alkalmazások közötti gyors váltáshoz"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Áttekintés be- és kikapcsolása"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"A beszélgetések szakaszának tetején, buborékként jelenik meg."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Beállítások"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritás"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nincsenek buborékok a közelmúltból"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"A legutóbbi és az elvetett buborékok itt jelennek majd meg"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ezeket az értesítéseket nem lehet módosítani."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"A bekapcsológomb menüjéből hozzáférhető vezérlők kiválasztása"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tartsa lenyomva, és húzza a vezérlők átrendezéséhez"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Minden vezérlő eltávolítva"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nem sikerült betölteni az összes vezérlő listáját."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Más"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Hozzáadás az eszközvezérlőkhöz"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Vezérlők frissítve"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"A PIN-kód betűket vagy szimbólumokat tartalmaz"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ellenőrzése"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Helytelen PIN-kód"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Ellenőrzés…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN-kód megadása"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Próbálkozzon másik PIN-kóddal"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Javaslatok betöltése…"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Médiamunkamenet bezárása"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktív, ellenőrizze az appot"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Hiba, újrapróbálkozás…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Eszköz eltávolítva"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Állapot betöltése sikertelen"</string> <string name="controls_error_failed" msgid="960228639198558525">"Hiba történt. Próbálja újra."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Folyamatban"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Az új vezérlők megtekintéséhez tartsa nyomva a bekapcsológombot"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 93f0001f625c..a87761ae5b55 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Էկրանի ձայնագրում"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Սկսել"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Կանգնեցնել"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Սահեցրեք վերև՝ մյուս հավելվածին անցնելու համար"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Քաշեք աջ՝ հավելվածների միջև անցնելու համար"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Միացնել/անջատել համատեսքը"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Ցուցադրվում է «Խոսակցություններ» բաժնում և հայտնվում է ամպիկի տեսքով։"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Կարգավորումներ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Կարևոր"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Վերջին ամպիկներ չկան"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Այստեղ կցուցադրվեն վերջերս օգտագործված և փակված ամպիկները, որոնք կկարողանաք հեշտությամբ վերաբացել"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Այս ծանուցումները չեն կարող փոփոխվել:"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Ընտրեք կառավարման տարրերը՝ դրանք սնուցման ընտրացանկից բացելու համար"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Պահեք և քաշեք՝ կառավարման տարրերը վերադասավորելու համար"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Կառավարման բոլոր տարրերը հեռացվեցին"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Չհաջողվեց բեռնել բոլոր կառավարների ցանկը։"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Այլ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Ավելացրեք սարքերի կառավարման տարրերում"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Կառավարման տարրերը թարմացվեցին"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN կոդը տառեր և նշաններ է պարունակում"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Ստուգել <xliff:g id="DEVICE">%s</xliff:g> սարքը"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN կոդը սխալ է"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Ստուգում…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Մուտքագրեք PIN կոդը"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Փորձեք մեկ այլ PIN կոդ"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Բեռնման խորհուրդներ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Փակել աշխատաշրջանը"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Ակտիվ չէ, ստուգեք հավելվածը"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Սխալ. նորից ենք փորձում…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Սարքը հեռացված է"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Չհաջողվեց բեռնել կարգավիճակը"</string> <string name="controls_error_failed" msgid="960228639198558525">"Սխալ առաջացավ։ Նորից փորձեք։"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Ընթացքի մեջ է"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Սեղմած պահեք սնուցման կոճակը՝ կառավարման նոր տարրերը տեսնելու համար։"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index ac011a3dfc8f..82dd783c2695 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Rekaman Layar"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Mulai"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Berhenti"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Perangkat"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Geser ke atas untuk beralih aplikasi"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Tarik ke kanan untuk beralih aplikasi dengan cepat"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Aktifkan Ringkasan"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Muncul di atas bagian percakapan dan ditampilkan sebagai balon."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Setelan"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritas"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak mendukung setelan khusus percakapan"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Tidak ada balon baru-baru ini"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Balon yang baru dipakai dan balon yang telah ditutup akan muncul di sini"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Notifikasi ini tidak dapat diubah."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pilih kontrol yang akan diakses dari menu daya"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan & tarik untuk mengatur ulang kontrol"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kontrol dihapus"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Daftar semua kontrol tidak dapat dimuat."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lainnya"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Tambahkan ke kontrol perangkat"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrol diperbarui"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN berisi huruf atau simbol"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifikasi <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN salah"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Memverifikasi …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Masukkan PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Coba PIN lain"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Memuat rekomendasi"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Tutup sesi media ini"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nonaktif, periksa aplikasi"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Error, mencoba lagi..."</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Perangkat dihapus"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Tidak dapat memuat status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Error, coba lagi"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Dalam proses"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Tahan Tombol daya untuk melihat kontrol baru"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 0a5c8faee1cd..3762faca11e5 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skjáupptaka"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hefja"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stöðva"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Strjúktu upp til að skipta á milli forrita"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Dragðu til hægri til að skipta hratt á milli forrita"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Kveikja/slökkva á yfirliti"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Sýnt sem blaðra efst í samtali."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Áfram"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Forgangur"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Engar nýlegar blöðrur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Nýlegar blöðrur og blöðrur sem þú hefur lokað birtast hér"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ekki er hægt að breyta þessum tilkynningum."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Veldu hvaða stýringar birtast í aflrofavalmyndinni"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Haltu og dragðu til að endurraða stýringum"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Allar stýringar fjarlægðar"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Ekki tókst að hlaða lista yfir allar stýringar."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annað"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Bæta við tækjastjórnun"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Stýringar uppfærðar"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN inniheldur bókstafi eða tákn"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Staðfesta <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Rangt PIN-númer"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Staðfestir…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Sláðu inn PIN-númer"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prófaðu annað PIN-númer"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Hleður tillögum"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Loka þessari efnislotu"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Óvirkt, athugaðu forrit"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Villa, reynir aftur…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Tæki fjarlægt"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Ekki er hægt að hlaða stöðu"</string> <string name="controls_error_failed" msgid="960228639198558525">"Villa, reyndu aftur"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Í gangi"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Haltu aflrofanum inni til að sjá nýjar stýringar"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index fab1eab2a9e2..3e34544eaa99 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Registrazione schermo"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inizia"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Interrompi"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Scorri verso l\'alto per passare ad altre app"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Trascina verso destra per cambiare velocemente app"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Attiva/disattiva la panoramica"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Appare in cima alla sezione delle conversazioni sotto forma di bolla."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Impostazioni"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorità"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> non supporta impostazioni specifiche per le conversazioni"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nessuna bolla recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Le bolle recenti e ignorate verranno visualizzate qui"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossibile modificare queste notifiche."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Seleziona i controlli a cui accedere dal menu di accensione"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tieni premuto e trascina per riordinare i controlli"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Tutti i controlli sono stati rimossi"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Impossibile caricare l\'elenco di tutti i controlli."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altro"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Aggiungi al controllo dei dispositivi"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controlli aggiornati"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Il PIN contiene lettere o simboli"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifica <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN errato"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifica…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Inserisci PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prova con un altro PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Caricamento dei consigli"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Chiudi questa sessione multimediale"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inattivo, controlla l\'app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Errore. Nuovo tentativo…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispositivo rimosso"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Impossibile caricare lo stato"</string> <string name="controls_error_failed" msgid="960228639198558525">"Errore. Riprova"</string> <string name="controls_in_progress" msgid="4421080500238215939">"In corso"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Tieni premuto il tasto di accensione per visualizzare i nuovi controlli"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 09b53b51f574..07e1c1c951f3 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -434,6 +434,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"הקלטת המסך"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"התחלה"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"עצירה"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"יש להחליק מעלה כדי להחליף אפליקציות"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"יש לגרור ימינה כדי לעבור במהירות בין אפליקציות"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"החלפת מצב של מסכים אחרונים"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"מוצגת בחלק העליון של קטע השיחה ומופיעה כבועה."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"הגדרות"</string> <string name="notification_priority_title" msgid="2079708866333537093">"עדיפות"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"אין בועות מהזמן האחרון"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"בועות אחרונות ובועות שנסגרו יופיעו כאן"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"לא ניתן לשנות את ההתראות האלה."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"יש לבחור פקדים לגישה מתפריט ההפעלה"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"יש ללחוץ לחיצה ארוכה ולגרור כדי לארגן מחדש את הפקדים"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"כל הפקדים הוסרו"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"לא ניתן היה לטעון את הרשימה של כל הפקדים."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"אחר"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"הוספה לפקדי המכשירים"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"הפקדים עודכנו"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"קוד האימות מכיל אותיות או סמלים"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"אימות <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"קוד גישה שגוי"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"בתהליך אימות…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"יש להזין קוד אימות"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"יש לנסות קוד אימות אחר"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"בטעינת המלצות"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"סגירת הסשן הזה של המדיה"</string> <string name="controls_error_timeout" msgid="794197289772728958">"לא פעיל, יש לבדוק את האפליקציה"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"שגיאה, מתבצע ניסיון חוזר…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"המכשיר הוסר"</string> + <string name="controls_error_generic" msgid="352500456918362905">"לא ניתן לטעון את הסטטוס"</string> <string name="controls_error_failed" msgid="960228639198558525">"שגיאה, יש לנסות שוב"</string> <string name="controls_in_progress" msgid="4421080500238215939">"בתהליך"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ניתן ללחוץ על לחצן ההפעלה כדי להציג פקדים חדשים"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 74e996b1fd7d..7ced5fd3cc20 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"スクリーン レコード"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"デバイス"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"アプリを切り替えるには上にスワイプ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"右にドラッグするとアプリを素早く切り替えることができます"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"概要を切り替え"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"会話セクションの一番上にバブルとして表示されます。"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"設定"</string> <string name="notification_priority_title" msgid="2079708866333537093">"優先度"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> は会話専用の設定をサポートしていません"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近閉じたバブルはありません"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近表示されたバブルや閉じたバブルが、ここに表示されます"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"これらの通知は変更できません。"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"電源メニューからアクセスするコントロールを選択する"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"コントロールを並べ替えるには長押ししてドラッグします"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"すべてのコントロールを削除しました"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"全コントロールの一覧を読み込めませんでした。"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"その他"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"デバイス コントロールに追加"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"コントロールを更新しました"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN に英字や記号を含める"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>の確認"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN が間違っています"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"確認しています…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN の入力"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"別の PIN をお試しください"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"候補を読み込んでいます"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"このメディア セッションを閉じる"</string> <string name="controls_error_timeout" msgid="794197289772728958">"無効: アプリをご確認ください"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"エラー。再試行しています…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"デバイスを削除しました"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ステータスを読み込めません"</string> <string name="controls_error_failed" msgid="960228639198558525">"エラー: もう一度お試しください"</string> <string name="controls_in_progress" msgid="4421080500238215939">"処理中"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"電源ボタンを長押しすると、新しいコントロールが表示されます"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index d1b3334ab88b..31983033bbee 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ეკრანის ჩანაწერი"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"დაწყება"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"შეწყვეტა"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"მოწყობილობა"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"გადაფურცლეთ ზემოთ აპების გადასართავად"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"აპების სწრაფად გადასართავად ჩავლებით გადაიტანეთ მარჯვნივ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"მიმოხილვის გადართვა"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"გამოჩნდება საუბრის სექციის ზედა ნაწილში ბუშტის სახით."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"პარამეტრები"</string> <string name="notification_priority_title" msgid="2079708866333537093">"პრიორიტეტი"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ს არ აქვს სპეციალურად მიმოწერისთვის განკუთვნილი პარამეტრების მხარდაჭერა"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ბოლო დროს გამოყენებული ბუშტები არ არის"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"აქ გამოჩნდება ბოლოდროინდელი ბუშტები და უარყოფილი ბუშტები"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ამ შეტყობინებების შეცვლა შეუძლებელია."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"აირჩიეთ მართვის საშუალებები ელკვების მენიუდან"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"მართვის საშუალებების გადაწყობა შეგიძლიათ მათი ჩავლებით გადატანით"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"მართვის ყველა საშუალება ამოიშალა"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"მართვის ყველა საშუალების სია ვერ ჩაიტვირთა."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"სხვა"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"მოწყობილ. მართვის საშუალებებში დამატება"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"მართვის საშუალებები განახლდა"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-კოდი შეიცავს ასოებს ან სიმბოლოებს"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"დაადასტურეთ <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN-კოდი არასწორია"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"მიმდინარეობს დადასტურება…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"შეიყვანეთ PIN-კოდი"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"სხვა PIN-კოდის ცდა"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"მიმდინარეობს რეკომენდაციების ჩატვირთვა"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ამ მედია სესიის დახურვა"</string> <string name="controls_error_timeout" msgid="794197289772728958">"არააქტიურია, გადაამოწმეთ აპი"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"შეცდომა, ხელახალი მცდელობა…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"მოწყობილობა ამოიშალა"</string> + <string name="controls_error_generic" msgid="352500456918362905">"სტატუსი ვერ იტვირთება"</string> <string name="controls_error_failed" msgid="960228639198558525">"შეცდომა, ისევ ცადეთ"</string> <string name="controls_in_progress" msgid="4421080500238215939">"მუშავდება"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ხანგრძლივად დააჭირეთ ჩართვის ღილაკს მართვის ახალი საშუალებების სანახავად"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index b8e0ef5227fd..537aa3630b4b 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Экранды жазу"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Бастау"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Тоқтату"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Қолданбалар арасында ауысу үшін жоғары сырғытыңыз"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Қолданбаларды жылдам ауыстырып қосу үшін оңға қарай сүйреңіз"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Шолуды қосу/өшіру"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Сөйлесу бөлімінің жоғарғы жағында және қалқыма хабар түрінде көрсетіледі."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Параметрлер"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Маңыздылығы"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Жақындағы қалқыма хабарлар жоқ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Жақында ашылған және жабылған қалқыма хабарлар осы жерде көрсетіледі."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"\"Қуат\" мәзірінен пайдалануға болатын басқару элементтерін таңдаңыз."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Басқару элементтерінің ретін өзгерту үшін оларды басып тұрып сүйреңіз."</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Барлық басқару элементтері өшірілді."</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Барлық басқару элементі тізімі жүктелмеді."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Басқа"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Құрылғы басқару виджеттеріне қосу"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Басқару элементтері жаңартылды"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN коды әріптерден не таңбалардан құралады."</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> растау"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN коды қате"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Расталуда…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN кодын енгізіңіз."</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Басқа PIN кодын енгізіңіз"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Жүктеуге қатысты ұсыныстар"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Мультимедиа сеансын жабу"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Өшірулі. Қолданба тексеріңіз."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Қате, әрекет қайталануда…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Құрылғы өшірілді."</string> + <string name="controls_error_generic" msgid="352500456918362905">"Күйді жүктеу мүмкін емес."</string> <string name="controls_error_failed" msgid="960228639198558525">"Қате шықты. Қайталап көріңіз."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Орындалуда"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Жаңа басқару элементтерін көру үшін \"Қуат\" түймесін басып тұрыңыз."</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index ebe3659bd09e..97a1c36b6aee 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ការថតអេក្រង់"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ចាប់ផ្ដើម"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ឈប់"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"ឧបករណ៍"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"អូសឡើងលើដើម្បីប្តូរកម្មវិធី"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"អូសទៅស្ដាំដើម្បីប្ដូរកម្មវិធីបានរហ័ស"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"បិទ/បើកទិដ្ឋភាពរួម"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"បង្ហាញនៅខាងលើផ្នែកសន្ទនា និងបង្ហាញជាពពុះ។"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ការកំណត់"</string> <string name="notification_priority_title" msgid="2079708866333537093">"អាទិភាព"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> មិនអាចប្រើការកំណត់ជាក់លាក់សម្រាប់ការសន្ទនាបានទេ"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"មិនមានពពុះថ្មីៗទេ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ពពុះថ្មីៗ និងពពុះដែលបានបិទនឹងបង្ហាញនៅទីនេះ"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"មិនអាចកែប្រែការជូនដំណឹងទាំងនេះបានទេ។"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ជ្រើសរើសការគ្រប់គ្រង ដើម្បីចូលប្រើពីម៉ឺនុយថាមពល"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ចុចឱ្យជាប់ រួចអូសដើម្បីរៀបចំការគ្រប់គ្រងឡើងវិញ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"បានលុបការគ្រប់គ្រងទាំងអស់ហើយ"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"មិនអាចផ្ទុកបញ្ជីនៃការគ្រប់គ្រងទាំងអស់បានទេ។"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ផ្សេងៗ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"បញ្ចូលទៅក្នុងផ្ទាំងគ្រប់គ្រងឧបករណ៍"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"បានធ្វើបច្ចុប្បន្នភាពការគ្រប់គ្រង"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"កូដ PIN មានអក្សរ ឬនិមិត្តសញ្ញា"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"ផ្ទៀងផ្ទាត់ <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"កូដ PIN មិនត្រឹមត្រូវ"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"កំពុងផ្ទៀងផ្ទាត់…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"បញ្ចូលកូដ PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"សាកល្បងប្រើកូដ PIN ផ្សេងទៀត"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"កំពុងផ្ទុកការណែនាំ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"បិទវគ្គមេឌៀនេះ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"អសកម្ម ពិនិត្យមើលកម្មវិធី"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"បញ្ហា កំពុងព្យាយាមម្ដងទៀត…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"បានលុបឧបករណ៍"</string> + <string name="controls_error_generic" msgid="352500456918362905">"មិនអាចផ្ទុកស្ថានភាពបានទេ"</string> <string name="controls_error_failed" msgid="960228639198558525">"មានបញ្ហា សូមព្យាយាមម្តងទៀត"</string> <string name="controls_in_progress" msgid="4421080500238215939">"កំពុងដំណើរការ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"សង្កត់ប៊ូតុងថាមពល ដើម្បីមើលឃើញការគ្រប់គ្រងថ្មីៗ"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 9b411daec4ea..7fe7d46e1b0e 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡ್"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ಪ್ರಾರಂಭಿಸಿ"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ನಿಲ್ಲಿಸಿ"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬದಲಿಸಲು ತ್ವರಿತವಾಗಿ ಬಲಕ್ಕೆ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ಟಾಗಲ್ ನ ಅವಲೋಕನ"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ಸಂಭಾಷಣೆ ವಿಭಾಗದ ಮೇಲ್ಬಾಗದಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ ಮತ್ತು ಬಬಲ್ನಂತೆ ಗೋಚರಿಸುತ್ತದೆ."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ಆದ್ಯತೆ"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಇಲ್ಲ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ಇತ್ತೀಚಿನ ಬಬಲ್ಸ್ ಮತ್ತು ವಜಾಗೊಳಿಸಿದ ಬಬಲ್ಸ್ ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ಪವರ್ ಮೆನುವಿನಿಂದ ಪ್ರವೇಶಿಸಲು ನಿಯಂತ್ರಣಗಳನ್ನು ಆರಿಸಿ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ನಿಯಂತ್ರಣಗಳನ್ನು ಮರುಹೊಂದಿಸಲು ಹೋಲ್ಡ್ ಮಾಡಿ ಮತ್ತು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ಎಲ್ಲಾ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"ಎಲ್ಲಾ ನಿಯಂತ್ರಣಗಳ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಆಗಲಿಲ್ಲ."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ಇತರ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳಿಗೆ ಸೇರಿಸಿ"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"ನಿಯಂತ್ರಣಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ಪಿನ್ ಅಕ್ಷರಗಳು ಅಥವಾ ಸಂಕೇತಗಳನ್ನು ಒಳಗೊಂಡಿದೆ"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ಅನ್ನು ಪರಿಶೀಲಿಸಿ"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ತಪ್ಪಾದ ಪಿನ್"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ಪಿನ್ ನಮೂದಿಸಿ"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ಮತ್ತೊಂದು ಪಿನ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ಶಿಫಾರಸುಗಳು ಲೋಡ್ ಆಗುತ್ತಿವೆ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ಈ ಮಾಧ್ಯಮ ಸೆಶನ್ ಅನ್ನು ಮುಚ್ಚಿರಿ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ನಿಷ್ಕ್ರಿಯ, ಆ್ಯಪ್ ಪರಿಶೀಲಿಸಿ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ದೋಷ, ಮರುಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ಸ್ಥಿತಿ ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> <string name="controls_error_failed" msgid="960228639198558525">"ದೋಷ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ಪ್ರಗತಿಯಲ್ಲಿದೆ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ಹೊಸ ನಿಯಂತ್ರಣಗಳನ್ನು ನೋಡಲು ಪವರ್ ಬಟನ್ ಹಿಡಿದುಕೊಳ್ಳಿ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 38ae28d61cf3..e27f208e55e8 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"화면 녹화"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"시작"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"중지"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"기기"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"위로 스와이프하여 앱 전환"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"앱을 빠르게 전환하려면 오른쪽으로 드래그"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"최근 사용 버튼 전환"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"대화 섹션 상단에 대화창으로 표시"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"설정"</string> <string name="notification_priority_title" msgid="2079708866333537093">"우선순위"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서는 대화 관련 설정을 지원하지 않습니다."</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"최근에 닫은 대화창 없음"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"최근 대화창과 내가 닫은 대화창이 여기에 표시됩니다."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"이 알림은 수정할 수 없습니다."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"전원 메뉴에서 액세스할 컨트롤을 선택합니다."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"길게 누르고 드래그하여 컨트롤 재정렬"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"모든 컨트롤 삭제됨"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"전체 컨트롤 목록을 로드할 수 없습니다."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"기타"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"기기 제어에 추가"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"컨트롤 업데이트됨"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN에 문자나 기호가 포함됨"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> 확인"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"잘못된 PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"확인 중…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN 입력"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"다른 PIN으로 다시 시도"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"추천 제어 기능 로드 중"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"이 미디어 세션 닫기"</string> <string name="controls_error_timeout" msgid="794197289772728958">"비활성. 앱을 확인하세요."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"오류 발생, 다시 시도 중…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"기기가 삭제됨"</string> + <string name="controls_error_generic" msgid="352500456918362905">"통계를 로드할 수 없음"</string> <string name="controls_error_failed" msgid="960228639198558525">"오류. 다시 시도하세요."</string> <string name="controls_in_progress" msgid="4421080500238215939">"진행 중"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"새 컨트롤을 보려면 전원 버튼을 길게 누르세요."</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 0e422d4778b8..93deca220b9e 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Экранды жаздыруу"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Баштадык"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Токтотуу"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Башка колдонмого которулуу үчүн,, өйдө сүрүңүз"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Колдонмолорду тез которуштуруу үчүн, оңго сүйрөңүз"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Сереп салууну өчүрүү/күйгүзүү"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Жазышуу бөлүмүнүн жогорку жагында көрсөтүлүп, калкып чыкма билдирме катары пайда болот."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Жөндөөлөр"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Маанилүүлүгү"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Акыркы калкып чыкма билдирмелер жок"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Кайра жөнөтүлгөн жана жабылган калкып чыкма билдирмелер ушул жерде көрүнөт"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Бул билдирмелерди өзгөртүүгө болбойт."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Күйгүзүү/өчүрүү баскычынын менюсу үчүн көзөмөлдөрдү тандаңыз"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Башкаруу элементтеринин иретин өзгөртүү үчүн кармап туруп, сүйрөңүз"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Бардык башкаруу элементтери өчүрүлдү"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Бардык көзөмөлдөрдүн тизмеси жүктөлгөн жок."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Башка"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Түзмөктү башкаруу элементтерине кошуу"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Башкаруу элементтери жаңырды"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN код тамгаларды же символдорду камтыйт"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> түзмөгүн ырастаңыз"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN код туура эмес"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Ырасталууда…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN кодду киргизиңиз"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Башка PIN кодду колдонуңүз"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Сунуштар жүктөлүүдө"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Бул медиа сеансын жабуу"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Жигерсиз. Колдонмону текшериңиз"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Ката, дагы аракет жасалууда…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Түзмөктү көзөмөлдөө өчүрүлдү"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Абалы жүктөлгөн жок"</string> <string name="controls_error_failed" msgid="960228639198558525">"Ката, кайталап көрүңүз"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Аткарылууда"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Башкаруу элементтерин көрүү үчүн күйгүзүү/өчүрүү баскычын коё бербей басып туруңуз"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 880ecea877a7..38db899378c7 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ການບັນທຶກໜ້າຈໍ"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ເລີ່ມ"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ຢຸດ"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"ອຸປະກອນ"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ປັດຂື້ນເພື່ອສະຫຼັບແອັບ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ລາກໄປຂວາເພື່ອສະຫຼັບແອັບດ່ວນ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ສະຫຼັບພາບຮວມ"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ສະແດງຢູ່ເທິງສຸດຂອງພາກສ່ວນການສົນທະນາ ແລະ ສະແດງເປັນຟອງ."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ຕັ້ງຄ່າ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ຄວາມສຳຄັນ"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ຮອງຮັບການຕັ້ງຄ່າສະເພາະຂອງການສົນທະນາ"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ບໍ່ມີຟອງຫຼ້າສຸດ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ຟອງຫຼ້າສຸດ ແລະ ຟອງທີ່ປິດໄປຈະປາກົດຢູ່ບ່ອນນີ້"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ເລືອກການຄວບຄຸມເພື່ອເຂົ້າເຖິງຈາກເມນູເປີດປິດ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ກົດຄ້າງໄວ້ເພື່ອຈັດຮຽງການຄວບຄຸມຄືນໃໝ່"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ລຶບການຄວບຄຸມທັງໝົດອອກແລ້ວ"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"ບໍ່ສາມາດໂຫຼດລາຍຊື່ການຄວບຄຸມທັງໝົດໄດ້."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ອື່ນໆ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ເພີ່ມໃສ່ການຄວບຄຸມອຸປະກອນ"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"ອັບເດດການຄວບຄຸມແລ້ວ"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN ປະກອບມີຕົວອັກສອນ ຫຼື ສັນຍາລັກ"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"ຢັ້ງຢືນ <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN ບໍ່ຖືກຕ້ອງ"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"ກໍາລັງຢັ້ງຢືນ…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ປ້ອນ PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ລອງໃຊ້ PIN ອື່ນ"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ກຳລັງໂຫຼດຄຳແນະນຳ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ປິດເຊດຊັນມີເດຍນີ້"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ບໍ່ເຮັດວຽກ, ກະລຸນາກວດສອບແອັບ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ຜິດພາດ, ກໍາລັງລອງໃໝ່…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ລຶບອຸປະກອນອອກແລ້ວ"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ບໍ່ສາມາດໂຫຼດສະຖານະໄດ້"</string> <string name="controls_error_failed" msgid="960228639198558525">"ຜິດພາດ, ກະລຸນາລອງໃໝ່"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ກຳລັງດຳເນີນການຢູ່"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້ເພື່ອເບິ່ງການຄວບຄຸມໃໝ່"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 17be731c06c6..277814fd4099 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -434,6 +434,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekrano įrašas"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Pradėti"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stabdyti"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Perbraukite aukštyn, kad perjungtumėte programas"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Vilkite į dešinę, kad greitai perjungtumėte programas"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Perjungti apžvalgą"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Rodoma pokalbio skilties viršuje kaip burbulas."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nustatymai"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritetas"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nėra naujausių burbulų"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Naujausi ir atsisakyti burbulus bus rodomi čia"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pasirinkite valdiklius, kuriuos norite pasiekti įjungimo meniu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Norėdami pertvarkyti valdiklius, vilkite laikydami nuspaudę"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Visi valdikliai pašalinti"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nepavyko įkelti visų valdiklių sąrašo."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Kita"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Pridėjimas prie įrenginio valdiklių"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Valdikliai atnaujinti"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN kodą sudaro raidės arba simboliai"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> patvirtinimas"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Netinkamas PIN kodas"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Patvirtinama…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Įveskite PIN kodą"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Išbandykite kitą PIN kodą"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Įkeliamos rekomendacijos"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Uždaryti šį medijos seansą"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktyvu, patikrinkite progr."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Klaida, bandoma iš naujo…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Įrenginys pašalintas"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Nepavyko įkelti būsenos"</string> <string name="controls_error_failed" msgid="960228639198558525">"Klaida, bandykite dar kartą"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Vyksta"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Jei norite peržiūrėti naujus valdiklius, laikykite paspaudę maitinimo mygtuką"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index f402323deac3..46df9b90c9da 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -432,6 +432,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekrāna ierakstīšana"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Sākt"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Apturēt"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Velciet augšup, lai pārslēgtu lietotnes"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Lai ātri pārslēgtu lietotnes, velciet pa labi"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Pārskata pārslēgšana"</string> @@ -715,6 +717,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Tiek rādīta sarunas sadaļas augšdaļā kā burbulis."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Iestatījumi"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritārs"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nav nesen aizvērtu burbuļu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Šeit būs redzami nesen rādītie burbuļi un aizvērtie burbuļi"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Šos paziņojumus nevar modificēt."</string> @@ -1030,6 +1034,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izvēlieties vadīklas, kurām piekļūt no barošanas izvēlnes"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Lai pārkārtotu vadīklas, turiet un velciet tās"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Visas vadīklas ir noņemtas"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nevarēja ielādēt sarakstu ar visām vadīklām."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Cita"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Pievienošana ierīču vadīklām"</string> @@ -1038,6 +1044,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Vadīklas atjauninātas"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN ietver burtus vai simbolus."</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifikācija: <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Nepareizs PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Notiek verifikācija…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Ievadiet PIN."</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Izmēģiniet citu PIN"</string> @@ -1047,6 +1054,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Notiek ieteikumu ielāde"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Aizvērt multivides sesiju"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktīva, pārbaudiet lietotni"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Radās kļūda. Mēģina vēlreiz…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Ierīce ir noņemta."</string> + <string name="controls_error_generic" msgid="352500456918362905">"Nevar ielādēt statusu."</string> <string name="controls_error_failed" msgid="960228639198558525">"Radās kļūda. Mēģiniet vēlreiz."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Sākta"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Nospiediet barošanas pogu un turiet to, lai skatītu jaunas vadīklas"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 03af224a320b..bf688baeb2d3 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Снимање екран"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Започни"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Сопри"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Уред"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Повлечете нагоре за да се префрлите од една на друга апликација"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Повлечете надесно за брзо префрлање меѓу апликациите"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Вклучи/исклучи преглед"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Се појавува на горниот дел од разговорот и изгледа како балонче."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Поставки"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддржува поставки поврзани со разговорите"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Нема неодамнешни балончиња"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Неодамнешните и отфрлените балончиња ќе се појавуваат тука"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Овие известувања не може да се изменат"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Изберете ги контролите до кои ќе пристапувате од менито за вклучување"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржете и влечете за да ги преуредите контролите"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Сите контроли се отстранети"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Не можеше да се вчита списокот со сите контроли."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друга"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Додајте во контроли за уредите"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Контролите се ажурирани"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-кодот содржи букви или симболи"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Потврдете го <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Погрешен PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Се потврдува…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Внесете PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Обидете се со друг PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Се вчитуваат препораки"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Затвори ја аудиовизуелнава сесија"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивна, провери апликација"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Грешка, повторен обид…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Уредот е отстранет"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Не може да се вчита статусот"</string> <string name="controls_error_failed" msgid="960228639198558525">"Грешка, обидете се повторно"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Во тек"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Задржете го копчето за вклучување за да ги видите новите контроли"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index d7e6b3b687ad..b4715ca1d1a1 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"സ്ക്രീൻ റെക്കോർഡ്"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ആരംഭിക്കുക"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"നിര്ത്തുക"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ആപ്പുകൾ മാറാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ആപ്പുകൾ പെട്ടെന്ന് മാറാൻ വലത്തോട്ട് വലിച്ചിടുക"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"അവലോകനം മാറ്റുക"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"സംഭാഷണ വിഭാഗത്തിന് മുകളിൽ ബബിളായി ദൃശ്യമാവുന്നു."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ക്രമീകരണം"</string> <string name="notification_priority_title" msgid="2079708866333537093">"മുൻഗണന"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"അടുത്തിടെയുള്ള ബബിളുകൾ ഒന്നുമില്ല"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"അടുത്തിടെയുള്ള ബബിളുകൾ, ഡിസ്മിസ് ചെയ്ത ബബിളുകൾ എന്നിവ ഇവിടെ ദൃശ്യമാവും"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"പവർ മെനുവിൽ നിന്ന് ആക്സസ് ചെയ്യേണ്ട നിയന്ത്രണങ്ങൾ തിരഞ്ഞെടുക്കുക"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"നിയന്ത്രണങ്ങൾ പുനഃക്രമീകരിക്കാൻ പിടിച്ച് വലിച്ചിടുക"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"എല്ലാ നിയന്ത്രണങ്ങളും നീക്കം ചെയ്തു"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"എല്ലാ നിയന്ത്രണങ്ങളുടെയും ലിസ്റ്റ് ലോഡ് ചെയ്യാനായില്ല."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"മറ്റുള്ളവ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ഉപകരണ നിയന്ത്രണങ്ങളിലേക്ക് ചേർക്കുക"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"നിയന്ത്രണങ്ങൾ അപ്ഡേറ്റ് ചെയ്തു"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"പിന്നിൽ അക്ഷരങ്ങളോ ചിഹ്നങ്ങളോ അടങ്ങിയിരിക്കുന്നു"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> പരിശോധിച്ചുറപ്പിക്കുക"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"പിൻ തെറ്റാണ്"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"പരിശോധിച്ചുറപ്പിക്കുന്നു…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"പിൻ നൽകുക"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"മറ്റൊരു പിൻ പരീക്ഷിക്കുക"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"നിർദ്ദേശങ്ങൾ ലോഡ് ചെയ്യുന്നു"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ഈ മീഡിയ സെഷൻ അടയ്ക്കുക"</string> <string name="controls_error_timeout" msgid="794197289772728958">"നിഷ്ക്രിയം, ആപ്പ് പരിശോധിക്കൂ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"പിശക്, വീണ്ടും ശ്രമിക്കുന്നു…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ഉപകരണം നീക്കം ചെയ്തു"</string> + <string name="controls_error_generic" msgid="352500456918362905">"നില ലോഡ് ചെയ്യാനാകുന്നില്ല"</string> <string name="controls_error_failed" msgid="960228639198558525">"പിശക്, വീണ്ടും ശ്രമിക്കുക"</string> <string name="controls_in_progress" msgid="4421080500238215939">"പുരോഗതിയിലാണ്"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"പുതിയ നിയന്ത്രണങ്ങൾ കാണാൻ പവർ ബട്ടൺ പിടിക്കുക"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 1e646bc1ac4a..bf0b7c8bb6a9 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Дэлгэцийн бичлэг хийх"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Эхлүүлэх"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зогсоох"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Төхөөрөмж"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Апп сэлгэхийн тулд дээш шударна уу"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Аппуудыг хурдан сэлгэхийн тулд баруун тийш чирнэ үү"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Тоймыг унтраах/асаах"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Харилцан ярианы хэсгийн дээд талд, бөмбөлөг хэлбэрээр харагдана."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Тохиргоо"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Ач холбогдол"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> харилцан ярианы тодорхой тохиргоог дэмждэггүй"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Саяхны бөмбөлөг алга байна"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Саяхны бөмбөлгүүд болон үл хэрэгссэн бөмбөлгүүд энд харагдана"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Эдгээр мэдэгдлийг өөрчлөх боломжгүй."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Тэжээлийн цэсээс хандах хяналтуудыг сонгоно уу"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Хяналтуудыг дахин засварлахын тулд дараад чирнэ үү"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Бүх хяналтыг хассан"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Бүх хяналтын жагсаалтыг ачаалж чадсангүй."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Бусад"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Төхөөрөмжийн хяналт руу нэмэх"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Хяналтуудыг шинэчиллээ"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ПИН нь үсэг эсвэл дүрс тэмдэгт агуулдаг"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>-г бататгах"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ПИН код буруу байна"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Баталгаж байна…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ПИН оруулна уу"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Өөр ПИН ашиглах"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Зөвлөмжүүдийг ачаалж байна"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Медианы энэ харилцан үйлдлийг хаах"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Идэвхгүй байна, аппыг шалгана уу"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Алдаа, дахин оролдож байна…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Төхөөрөмжийг хассан"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Статус ачаалах боломжгүй"</string> <string name="controls_error_failed" msgid="960228639198558525">"Алдаа гарав, дахин оролдоно уу"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Үргэлжилж байна"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Шинэ хяналтыг харахын тулд асаах товчийг удаан дарна уу"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index af8a52db49be..6868a7f76054 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"स्क्रीन रेकॉर्ड"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"सुरू"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"थांबा"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"अॅप्स स्विच करण्यासाठी वर स्वाइप करा"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"अॅप्स वर झटपट स्विच करण्यासाठी उजवीकडे ड्रॅग करा"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"अवलोकन टॉगल करा."</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"संभाषण विभागाच्या सर्वात वरती दिसते आणि बबलसारखे दिसते."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"सेटिंग्ज"</string> <string name="notification_priority_title" msgid="2079708866333537093">"प्राधान्य"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"अलीकडील कोणतेही बबल नाहीत"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"अलीकडील बबल आणि डिसमिस केलेले बबल येथे दिसतील"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"या सूचनांमध्ये सुधारणा केली जाऊ शकत नाही."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"पॉवर मेनूमधून अॅक्सेस करण्यासाठी नियंत्रणे निवडा"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियंत्रणांची पुनर्रचना करण्यासाठी धरून ठेवा आणि ड्रॅग करा"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"सर्व नियंत्रणे काढून टाकली आहेत"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"सर्व नियंत्रणांची सूची लोड करता आली नाही."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"इतर"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"डिव्हाइस नियंत्रणांमध्ये जोडा"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"नियंत्रणे अपडेट केली आहेत"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"पिनमध्ये अक्षरांचा किंवा चिन्हांचा समावेश असतो"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ची पडताळणी करा"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"चुकीचा पिन"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"पडताळणी करत आहे…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"पिन एंटर करा"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"दुसरा पिन वापरून पहा"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"शिफारशी लोड करत आहे"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"हे मीडिया सेशन बंद करा"</string> <string name="controls_error_timeout" msgid="794197289772728958">"निष्क्रिय, ॲप तपासा"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"एरर, पुन्हा प्रयत्न करत आहे…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"डिव्हाइस काढून टाकले आहे"</string> + <string name="controls_error_generic" msgid="352500456918362905">"स्थिती लोड करू शकत नाही"</string> <string name="controls_error_failed" msgid="960228639198558525">"एरर, पुन्हा प्रयत्न करा"</string> <string name="controls_in_progress" msgid="4421080500238215939">"प्रगतीपथावर आहे"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"नवीन नियंत्रणे पाहण्यासाठी पॉवर बटण धरून ठेवा"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index c1c35a1dbfcb..baaccf3af1ee 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Rakam Skrin"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Mula"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Berhenti"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Leret ke atas untuk menukar apl"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Seret ke kanan untuk beralih apl dengan pantas"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Togol Ikhtisar"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Ditunjukkan di sebelah atas bahagian perbualan dan muncul sebagai gelembung."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Tetapan"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Keutamaan"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Tiada gelembung terbaharu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Gelembung baharu dan gelembung yang diketepikan akan dipaparkan di sini"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Pemberitahuan ini tidak boleh diubah suai."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pilih kawalan untuk diakses daripada menu kuasa"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan & seret untuk mengatur semula kawalan"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kawalan dialih keluar"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Senarai semua kawalan tidak dapat dimuatkan."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lain-lain"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Tambahkan pada kawalan peranti"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kawalan dikemas kini"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN mengandungi huruf atau simbol"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Sahkan <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN salah"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Mengesahkan…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Masukkan PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Cuba PIN lain"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Memuatkan cadangan"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Tutup sesi media ini"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Tidak aktif, semak apl"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Ralat, mencuba semula…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Peranti dialih keluar"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Tidak dapat memuatkan status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Ralat, cuba lagi"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Sedang berlangsung"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Tahan butang Kuasa untuk melihat kawalan baharu"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index e4a07fbd7a76..4a4e96ae2643 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ဖန်သားပြင် မှတ်တမ်းတင်ရန်"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"စတင်ရန်"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ရပ်ရန်"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"စက်"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"အက်ပ်များကို ဖွင့်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"အက်ပ်များကို ပြောင်းရန် ညာဘက်သို့ ဖိဆွဲပါ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ဖွင့်၊ ပိတ် အနှစ်ချုပ်"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"စကားဝိုင်းကဏ္ဍ၏ ထိပ်ပိုင်းတွင် ပြပြီး ပူဖောင်းကွက်အဖြစ် မြင်ရသည်။"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ဆက်တင်များ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ဦးစားပေး"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> က စကားဝိုင်းအလိုက် ဆက်တင်များကို မပံ့ပိုးပါ"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"လတ်တလော ပူဖောင်းကွက်များ မရှိပါ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"လတ်တလော ပူဖောင်းကွက်များနှင့် ပိတ်လိုက်သော ပူဖောင်းကွက်များကို ဤနေရာတွင် မြင်ရပါမည်"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ဖွင့်ပိတ်မီနူးမှ သုံးရန် ထိန်းချုပ်မှုများ ရွေးပါ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ထိန်းချုပ်မှုများ ပြန်စီစဉ်ရန် ဖိပြီးဆွဲပါ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ထိန်းချုပ်မှုအားလုံး ဖယ်ရှားလိုက်သည်"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"ထိန်းချုပ်မှုအားလုံး၏ စာရင်းကို ဖွင့်၍မရပါ။"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"အခြား"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"စက်ထိန်းစနစ်သို့ ထည့်ရန်"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"ထိန်းချုပ်မှု အပ်ဒိတ်လုပ်ပြီးပြီ"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ပင်နံပါတ်တွင် စာလုံး သို့မဟုတ် သင်္ကေတများပါဝင်သည်"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ကို အတည်ပြုခြင်း"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ပင်နံပါတ် မှားနေသည်"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"အတည်ပြုနေသည်…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ပင်နံပါတ် ထည့်ပါ"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"နောက်ပင်နံပါတ်တစ်ခု စမ်းကြည့်ရန်"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"အကြံပြုချက်များ ဖွင့်နေသည်"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ဤမီဒီယာစက်ရှင်ကို ပိတ်ပါ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ရပ်နေသည်၊ အက်ပ်ကို စစ်ဆေးပါ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"မှားသွားသည်၊ ပြန်စမ်းနေသည်…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"စက်ကို ဖယ်ရှားထားသည်"</string> + <string name="controls_error_generic" msgid="352500456918362905">"အခြေအနေကို ဖွင့်၍မရပါ"</string> <string name="controls_error_failed" msgid="960228639198558525">"မှားသွားသည်၊ ပြန်စမ်းကြည့်ပါ"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ဆောင်ရွက်နေသည်"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ထိန်းချုပ်မှုအသစ်များ ကြည့်ရန် ဖွင့်ပိတ်ခလုတ်ကို ဖိထားပါ"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 088371e2449e..dc749ecf6823 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skjermopptak"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stopp"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Enhet"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Sveip opp for å bytte apper"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Dra til høyre for å bytte apper raskt"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Slå oversikten av eller på"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Vises øverst i en samtaledel og vises som en boble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Innstillinger"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> støtter ikke samtalespesifikke innstillinger"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ingen nylige bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Nylige bobler og avviste bobler vises her"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse varslene kan ikke endres."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Velg kontroller som er tilgjengelige fra av/på-menyen"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold og dra for å flytte kontroller"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroller er fjernet"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Listen over alle kontroller kunne ikke lastes inn."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annet"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Legg til i enhetsstyring"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrollene er oppdatert"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-koden inneholder bokstaver eller symboler"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Bekreft <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Feil PIN-kode"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Bekrefter …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Skriv inn PIN-koden"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prøv en annen PIN-kode"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Laster inn anbefalinger"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Lukk denne medieøkten"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv. Sjekk appen"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Feil. Prøver igjen …"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Enheten er fjernet"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Kan ikke laste inn status"</string> <string name="controls_error_failed" msgid="960228639198558525">"En feil oppsto. Prøv på nytt"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Pågår"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Hold inne av/på-knappen for å se kontroller"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 04cdeaf7685c..04fff8517566 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"स्रिनको रेकर्ड"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"सुरु गर्नुहोस्"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"रोक्नुहोस्"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"एपहरू बदल्न माथितिर स्वाइप गर्नुहोस्"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"एपहरू बदल्न द्रुत गतिमा दायाँतिर ड्र्याग गर्नुहोस्"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"परिदृश्य टगल गर्नुहोस्"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"वार्तालाप खण्डको सिरानमा बबलका रूपमा देखा पर्छ।"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"सेटिङ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"हालैका बबलहरू छैनन्"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"हालैका बबल र खारेज गरिएका बबलहरू यहाँ देखिने छन्"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"पावर मेनुबाट प्रयोग गर्न चाहेका नियन्त्रण सुविधाहरू छान्नुहोस्"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियन्त्रणहरूको क्रम मिलाउन तिनलाई थिचेर ड्र्याग गर्नुहोस्"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"सबै नियन्त्रणहरू हटाइए"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"सबै नियन्त्रणहरूको सूची लोड गर्न सकिएन।"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"यन्त्र नियन्त्रण गर्ने विजेटहरूको सूचीमा थप्नुहोस्"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"नियन्त्रण सुविधाहरू अद्यावधिक गरिए"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN मा अक्षर वा चिन्हहरू समाविष्ट हुन्छन्"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> पुष्टि गर्नुहोस्"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN मिलेन"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"पुष्टि गर्दै…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN प्रविष्टि गर्नुहोस्"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"अर्को PIN प्रयोग गरी हेर्नु…"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"सिफारिसहरू लोड गर्दै"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"यो मिडिया सत्र बन्द गर्नुहोस्"</string> <string name="controls_error_timeout" msgid="794197289772728958">"निष्क्रिय छ, एप जाँच गर्नु…"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"त्रुटि भयो, फेरि प्रयास गर्दै…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"यन्त्र हटाइयो"</string> + <string name="controls_error_generic" msgid="352500456918362905">"वस्तुस्थिति लोड गर्न सकिएन"</string> <string name="controls_error_failed" msgid="960228639198558525">"त्रुटि भयो, फेरि प्रयास गर्नु…"</string> <string name="controls_in_progress" msgid="4421080500238215939">"कार्य हुँदै छ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"नयाँ नियन्त्रण सुविधाहरू हेर्न पावर बटन थिचिराख्नुहोस्"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index dd730d44c694..7376861ca5d6 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Schermopname"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starten"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stoppen"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Apparaat"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Veeg omhoog om te schakelen tussen apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Sleep naar rechts om snel tussen apps te schakelen"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Overzicht in-/uitschakelen"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Wordt bovenaan het gedeelte met gesprekken weergegeven en als een bubbel."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Instellingen"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ondersteunt geen gespreksspecifieke instellingen"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Geen recente bubbels"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Recente bubbels en gesloten bubbels worden hier weergegeven"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Deze meldingen kunnen niet worden aangepast."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Kies bedieningselementen die je vanaf het aan/uit-menu wilt kunnen gebruiken"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Houd vast en sleep om de bedieningselementen opnieuw in te delen"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle bedieningselementen verwijderd"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Kan lijst met alle bedieningselementen niet laden."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Overig"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Toevoegen aan apparaatbediening"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Bedieningselementen geüpdated"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Pincode bevat letters of symbolen"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> verifiëren"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Onjuiste pincode"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifiëren…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Geef de pincode op"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Een andere pincode proberen"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Aanbevelingen laden"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Deze mediasessie sluiten"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactief, check de app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Fout. Opnieuw proberen…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Apparaat verwijderd"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Kan status niet laden"</string> <string name="controls_error_failed" msgid="960228639198558525">"Fout, probeer het opnieuw"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Bezig"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Houd de aan/uit-knop ingedrukt om nieuwe bedieningselementen te bekijken"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 5c0679675ae7..08afd1fc4a58 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ସ୍କ୍ରିନ୍ ରେକର୍ଡ"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ଆରମ୍ଭ କରନ୍ତୁ"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ବନ୍ଦ କରନ୍ତୁ"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ଆପ୍କୁ ବଦଳ କରିବା ପାଇଁ ସ୍ଵାଇପ୍ କରନ୍ତୁ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ଆପ୍ଗୁଡ଼ିକ ମଧ୍ୟରେ ଶୀଘ୍ର ବଦଳ କରିବା ପାଇଁ ଡାହାଣକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ସଂକ୍ଷିପ୍ତ ବିବରଣୀକୁ ଟୋଗଲ୍ କରନ୍ତୁ"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ଏହା ବାର୍ତ୍ତାଳାପ ବିଭାଗର ଶୀର୍ଷରେ ବବଲ୍ ଭାବେ ଦେଖାଯାଏ।"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ସେଟିଂସ୍"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ପ୍ରାଥମିକତା"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ବର୍ତ୍ତମାନ କୌଣସି ବବଲ୍ ନାହିଁ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ବର୍ତ୍ତମାନର ଏବଂ ଖାରଜ କରାଯାଇଥିବା ବବଲଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିବର୍ତ୍ତନ କରିହେବ ନାହିଁ।"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ପାୱାର ମେନୁରୁ ଆକ୍ସେସ୍ କରିବାକୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ବାଛନ୍ତୁ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ପୁଣି ସଜାଇବାକୁ ସେଗୁଡ଼ିକୁ ଧରି ଟାଣନ୍ତୁ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ସମସ୍ତ ନିୟନ୍ତ୍ରଣ କାଢ଼ି ଦିଆଯାଇଛି"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"ସବୁ ନିୟନ୍ତ୍ରଣର ତାଲିକା ଲୋଡ୍ କରିପାରିଲା ନାହିଁ।"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ଅନ୍ୟ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକରେ ଯୋଗ କରନ୍ତୁ"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଅପଡେଟ୍ କରାଯାଇଛି"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PINରେ ଅକ୍ଷର କିମ୍ୱା ସଙ୍କେତଗୁଡ଼ିକ ଥାଏ"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ଯାଞ୍ଚ କରନ୍ତୁ"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ଭୁଲ PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"ଯାଞ୍ଚ କରାଯାଉଛି…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN ଲେଖନ୍ତୁ"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ଅନ୍ୟ ଏକ PIN ଚେଷ୍ଟା କରି ଦେଖନ୍ତୁ"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ସୁପାରିଶଗୁଡ଼ିକ ଲୋଡ୍ କରାଯାଉଛି"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ଏହି ମିଡିଆ ସେସନ୍ ବନ୍ଦ କରନ୍ତୁ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ନିଷ୍କ୍ରିୟ ଅଛି, ଆପ ଯାଞ୍ଚ କରନ୍ତୁ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ତ୍ରୁଟି, ପୁଣି ଚେଷ୍ଟା କରୁଛି…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ଡିଭାଇସ୍ କାଢ଼ି ଦିଆଯାଇଛି"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ସ୍ଥିତି ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ"</string> <string name="controls_error_failed" msgid="960228639198558525">"ତ୍ରୁଟି ହୋଇଛି, ପୁଣି ଚେଷ୍ଟା କର"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ପ୍ରଗତିରେ ଅଛି"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ନୂଆ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ ପାୱାର ବଟନକୁ ଧରି ରଖନ୍ତୁ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 88ae0360010d..60846c60dc29 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਰ"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ਸ਼ੁਰੂ ਕਰੋ"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ਰੋਕੋ"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ਐਪਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ਐਪਾਂ ਵਿਚਾਲੇ ਤੇਜ਼ੀ ਨਾਲ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਘਸੀਟੋ"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"ਰੂਪ-ਰੇਖਾ ਨੂੰ ਟੌਗਲ ਕਰੋ"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਦੇ ਉੱਪਰ ਅਤੇ ਬਬਲ ਦੇ ਤੌਰ \'ਤੇ ਦਿਖਾਉਂਦਾ ਹੈ।"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ਸੈਟਿੰਗਾਂ"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ਤਰਜੀਹ"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ਕੋਈ ਹਾਲੀਆ ਬਬਲ ਨਹੀਂ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ਹਾਲੀਆ ਬਬਲ ਅਤੇ ਖਾਰਜ ਕੀਤੇ ਬਬਲ ਇੱਥੇ ਦਿਸਣਗੇ"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"ਪਹੁੰਚ ਕਰਨ ਲਈ ਪਾਵਰ ਮੀਨੂ ਤੋਂ ਕੰਟਰੋਲ ਚੁਣੋ"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ਕੰਟਰੋਲਾਂ ਨੂੰ ਮੁੜ-ਵਿਵਸਥਿਤ ਕਰਨ ਲਈ ਫੜ੍ਹ ਕੇ ਘਸੀਟੋ"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"ਸਾਰੇ ਕੰਟਰੋਲ ਹਟਾਏ ਗਏ"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"ਸਾਰੇ ਕੰਟਰੋਲਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ਹੋਰ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"ਡੀਵਾਈਸ ਕੰਟਰੋਲਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"ਕੰਟਰੋਲ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"ਪਿੰਨ ਵਿੱਚ ਅੱਖਰ ਜਾਂ ਚਿੰਨ੍ਹ ਸ਼ਾਮਲ ਹਨ"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"ਗਲਤ ਪਿੰਨ"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"ਪੁਸ਼ਟੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ਕੋਈ ਹੋਰ ਪਿੰਨ ਵਰਤ ਕੇ ਦੇਖੋ"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ਸਿਫ਼ਾਰਸ਼ਾਂ ਲੋਡ ਹੋ ਰਹੀਆਂ ਹਨ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ਇਸ ਮੀਡੀਆ ਸੈਸ਼ਨ ਨੂੰ ਬੰਦ ਕਰੋ"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ਅਕਿਰਿਆਸ਼ੀਲ, ਐਪ ਦੀ ਜਾਂਚ ਕਰੋ"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"ਗੜਬੜ, ਮੁੜ ਕੋਸ਼ਿਸ਼ ਹੋ ਰਹੀ ਹੈ…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"ਡੀਵਾਈਸ ਹਟਾਇਆ ਗਿਆ"</string> + <string name="controls_error_generic" msgid="352500456918362905">"ਸਥਿਤੀ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> <string name="controls_error_failed" msgid="960228639198558525">"ਗੜਬੜ, ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ਜਾਰੀ ਹੈ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"ਨਵੇਂ ਕੰਟਰੋਲ ਦੇਖਣ ਲਈ ਪਾਵਰ ਬਟਨ ਦਬਾਈ ਰੱਖੋ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 4caf6ae5abb2..a18df6f224fe 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -91,7 +91,7 @@ <string name="screenrecord_name" msgid="2596401223859996572">"Nagrywanie ekranu"</string> <string name="screenrecord_channel_description" msgid="4147077128486138351">"Stałe powiadomienie o sesji rejestrowania zawartości ekranu"</string> <string name="screenrecord_start_label" msgid="1750350278888217473">"Rozpocząć nagrywanie?"</string> - <string name="screenrecord_description" msgid="1123231719680353736">"Podczas nagrywania system Android może rejestrować wszelkie informacji poufne wyświetlane na ekranie lub odtwarzane na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string> + <string name="screenrecord_description" msgid="1123231719680353736">"Podczas nagrywania system Android może rejestrować wszelkie informacje poufne wyświetlane na ekranie lub odtwarzane na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string> <string name="screenrecord_audio_label" msgid="6183558856175159629">"Nagraj dźwięk"</string> <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Dźwięki odtwarzane na urządzeniu"</string> <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Dźwięki odtwarzane na urządzeniu, na przykład muzyka, połączenia i dzwonki"</string> @@ -431,9 +431,11 @@ <string name="quick_settings_nfc_label" msgid="1054317416221168085">"Komunikacja NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Komunikacja NFC jest wyłączona"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Komunikacja NFC jest włączona"</string> - <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Zapis ekranu"</string> + <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Nagrywanie ekranu"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Rozpocznij"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zatrzymaj"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Przesuń w górę, by przełączyć aplikacje"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Szybko przeciągnij w prawo, by przełączyć aplikacje"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Przełącz Przegląd"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Wyświetla się u góry sekcji rozmów i ma postać dymku."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ustawienia"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorytet"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Brak ostatnich dymków"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Tutaj będą pojawiać się ostatnie i odrzucone dymki"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tych powiadomień nie można zmodyfikować."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Wybierz elementy sterujące dostępne w menu zasilania"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Przytrzymaj i przeciągnij, aby przestawić elementy sterujące"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Usunięto wszystkie elementy sterujące"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Nie udało się wczytać listy elementów sterujących."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Inne"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Dodaj do sterowania urządzeniami"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Zaktualizowano elementy sterujące"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Kod PIN zawiera litery lub symbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Sprawdź urządzenie <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Nieprawidłowy kod PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Sprawdzam…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Wpisz kod PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Spróbuj użyć innego kodu PIN"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Wczytuję rekomendacje"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zamknij tę sesję multimediów"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nieaktywny, sprawdź aplikację"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Błąd, próbuję jeszcze raz…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Usunięto urządzenie"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Nie udało się wczytać stanu"</string> <string name="controls_error_failed" msgid="960228639198558525">"Błąd, spróbuj ponownie"</string> <string name="controls_in_progress" msgid="4421080500238215939">"W toku"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Przytrzymaj przycisk zasilania, by zobaczyć nowe elementy sterujące"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 0544c50b2aa7..6e97aa6ea1cd 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravação de tela"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Deslize para cima para alternar entre os apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arraste para a direita para alternar rapidamente entre os apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Alternar Visão geral"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior de uma seção de conversa e em forma de balão."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configurações"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> não é compatível com configurações específicas de conversa"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Os balões recentes e dispensados aparecerão aqui"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantenha a tela pressionada e arraste para reorganizar os controles"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles atualizados"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"O PIN contém letras ou símbolos"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificar <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorreto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verificando…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Insira o PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Tente usar outro PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregando recomendações"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Encerrar esta sessão de mídia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativo, verifique o app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando novamente…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispositivo removido"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Falha ao carregar o status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Erro. Tente novamente"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Em andamento"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantenha o botão liga/desliga pressionado para ver os novos controles"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index db7dc624d842..cc2baad4447b 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravação de ecrã"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Deslizar rapidamente para cima para mudar de aplicação"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arraste para a direita para mudar rapidamente de aplicação."</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Ativar/desativar Vista geral"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior da secção de conversas e surge como um balão."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Definições"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Os balões recentes e ignorados vão aparecer aqui."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar estas notificações."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controlos a que pretende aceder a partir do menu ligar/desligar."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque sem soltar e arraste para reorganizar os controlos."</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controlos foram removidos."</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista dos controlos."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Adicione aos controlos de dispositivos"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controlos atualizados"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"O PIN contém letras ou símbolos."</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Valide <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorreto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"A validar…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Introduzir PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Experimente outro PIN."</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"A carregar recomendações…"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Fechar esta sessão multimédia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativa. Consulte a app."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erro. A tentar novamente…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispositivo removido."</string> + <string name="controls_error_generic" msgid="352500456918362905">"Impossível carregar o estado."</string> <string name="controls_error_failed" msgid="960228639198558525">"Erro. Tente novamente."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Em curso"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantenha premido o botão ligar/desligar para ver os novos controlos."</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 0544c50b2aa7..6e97aa6ea1cd 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Gravação de tela"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispositivo"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Deslize para cima para alternar entre os apps"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Arraste para a direita para alternar rapidamente entre os apps"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Alternar Visão geral"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Aparece na parte superior de uma seção de conversa e em forma de balão."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Configurações"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> não é compatível com configurações específicas de conversa"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Os balões recentes e dispensados aparecerão aqui"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Escolha os controles para acessar pelo menu do botão liga/desliga"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantenha a tela pressionada e arraste para reorganizar os controles"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Não foi possível carregar a lista de controles."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Adicionar aos controles do dispositivo"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Controles atualizados"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"O PIN contém letras ou símbolos"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificar <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN incorreto"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verificando…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Insira o PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Tente usar outro PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregando recomendações"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Encerrar esta sessão de mídia"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inativo, verifique o app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Erro. Tentando novamente…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispositivo removido"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Falha ao carregar o status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Erro. Tente novamente"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Em andamento"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mantenha o botão liga/desliga pressionado para ver os novos controles"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 37896aaa14a8..fed444139c08 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -432,6 +432,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Înregistrarea ecranului"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Începeți"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Opriți"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Dispozitiv"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Glisați în sus pentru a comuta între aplicații"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Glisați la dreapta pentru a comuta rapid între aplicații"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Comutați secțiunea Recente"</string> @@ -715,6 +716,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Se afișează în partea de sus a secțiunii de conversație și apare ca un balon."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Setări"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritate"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu acceptă setările pentru conversații"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nu există baloane recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Baloanele recente și baloanele respinse vor apărea aici"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Aceste notificări nu pot fi modificate."</string> @@ -1030,6 +1032,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Alegeți comenzile de accesat din meniul de alimentare"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Țineți apăsat și trageți pentru a rearanja comenzile"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Au fost șterse toate comenzile"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Lista cu toate comenzile nu a putut fi încărcată."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altul"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Adăugați la comenzile dispozitivelor"</string> @@ -1038,6 +1042,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"S-au actualizat comenzile"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Codul PIN conține litere sau simboluri"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verificați <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Cod PIN greșit"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Se verifică…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Introduceți codul PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Încercați alt cod PIN"</string> @@ -1047,6 +1052,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Se încarcă recomandările"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Închideți această sesiune media"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inactiv, verificați aplicația"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Eroare, se încearcă din nou…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Dispozitivul a fost eliminat"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Starea nu se poate încărca"</string> <string name="controls_error_failed" msgid="960228639198558525">"Eroare, încercați din nou"</string> <string name="controls_in_progress" msgid="4421080500238215939">"În curs"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Apăsați butonul de alimentare pentru a vedea noile comenzi"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 00e8e60de139..f7638ce50c4d 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -434,6 +434,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Запись экрана"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Начать"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Остановить"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Устройство"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Чтобы переключиться между приложениями, проведите по экрану вверх."</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Перетащите вправо, чтобы быстро переключиться между приложениями"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Переключить режим обзора"</string> @@ -718,6 +719,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Появляется в верхней части списка разговоров и в виде всплывающего чата."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Настройки"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" не поддерживает настройки разговора."</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Нет недавних всплывающих чатов"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Здесь будут появляться недавние и закрытые всплывающие чаты."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Эти уведомления нельзя изменить."</string> @@ -1036,6 +1038,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Выберите элементы управления, которые будут доступны в меню кнопки питания."</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Чтобы изменить порядок элементов управления, перетащите их"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Все элементы управления удалены"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Не удалось загрузить список элементов управления."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Другое"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Добавьте виджеты управления устройствами"</string> @@ -1044,6 +1048,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Элементы управления обновлены."</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-код содержит буквы или символы"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Подтвердите устройство \"<xliff:g id="DEVICE">%s</xliff:g>\""</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Неверный PIN-код"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Проверка…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Введите PIN-код"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Введите другой PIN-код"</string> @@ -1053,6 +1058,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Загрузка рекомендаций…"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Закрыть этот мультимедийный сеанс"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Нет ответа. Проверьте приложение."</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Ошибка. Повторная попытка…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Устройство удалено."</string> + <string name="controls_error_generic" msgid="352500456918362905">"Не удалось загрузить статус."</string> <string name="controls_error_failed" msgid="960228639198558525">"Ошибка. Повторите попытку."</string> <string name="controls_in_progress" msgid="4421080500238215939">"Выполняется"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Удерживайте кнопку питания, чтобы увидеть новые элементы управления"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 70083b037127..2bcd5e399c96 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"තිර පටිගත කිරීම"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ආරම්භ කරන්න"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"නතර කරන්න"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"උපාංගය"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"යෙදුම් මාරු කිරීමට ස්වයිප් කරන්න"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ඉක්මනින් යෙදුම් මාරු කිරීමට දකුණට අදින්න"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"දළ විශ්ලේෂණය ටොගල කරන්න"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"සංවාද කොටසේ ඉහළම පෙන්වන අතර බුබුළක් ලෙස දිස් වේ."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"සැකසීම්"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ප්රමුඛතාව"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> සංවාදය නිශ්චිත සැකසීම්වලට සහාය නොදක්වයි"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"මෑත බුබුලු නැත"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"මෑත බුබුලු සහ ඉවත ලූ බුබුලු මෙහි දිස් වනු ඇත"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"මෙම දැනුම්දීම් වෙනස් කළ නොහැක."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"බල මෙනුවෙන් ප්රවේශ වීමට පාලන තෝරා ගන්න"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"පාලන නැවත පිළියෙළ කිරීමට අල්ලාගෙන සිට අදින්න"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"සියලු පාලන ඉවත් කර ඇත"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"සියලු පාලනවල ලැයිස්තුව පූරණය කළ නොහැකි විය."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"වෙනත්"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"උපාංග පාලන වෙත එක් කරන්න"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"පාලන යාවත්කාලීනයි"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN හි අකුරු හෝ සංකේත අඩංගු වේ"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> සත්යාපනය කරන්න"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"වැරදි PIN එකකි"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"සත්යාපනය කරමින්…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN ඇතුළු කරන්න"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"තවත් PIN එකක් උත්සාහ කරන්න"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"නිර්දේශ පූරණය කරමින්"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"මෙම මාධ්ය සැසිය වසන්න"</string> <string name="controls_error_timeout" msgid="794197289772728958">"අක්රියයි, යෙදුම පරීක්ෂා කරන්න"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"දෝෂයකි, නැවත උත්සාහ කරමින්…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"උපාංගය ඉවත් කර ඇත"</string> + <string name="controls_error_generic" msgid="352500456918362905">"තත්ත්වය පූරණය කළ නොහැකිය"</string> <string name="controls_error_failed" msgid="960228639198558525">"දෝෂයකි, නැවත උත්සාහ කරන්න"</string> <string name="controls_in_progress" msgid="4421080500238215939">"ප්රගතියේ පවතී"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"නව පාලන බැලීමට බල බොත්තම අල්ලාගෙන සිටින්න"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index c71e4fa613e4..620bcd67738d 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -434,6 +434,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Záznam obrazovky"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Začať"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončiť"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Potiahnutím nahor prepnete aplikácie"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Presunutím doprava rýchlo prepnete aplikácie"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Prepnúť prehľad"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Zobrazuje sa v hornej časti konverzácie ako bublina."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nastavenia"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priorita"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Žiadne nedávne bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Tu sa budú zobrazovať nedávne a zavreté bubliny"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Tieto upozornenia sa nedajú upraviť."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Vyberte si ovládacie prvky, ku ktorým chcete mať prístup v ponuke vypínača"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ovládacie prvky môžete usporiadať pridržaním a presunutím"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Všetky ovládacie prvky boli odstránené"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Zoznam všetkých ovl. prvkov sa nepodarilo načítať."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iné"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Pridanie do ovládania zariadenia"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Ovládanie bolo aktualizované"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Kód PIN obsahuje písmená alebo symboly"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Overiť <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Nesprávny PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Overuje sa…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Zadajte PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Vyskúšajte iný kód PIN"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Načítavajú sa odporúčania"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zavrieť túto reláciu média"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktívne, preverte aplikáciu"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Chyba, skúša sa znova…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Zariadenie je odstránené"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Stav sa nepodarilo načítať"</string> <string name="controls_error_failed" msgid="960228639198558525">"Chyba, skúste to znova"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Prebieha"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Pridržaním vypínača zobrazíte nové ovládacie prvky"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index d41b2a34727b..ba73b1aa92cc 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -434,6 +434,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Snemanje zaslona"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Začni"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ustavi"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Naprava"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Za preklop aplikacij povlecite navzgor"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Povlecite v desno za hiter preklop med aplikacijami"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Vklop/izklop pregleda"</string> @@ -718,6 +719,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Prikazano je na vrhu razdelka s pogovorom in v oblačku."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Nastavitve"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prednost"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podpira posebnih nastavitev za pogovore"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Ni nedavnih oblačkov"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Tukaj bodo prikazani tako nedavni kot tudi opuščeni oblački"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Za ta obvestila ni mogoče spremeniti nastavitev."</string> @@ -1036,6 +1038,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Izberite kontrolnike, do katerih želite imeti dostop prek menija za vklop/izklop"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite in povlecite, da prerazporedite kontrolnike"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Vsi kontrolniki so bili odstranjeni"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Seznama vseh kontrolnikov ni bilo mogoče naložiti."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Dodajanje med kontrolnike naprave"</string> @@ -1044,6 +1048,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrolniki so posodobljeni"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Koda PIN vsebuje črke ali simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Preverjanje naprave <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Napačna koda PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Preverjanje …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Vnesite kodo PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Poskusite z drugo kodo PIN"</string> @@ -1053,6 +1058,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Nalaganje priporočil"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Zapri to sejo predstavnosti"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Neaktivno, poglejte aplikacijo"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Napaka, vnovični poskus …"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Naprava je bila odstranjena"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Stanja ni mogoče naložiti"</string> <string name="controls_error_failed" msgid="960228639198558525">"Napaka, poskusite znova"</string> <string name="controls_in_progress" msgid="4421080500238215939">"V teku"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Za ogled novih kontrolnikov pridržite gumb za vklop"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index bc07100c82c8..392c1f196e05 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Regjistrimi i ekranit"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Nis"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ndalo"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Rrëshqit shpejt lart për të ndërruar aplikacionet"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Zvarrit djathtas për të ndërruar aplikacionet me shpejtësi"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Kalo te përmbledhja"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Shfaqet në krye të seksionit të bisedës dhe shfaqet si flluskë."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cilësimet"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Përparësia"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Nuk ka flluska të fundit"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Flluskat e fundit dhe flluskat e hequra do të shfaqen këtu"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Zgjidh kontrollet për të pasur qasje nga menyja e energjisë"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mbaje të shtypur dhe zvarrit për të risistemuar kontrollet"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Të gjitha kontrollet u hoqën"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Lista e të gjitha kontrolleve nuk mund të ngarkohej."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Tjetër"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Shto te kontrollet e pajisjes"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Kontrollet u përditësuan"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Kodi PIN përmban shkronja ose simbole"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifiko <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Kod PIN i gabuar"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Po verifikon…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Fut kodin PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Provo një kod tjetër PIN"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Po ngarkon rekomandimet"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Mbyll këtë sesion të medias"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Joaktive, kontrollo aplikacionin"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Gabim, po provohet përsëri"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Pajisja u hoq"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Statusi nuk mund të ngarkohet"</string> <string name="controls_error_failed" msgid="960228639198558525">"Gabim, provo sërish"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Në vazhdim"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Mbaj shtypur butonin e energjisë për të parë kontrollet e reja"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index b01dc4fd21bf..54d7fc898270 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -432,6 +432,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Снимак екрана"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Почните"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зауставите"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Уређај"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Превуците нагоре да бисте мењали апликације"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Превуците удесно да бисте брзо променили апликације"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Укључи/искључи преглед"</string> @@ -715,6 +716,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Приказује се у врху одељка конверзације и као облачић."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Подешавања"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> не подржава подешавања за конверзације"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Нема недавних облачића"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Овде се приказују недавни и одбачени облачићи"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ова обавештења не могу да се мењају."</string> @@ -1030,6 +1032,7 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Одаберите контроле којима ћете приступати из менија напајања"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржите и превуците да бисте променили распоред контрола"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Све контроле су уклоњене"</string> + <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промене нису сачуване"</string> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Учитавање листе свих контрола није успело."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Додајте у контроле уређаја"</string> @@ -1038,6 +1041,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Контроле су ажуриране"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN садржи слова или симболе"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Верификујте: <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Погрешан PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Верификује се…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Унесите PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Пробајте помоћу другог PIN-а"</string> @@ -1047,6 +1051,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Учитавају се препоруке"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Затворите ову сесију медија"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно. Видите апликацију"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Грешка, покушава се поново…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Уређај је уклоњен"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Учитавање статуса није успело"</string> <string name="controls_error_failed" msgid="960228639198558525">"Грешка. Пробајте поново"</string> <string name="controls_in_progress" msgid="4421080500238215939">"У току"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Задржите дугме за укључивање да бисте видели нове контроле"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index c7943980b0e8..70e97f20e24f 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Skärminspelning"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starta"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stoppa"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Byt appar genom att svepa uppåt"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Tryck och dra åt höger för att snabbt byta mellan appar"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Aktivera och inaktivera översikten"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Visas högst upp bland konversationerna som en bubbla"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Inställningar"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Inga nya bubblor"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"De senaste bubblorna och ignorerade bubblor visas här"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Välj snabbkontroller som ska visas i strömbrytarmenyn"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ändra ordning på kontrollerna genom att trycka och dra"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Alla kontroller har tagits bort"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Listan med alla kontroller kunde inte läsas in."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Övrigt"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Lägg till i enhetsstyrning"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Snabbkontroller uppdaterade"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Pinkoden innehåller bokstäver eller symboler"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Verifiera <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Fel pinkod"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Verifierar …"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Ange pinkod"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Testa en annan pinkod"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Rekommendationer läses in"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Stäng den här sessionen"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Inaktiv, kolla appen"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Fel, försöker igen …"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Enheten har tagits bort"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Ingen status lästes in"</string> <string name="controls_error_failed" msgid="960228639198558525">"Fel, försök igen"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Pågår"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"De nya snabbkontrollerna visas om du håller strömbrytaren nedtryckt"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 01cd04a0f005..6ea4253acd70 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Rekodi ya Skrini"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Anza kurekodi"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Acha kurekodi"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Telezesha kidole juu ili ubadilishe programu"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Buruta kulia ili ubadilishe programu haraka"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Washa Muhtasari"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Huonyeshwa sehemu ya juu ya mazungumzo na huonekana kama kiputo."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Mipangilio"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Kipaumbele"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Hakuna viputo vya hivi majuzi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Viputo vya hivi karibuni na vile vilivyoondolewa vitaonekana hapa"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Chagua vidhibiti vya kufikia ukitumia menyu ya kuwasha/kuzima"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Shikilia na uburute ili upange upya vidhibiti"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Umeondoa vidhibiti vyote"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Imeshindwa kupakia orodha ya vidhibiti vyote."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Nyingine"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Weka kwenye vidhibiti vya vifaa"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Umesasisha vidhibiti"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN ina herufi au alama"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Thibitisha <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Nambari ya PIN si sahihi"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Inathibitisha…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Weka PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Jaribu PIN nyingine"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Inapakia mapendekezo"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Funga kipindi hiki cha maudhui"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Haitumiki, angalia programu"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Hitilafu, inajaribu tena…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Kifaa kimeondolewa"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Imeshindwa kupakia hali"</string> <string name="controls_error_failed" msgid="960228639198558525">"Hitilafu, jaribu tena"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Inaendelea"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Shikilia kitufe cha kuwasha/kuzima ili uone vidhibiti vipya"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 6951872bde02..81204e3c558e 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"ஸ்கிரீன் ரெக்கார்டு"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"தொடங்கு"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"நிறுத்து"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ஆப்ஸிற்கு இடையே மாற்றுவதற்கு, மேல்நோக்கி ஸ்வைப் செய்க"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ஆப்ஸை வேகமாக மாற்ற, வலப்புறம் இழுக்கவும்"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"மேலோட்டப் பார்வையை நிலைமாற்று"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"உரையாடல் பிரிவின் மேற்பகுதியில் ஒரு குமிழாகக் காட்டப்படும்."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"அமைப்புகள்"</string> <string name="notification_priority_title" msgid="2079708866333537093">"முன்னுரிமை"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"சமீபத்திய குமிழ்கள் இல்லை"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"சமீபத்திய குமிழ்களும் நிராகரிக்கப்பட்ட குமிழ்களும் இங்கே தோன்றும்"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string> @@ -1025,6 +1029,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"பவர் மெனுவில் இருந்து அணுகுவதற்கான கட்டுப்பாடுகளைத் தேர்ந்தெடுக்கலாம்"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"கட்டுப்பாடுகளை மறுவரிசைப்படுத்த அவற்றைப் பிடித்து இழுக்கவும்"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"கட்டுப்பாடுகள் அனைத்தும் அகற்றப்பட்டன"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"எல்லா கட்டுப்பாடுகளின் பட்டியலை ஏற்ற முடியவில்லை."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"பிற"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"சாதனக் கட்டுப்பாடுகளில் சேர்த்தல்"</string> @@ -1033,6 +1039,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"கட்டுப்பாடுகள் மாற்றப்பட்டன"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"பின்னில் எழுத்துகள் அல்லது குறிகள் உள்ளன"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> ஐச் சரிபார்த்தல்"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"தவறான பின்"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"சரிபார்க்கிறது…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"பின்னை உள்ளிடுக"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"வேறு பின்னைப் பயன்படுத்தவும்"</string> @@ -1042,6 +1049,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"பரிந்துரைகளை ஏற்றுகிறது"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"இந்த மீடியா அமர்வை மூடுக"</string> <string name="controls_error_timeout" msgid="794197289772728958">"செயலில் இல்லை , சரிபார்க்கவும்"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"பிழை, மீண்டும் முயல்கிறது…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"சாதனம் அகற்றப்பட்டது"</string> + <string name="controls_error_generic" msgid="352500456918362905">"நிலையைக் காட்ட முடியவில்லை"</string> <string name="controls_error_failed" msgid="960228639198558525">"பிழை, மீண்டும் முயலவும்"</string> <string name="controls_in_progress" msgid="4421080500238215939">"செயல்பாட்டிலுள்ளது"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"புதிய கட்டுப்பாடுகளைப் பார்க்க பவர் பட்டனைப் பிடித்திருக்கவும்"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 9a2b77fa388b..cfd420a326e5 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"స్క్రీన్ రికార్డ్"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ప్రారంభించు"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ఆపు"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"యాప్లను మార్చడం కోసం ఎగువకు స్వైప్ చేయండి"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి కుడి వైపుకు లాగండి"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"స్థూలదృష్టిని టోగుల్ చేయి"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"సంభాషణ విభాగానికి ఎగువున ఉంటుంది, బబుల్లాగా కనిపిస్తుంది."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"సెట్టింగ్లు"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ప్రాధాన్యత"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ఇటీవలి బబుల్స్ ఏవీ లేవు"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"ఇటీవలి బబుల్స్, తీసివేసిన బబుల్స్ ఇక్కడ కనిపిస్తాయి"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ఈ నోటిఫికేషన్లను సవరించడం వీలుపడదు."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"పవర్ మెనూ నుండి యాక్సెస్ చేయడానికి నియంత్రణలను ఎంచుకోండి"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"నియంత్రణల క్రమం మార్చడానికి పట్టుకుని&amp, లాగండి"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"అన్ని నియంత్రణలు తీసివేయబడ్డాయి"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"అన్ని నియంత్రణలు గల జాబితాను లోడ్ చేయలేకపోయాము."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ఇతరం"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"పరికరం నియంత్రణలకు జోడించడం"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"నియంత్రణలు అప్డేట్ అయ్యాయి"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"పిన్ అక్షరాలను లేదా చిహ్నాలను కలిగి ఉంది"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>ను వెరిఫై చేయండి"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"పిన్ తప్పు"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"వెరిఫై చేస్తోంది..."</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"పిన్ని ఎంటర్ చేయండి"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"మరొక పిన్ని ప్రయత్నించండి"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"సిఫార్సులు లోడ్ అవుతున్నాయి"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ఈ మీడియా సెషన్ని మూసివేయండి"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ఇన్యాక్టివ్, యాప్ చెక్ చేయండి"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"లోపం, మళ్లీ ప్రయత్నిస్తోంది..."</string> + <string name="controls_error_removed" msgid="6299213591234723805">"పరికరం తీసివేయబడింది"</string> + <string name="controls_error_generic" msgid="352500456918362905">"స్థితిని లోడ్ చేయడం సాధ్యపడదు"</string> <string name="controls_error_failed" msgid="960228639198558525">"ఎర్రర్, మళ్లీ ప్రయత్నించండి"</string> <string name="controls_in_progress" msgid="4421080500238215939">"పురోగతిలో ఉంది"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"కొత్త నియంత్రణలను చూడడానికి పవర్ బటన్ని నొక్కి పట్టుకోండి"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index a51f62ee782a..45a0661226e4 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"บันทึกหน้าจอ"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"เริ่ม"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"หยุด"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"อุปกรณ์"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"เลื่อนขึ้นเพื่อสลับแอป"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"ลากไปทางขวาเพื่อสลับแอปอย่างรวดเร็ว"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"สลับภาพรวม"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"แสดงที่ด้านบนของส่วนการสนทนาและปรากฏเป็นบับเบิล"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"การตั้งค่า"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ลำดับความสำคัญ"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่รองรับการตั้งค่าเฉพาะสำหรับการสนทนา"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"ไม่มีบับเบิลเมื่อเร็วๆ นี้"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"บับเบิลที่แสดงและที่ปิดไปเมื่อเร็วๆ นี้จะปรากฏที่นี่"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"แก้ไขการแจ้งเตือนเหล่านี้ไม่ได้"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"เลือกตัวควบคุมที่ต้องการให้เข้าถึงได้จากเมนูเปิด/ปิด"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"กดตัวควบคุมค้างไว้แล้วลากเพื่อจัดเรียงใหม่"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"นำตัวควบคุมทั้งหมดออกแล้ว"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"โหลดรายการตัวควบคุมทั้งหมดไม่ได้"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"อื่นๆ"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"เพิ่มไปยังระบบควบคุมอุปกรณ์"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"อัปเดตตัวควบคุมแล้ว"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN ประกอบด้วยตัวอักษรหรือสัญลักษณ์"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"ยืนยัน <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN ไม่ถูกต้อง"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"กำลังยืนยัน…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"ป้อน PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ลองใช้ PIN อื่น"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"กำลังโหลดคำแนะนำ"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"ปิดเซสชันสื่อนี้"</string> <string name="controls_error_timeout" msgid="794197289772728958">"ไม่มีการใช้งาน โปรดตรวจสอบแอป"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"มีข้อผิดพลาด กำลังลองอีกครั้ง…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"นำอุปกรณ์ออกแล้ว"</string> + <string name="controls_error_generic" msgid="352500456918362905">"โหลดสถานะไม่ได้"</string> <string name="controls_error_failed" msgid="960228639198558525">"พบข้อผิดพลาด โปรดลองอีกครั้ง"</string> <string name="controls_in_progress" msgid="4421080500238215939">"กำลังดำเนินการ"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"กดปุ่มเปิด/ปิดค้างไว้เพื่อดูตัวควบคุมใหม่ๆ"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 082b5c72ad0e..db00e8a6856a 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Pag-record ng Screen"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Magsimula"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ihinto"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Device"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Mag-swipe pataas upang lumipat ng app"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"I-drag pakanan para mabilisang magpalipat-lipat ng app"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"I-toggle ang Overview"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Lumalabas sa itaas ng seksyon ng pag-uusap at nagpapakita bilang bubble."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Mga Setting"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Priyoridad"</string> + <string name="no_shortcut" msgid="7176375126961212514">"Hindi sinusuportahan ng <xliff:g id="APP_NAME">%1$s</xliff:g> ang mga setting na partikular sa pag-uusap"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Walang kamakailang bubble"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Lalabas dito ang mga kamakailang bubble at na-dismiss na bubble"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Hindi puwedeng baguhin ang mga notification na ito."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Pumili ng mga kontrol na maa-access mula sa power menu"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"I-hold at i-drag para baguhin ang pagkakaayos ng mga kontrol"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Inalis ang lahat ng kontrol"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Hindi ma-load ang listahan ng lahat ng control."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iba pa"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Idagdag sa mga kontrol ng device"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Na-update na ang mga kontrol"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"May mga titik o simbolo ang PIN"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"I-verify ang <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Maling PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Vine-verify…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Ilagay ang PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Sumubok ng ibang PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Nilo-load ang rekomendasyon"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Isara ang session ng media na ito"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Hindi aktibo, tingnan ang app"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Nagka-error, sinusubukan ulit…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Inalis ang device"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Hindi ma-load ang status"</string> <string name="controls_error_failed" msgid="960228639198558525">"Nagka-error, subukan ulit"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Isinasagawa"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Pindutin nang matagal ang Power button para makita ang mga bagong kontrol"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index d81066cb3c16..51aad9dce271 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekran Kaydı"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlat"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Durdur"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Uygulamalar arasında geçiş yapmak için yukarı kaydırın"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Uygulamaları hızlıca değiştirmek için sağa kaydırın"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Genel bakışı aç/kapat"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Görüşme bölümünün üstünde baloncuk olarak gösterilir."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Ayarlar"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Öncelik"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Son kapatılan baloncuk yok"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Son baloncuklar ve kapattığınız baloncuklar burada görünür"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirimler değiştirilemez."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Güç menüsünden erişmek için denetimleri seçin"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Kontrolleri yeniden düzenlemek için basılı tutup sürükleyin"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Tüm kontroller kaldırıldı"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Tüm kontrollerin listesi yüklenemedi."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Diğer"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Cihaz denetimlerine ekle"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Denetimler güncellendi"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN, harf veya simge içerir"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> cihazını doğrulayın"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Yanlış PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Doğrulanıyor…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN girin"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Başka bir PIN deneyin"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Öneriler yükleniyor"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Bu medya oturumunu kapat"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Devre dışı, uygulamaya bakın"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Hata, yeniden deneniyor…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Cihaz kaldırıldı"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Durum yüklenemiyor"</string> <string name="controls_error_failed" msgid="960228639198558525">"Hata, yeniden deneyin"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Devam ediyor"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Yeni kontrolleri görmek için Güç düğmesini basılı tutun"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index a6da1b4b2a18..fe63ad63e443 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -434,6 +434,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Запис екрана"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Почати"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зупинити"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Проводьте пальцем угору, щоб переходити між додатками"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Перетягуйте праворуч, щоб швидко переходити між додатками"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Увімкнути або вимкнути огляд"</string> @@ -718,6 +720,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"З\'являється вгорі розділу з розмовами у вигляді спливаючого чату."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Налаштування"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Пріоритет"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Немає нещодавніх спливаючих чатів"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Тут з\'являтимуться нещодавні й закриті спливаючі чати"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string> @@ -1036,6 +1040,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Виберіть, які елементи керування будуть у меню \"Живлення\""</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Щоб змінити порядок елементів керування, перетягуйте їх"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Усі елементи керування вилучено"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Не вдалося завантажити список усіх елементів керування."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Інше"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Додати до елементів керування пристроями"</string> @@ -1044,6 +1050,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Елементи керування оновлено"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN-код містить літери чи символи"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>: підтвердити"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Неправильний PIN-код"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Підтвердження…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Введіть PIN-код"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Спробуйте інший PIN-код"</string> @@ -1053,6 +1060,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Завантаження рекомендацій"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Закрити цей сеанс медіа"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Неактивно, перейдіть у додаток"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Помилка. Повторна спроба…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Пристрій вилучено"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Не вдалося завантажити статус"</string> <string name="controls_error_failed" msgid="960228639198558525">"Помилка. Спробуйте знову"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Виконується"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Утримуйте кнопку живлення, щоб переглянути нові елементи керування"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index a993cb33c264..eb5094d665f2 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"اسکرین ریکارڈر کریں"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"آغاز"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"روکیں"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"ایپس سوئچ کرنے کیلئے اوپر سوائپ کریں"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"تیزی سے ایپس کو سوئچ کرنے کے لیے دائیں طرف گھسیٹیں"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"مجموعی جائزہ ٹوگل کریں"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"گفتگو کے سیکشن میں سب سے اوپر دکھاتا ہے اور بلبلہ کے طور پر ظاہر ہوتا ہے۔"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"ترتیبات"</string> <string name="notification_priority_title" msgid="2079708866333537093">"ترجیح"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"کوئی حالیہ بلبلہ نہیں"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"حالیہ بلبلے اور برخاست شدہ بلبلے یہاں ظاہر ہوں گے"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"ان اطلاعات کی ترمیم نہیں کی جا سکتی۔"</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"پاور مینو سے رسائی حاصل کرنے کے لیے کنٹرولز کو منتخب کریں"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"کنٹرولز کو دوبارہ ترتیب دینے کے ليے پکڑیں اور گھسیٹیں"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"سبھی کنٹرولز ہٹا دیے گئے"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"تمام کنٹرولز کی فہرست لوڈ نہیں کی جا سکی۔"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"دیگر"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"آلہ کے کنٹرولز میں شامل کریں"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"کنٹرولز اپ ڈیٹ کیے گئے"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN میں حروف یا علامات شامل ہیں"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> کی تصدیق کریں"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"غلط PIN"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"توثیق ہو رہی ہے…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN درج کریں"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"کوئی دوسرا PIN آزمائیں"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"تجاویز لوڈ ہو رہی ہیں"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"اس میڈیا سیشن کو بند کریں"</string> <string name="controls_error_timeout" msgid="794197289772728958">"غیر فعال، ایپ چیک کریں"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"خرابی، دوبارہ کوشش کی جا رہی ہے…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"آلہ ہٹا دیا گیا"</string> + <string name="controls_error_generic" msgid="352500456918362905">"صورتحال لوڈ نہیں ہو سکتی"</string> <string name="controls_error_failed" msgid="960228639198558525">"خرابی، دوبارہ کوشش کریں"</string> <string name="controls_in_progress" msgid="4421080500238215939">"پیشرفت میں"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"نئے کنٹرولز دیکھنے کے لیے پاور بٹن کو دبائے رکھیں"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index b926d753b5db..c83f9771c397 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ekranni yozib olish"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Boshlash"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Toʻxtatish"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Qurilma"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Ilovalarni almashtirish uchun ekranni tepaga suring"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Ilovalarni tezkor almashtirish uchun o‘ngga torting"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Umumiy nazar rejimini almashtirish"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Suhbatlar boʻlimining yuqori qismida bulutcha shaklida chiqadi."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Sozlamalar"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Muhimligi"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida suhbat sozlamalari ishlamaydi"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Avvalgi bulutchalar topilmadi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Bu yerda oxirgi va yopilgan bulutcha shaklidagi bildirishnomalar chiqadi"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirishnomalarni tahrirlash imkonsiz."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Quvvat tugmasi menyusida chiqadigan boshqaruv elementlarini tanlang"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Boshqaruv elementlarini qayta tartiblash uchun ushlab torting"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Barcha boshqaruv elementlari olib tashlandi"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Boshqaruv elementlarining barchasi yuklanmadi."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Boshqa"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Qurilma boshqaruv elementlariga kiritish"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Boshqaruv elementlari yangilandi"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN kod harflar va belgilardan iborat boʻladi"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Tekshirish: <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN kod xato"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Tekshirilmoqda…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN kodni kiriting"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Boshqa PIN kod ishlating"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Tavsiyalar yuklanmoqda"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Bu media seansni yopish"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Nofaol. Ilovani tekshiring"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Xato, qayta urinilmoqda…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Qurilma olib tashlandi"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Holat axboroti yuklanmadi"</string> <string name="controls_error_failed" msgid="960228639198558525">"Xato, qayta urining"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Bajarilmoqda"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Yangi boshqaruv elementlari bilan tanishish uchun quvvat tugmasini bosib turing"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index ed8b3a556998..63af035a5f43 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -430,6 +430,8 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Ghi lại nội dung trên màn hình"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Bắt đầu"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dừng"</string> + <!-- no translation found for media_seamless_remote_device (177033467332920464) --> + <skip /> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Vuốt lên để chuyển đổi ứng dụng"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Kéo sang phải để chuyển đổi nhanh giữa các ứng dụng"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Bật/tắt chế độ xem Tổng quan"</string> @@ -712,6 +714,8 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Hiển thị dưới dạng bong bóng ở đầu cuộc trò chuyện."</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Cài đặt"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Mức độ ưu tiên"</string> + <!-- no translation found for no_shortcut (7176375126961212514) --> + <skip /> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Không có bong bóng trò chuyện nào gần đây"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Bong bóng trò chuyện đã đóng và bong bóng trò chuyện gần đây sẽ xuất hiện ở đây"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Không thể sửa đổi các thông báo này."</string> @@ -1024,6 +1028,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Chọn các tùy chọn điều khiển để truy cập từ trình đơn nguồn"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Giữ và kéo để sắp xếp lại các tùy chọn điều khiển"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Đã xóa tất cả tùy chọn điều khiển"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Không thể tải danh sách tất cả tùy chọn điều khiển."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Khác"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Thêm vào mục điều khiển thiết bị"</string> @@ -1032,6 +1038,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Đã cập nhật các tùy chọn điều khiển"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Mã PIN chứa các ký tự hoặc ký hiệu"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Xác minh <xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Mã PIN sai"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Đang xác minh…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Nhập mã PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Thử một mã PIN khác"</string> @@ -1041,6 +1048,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Đang tải các đề xuất"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Đóng phiên đa phương tiện này"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Không hoạt động, hãy kiểm tra ứng dụng"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Lỗi, đang thử lại…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Đã xóa thiết bị"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Không tải được trạng thái"</string> <string name="controls_error_failed" msgid="960228639198558525">"Lỗi, hãy thử lại"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Đang thực hiện"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Giữ nút Nguồn để xem các tùy chọn điều khiển mới"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 6fe19c9efede..323324d5805f 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"屏幕录制"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"开始"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"设备"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"向上滑动可切换应用"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"向右拖动可快速切换应用"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"切换概览"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"以对话泡形式显示在对话部分顶部。"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"设置"</string> <string name="notification_priority_title" msgid="2079708866333537093">"优先级"</string> + <string name="no_shortcut" msgid="7176375126961212514">"<xliff:g id="APP_NAME">%1$s</xliff:g>不支持对话专用设置"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近没有对话泡"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"此处会显示最近的对话泡和已关闭的对话泡"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"无法修改这些通知。"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"选择要从电源菜单访问的控件"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住并拖动即可重新排列控件"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控件"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"无法加载所有控件的列表。"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"添加到设备控制器"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"控件已更新"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN 码由字母或符号组成"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"验证<xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN 码错误"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"正在验证…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"输入 PIN 码"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"试试其他 PIN 码"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在加载推荐内容"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"关闭此媒体会话"</string> <string name="controls_error_timeout" msgid="794197289772728958">"无效,请检查应用"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"出现错误,正在重试…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"设备已移除"</string> + <string name="controls_error_generic" msgid="352500456918362905">"无法加载状态"</string> <string name="controls_error_failed" msgid="960228639198558525">"出现错误,请重试"</string> <string name="controls_in_progress" msgid="4421080500238215939">"正在进行"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"按住电源按钮即可查看新控件"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 9f4bf907ef98..f78604cdcd82 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"畫面錄影"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"裝置"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"向上滑動即可切換應用程式"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"向右拖曳即可快速切換應用程式"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"切換概覽"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"在對話部分的頂部以小視窗顯示。"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"設定"</string> <string name="notification_priority_title" msgid="2079708866333537093">"重要"</string> + <string name="no_shortcut" msgid="7176375126961212514">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話專用設定"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"沒有最近曾使用的小視窗"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近使用和關閉的小視窗會在這裡顯示"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"從電源選單選擇要存取的控制項"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳便可重新排列控制項"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控制項"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整控制項清單。"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"加到裝置控制"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"已更新控制項"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN 含有字母或符號"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"驗證<xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN 錯誤"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"正在驗證…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"輸入 PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"嘗試其他 PIN"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在載入建議"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"關閉此媒體版面"</string> <string name="controls_error_timeout" msgid="794197289772728958">"已停用,請檢查應用程式"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"發生錯誤,正在重試…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"已移除裝置"</string> + <string name="controls_error_generic" msgid="352500456918362905">"無法載入狀態"</string> <string name="controls_error_failed" msgid="960228639198558525">"發生錯誤,請再試一次"</string> <string name="controls_in_progress" msgid="4421080500238215939">"進行中"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"按住「開關」按鈕以查看新控制項"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 94990c79b829..141452b07ac8 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"螢幕畫面錄製"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"裝置"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"向上滑動即可切換應用程式"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"向右拖曳即可快速切換應用程式"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"切換總覽"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"以對話框形式顯示在對話部分的頂端。"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"設定"</string> <string name="notification_priority_title" msgid="2079708866333537093">"優先"</string> + <string name="no_shortcut" msgid="7176375126961212514">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話專用設定"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"最近沒有任何對話框"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"最近的對話框和已關閉的對話框會顯示在這裡"</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"選擇要從電源選單存取的控制項"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳即可重新排列控制項"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"所有控制項都已移除"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"無法載入完整的控制項清單。"</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"新增至裝置控制"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"已更新控制項"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN 碼含有字母或符號"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"驗證「<xliff:g id="DEVICE">%s</xliff:g>」"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN 碼錯誤"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"驗證中…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"請輸入 PIN 碼"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"試試其他 PIN 碼"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在載入建議控制項"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"關閉這個媒體工作階段"</string> <string name="controls_error_timeout" msgid="794197289772728958">"無效,請查看應用程式"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"發生錯誤,正在重試…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"裝置已遭到移除"</string> + <string name="controls_error_generic" msgid="352500456918362905">"無法載入狀態"</string> <string name="controls_error_failed" msgid="960228639198558525">"發生錯誤,請再試一次"</string> <string name="controls_in_progress" msgid="4421080500238215939">"進行中"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"按住電源按鈕即可查看新的控制項"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index c9bef049e05e..b6de81bd69fc 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -430,6 +430,7 @@ <string name="quick_settings_screen_record_label" msgid="1594046461509776676">"Irekhodi lesikrini"</string> <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Qala"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Misa"</string> + <string name="media_seamless_remote_device" msgid="177033467332920464">"Idivayisi"</string> <string name="recents_swipe_up_onboarding" msgid="2820265886420993995">"Swayiphela phezulu ukuze ushintshe izinhlelo zokusebenza"</string> <string name="recents_quick_scrub_onboarding" msgid="765934300283514912">"Hudula ngqo ukuze ushintshe ngokushesha izinhlelo zokusebenza"</string> <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"Guqula ukubuka konke"</string> @@ -712,6 +713,7 @@ <string name="notification_channel_summary_priority" msgid="7415770044553264622">"Kubonakala esigabeni esiphezulu sengxoxo futhi kuvela njengebhamuza"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Izilungiselelo"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Okubalulekile"</string> + <string name="no_shortcut" msgid="7176375126961212514">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayisekeli amasethingi athile engxoxo"</string> <string name="bubble_overflow_empty_title" msgid="3120029421991510842">"Awekho amabhamuza akamuva"</string> <string name="bubble_overflow_empty_subtitle" msgid="2030874469510497397">"Amabhamuza akamuva namabhamuza asusiwe azobonakala lapha."</string> <string name="notification_unblockable_desc" msgid="2073030886006190804">"Lezi zaziso azikwazi ukushintshwa."</string> @@ -1024,6 +1026,8 @@ <string name="controls_favorite_subtitle" msgid="6604402232298443956">"Khetha izilawuli ukuze ufinyelele kusuka kumenyu yamandla"</string> <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Bamba futhi uhudule ukuze uphinde ulungise izilawuli"</string> <string name="controls_favorite_removed" msgid="5276978408529217272">"Zonke izilawuli zisusiwe"</string> + <!-- no translation found for controls_favorite_toast_no_changes (7094494210840877931) --> + <skip /> <string name="controls_favorite_load_error" msgid="2533215155804455348">"Uhlu lwazo zonke izilawuli alilayishekanga."</string> <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Okunye"</string> <string name="controls_dialog_title" msgid="2343565267424406202">"Engeza kuzilawuli zezinsiza"</string> @@ -1032,6 +1036,7 @@ <string name="controls_dialog_confirmation" msgid="586517302736263447">"Izilawuli zibuyekeziwe"</string> <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Iphinikhodi iqukethe amaletha namasimbui"</string> <string name="controls_pin_verify" msgid="3452778292918877662">"Qinisekisa i-<xliff:g id="DEVICE">%s</xliff:g>"</string> + <string name="controls_pin_wrong" msgid="6162694056042164211">"Iphinikhodi engalungile"</string> <string name="controls_pin_verifying" msgid="3755045989392131746">"Iyaqinisekisa…"</string> <string name="controls_pin_instructions" msgid="6363309783822475238">"Faka i-PIN"</string> <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Zama enye Iphinikhodi"</string> @@ -1041,6 +1046,9 @@ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Ilayisha izincomo"</string> <string name="controls_media_close_session" msgid="9023534788828414585">"Vala leseshini yemidiya"</string> <string name="controls_error_timeout" msgid="794197289772728958">"Akusebenzi, hlola uhlelo lokusebenza"</string> + <string name="controls_error_retryable" msgid="864025882878378470">"Iphutha, iyazama futhi…"</string> + <string name="controls_error_removed" msgid="6299213591234723805">"Idivayisi isusiwe"</string> + <string name="controls_error_generic" msgid="352500456918362905">"Ayikwazi ukulayisha isimo"</string> <string name="controls_error_failed" msgid="960228639198558525">"Iphutha, zama futhi"</string> <string name="controls_in_progress" msgid="4421080500238215939">"Iyaqhubeka"</string> <string name="controls_added_tooltip" msgid="4842812921719153085">"Bamba Inkinobho yamandla ukuze ubone izilawuli ezintsha"</string> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 5d625a87b282..48648e547a84 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -326,6 +326,7 @@ <dimen name="screenshot_action_chip_padding_middle">8dp</dimen> <dimen name="screenshot_action_chip_padding_end">16dp</dimen> <dimen name="screenshot_action_chip_text_size">14sp</dimen> + <dimen name="screenshot_dismissal_height_delta">80dp</dimen> <!-- The width of the view containing navigation buttons --> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index f67bb6b79f37..57d2040bed57 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -258,7 +258,7 @@ <style name="TextAppearance.AuthCredential.Title"> <item name="android:fontFamily">google-sans</item> - <item name="android:paddingTop">16dp</item> + <item name="android:paddingTop">12dp</item> <item name="android:paddingHorizontal">24dp</item> <item name="android:textSize">24sp</item> </style> @@ -278,7 +278,7 @@ </style> <style name="TextAppearance.AuthCredential.Error"> - <item name="android:paddingTop">12dp</item> + <item name="android:paddingTop">6dp</item> <item name="android:paddingHorizontal">24dp</item> <item name="android:textSize">14sp</item> <item name="android:textColor">?android:attr/colorError</item> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 9cfcc52134ce..b99fb057ee65 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -56,6 +56,9 @@ import androidx.dynamicanimation.animation.DynamicAnimation; import androidx.dynamicanimation.animation.SpringAnimation; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; @@ -95,6 +98,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe // How much to scale the default slop by, to avoid accidental drags. private static final float SLOP_SCALE = 4f; + private static final UiEventLogger sUiEventLogger = new UiEventLoggerImpl(); + private KeyguardSecurityModel mSecurityModel; private LockPatternUtils mLockPatternUtils; @@ -178,6 +183,44 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe public void onCancelClicked(); } + @VisibleForTesting + public enum BouncerUiEvent implements UiEventLogger.UiEventEnum { + @UiEvent(doc = "Default UiEvent used for variable initialization.") + UNKNOWN(0), + + @UiEvent(doc = "Bouncer is dismissed using extended security access.") + BOUNCER_DISMISS_EXTENDED_ACCESS(413), + + @UiEvent(doc = "Bouncer is dismissed using biometric.") + BOUNCER_DISMISS_BIOMETRIC(414), + + @UiEvent(doc = "Bouncer is dismissed without security access.") + BOUNCER_DISMISS_NONE_SECURITY(415), + + @UiEvent(doc = "Bouncer is dismissed using password security.") + BOUNCER_DISMISS_PASSWORD(416), + + @UiEvent(doc = "Bouncer is dismissed using sim security access.") + BOUNCER_DISMISS_SIM(417), + + @UiEvent(doc = "Bouncer is successfully unlocked using password.") + BOUNCER_PASSWORD_SUCCESS(418), + + @UiEvent(doc = "An attempt to unlock bouncer using password has failed.") + BOUNCER_PASSWORD_FAILURE(419); + + private final int mId; + + BouncerUiEvent(int id) { + mId = id; + } + + @Override + public int getId() { + return mId; + } + } + public KeyguardSecurityContainer(Context context, AttributeSet attrs) { this(context, attrs, 0); } @@ -574,17 +617,21 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe boolean finish = false; boolean strongAuth = false; int eventSubtype = -1; + BouncerUiEvent uiEvent = BouncerUiEvent.UNKNOWN; if (mUpdateMonitor.getUserHasTrust(targetUserId)) { finish = true; eventSubtype = BOUNCER_DISMISS_EXTENDED_ACCESS; + uiEvent = BouncerUiEvent.BOUNCER_DISMISS_EXTENDED_ACCESS; } else if (mUpdateMonitor.getUserUnlockedWithBiometric(targetUserId)) { finish = true; eventSubtype = BOUNCER_DISMISS_BIOMETRIC; + uiEvent = BouncerUiEvent.BOUNCER_DISMISS_BIOMETRIC; } else if (SecurityMode.None == mCurrentSecuritySelection) { SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); if (SecurityMode.None == securityMode) { finish = true; // no security required eventSubtype = BOUNCER_DISMISS_NONE_SECURITY; + uiEvent = BouncerUiEvent.BOUNCER_DISMISS_NONE_SECURITY; } else { showSecurityScreen(securityMode); // switch to the alternate security view } @@ -596,6 +643,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe strongAuth = true; finish = true; eventSubtype = BOUNCER_DISMISS_PASSWORD; + uiEvent = BouncerUiEvent.BOUNCER_DISMISS_PASSWORD; break; case SimPin: @@ -606,6 +654,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe KeyguardUpdateMonitor.getCurrentUser())) { finish = true; eventSubtype = BOUNCER_DISMISS_SIM; + uiEvent = BouncerUiEvent.BOUNCER_DISMISS_SIM; } else { showSecurityScreen(securityMode); } @@ -630,6 +679,9 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe mMetricsLogger.write(new LogMaker(MetricsEvent.BOUNCER) .setType(MetricsEvent.TYPE_DISMISS).setSubtype(eventSubtype)); } + if (uiEvent != BouncerUiEvent.UNKNOWN) { + sUiEventLogger.log(uiEvent); + } if (finish) { mSecurityCallback.finish(strongAuth, targetUserId); } @@ -735,6 +787,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe } mMetricsLogger.write(new LogMaker(MetricsEvent.BOUNCER) .setType(success ? MetricsEvent.TYPE_SUCCESS : MetricsEvent.TYPE_FAILURE)); + sUiEventLogger.log(success ? BouncerUiEvent.BOUNCER_PASSWORD_SUCCESS + : BouncerUiEvent.BOUNCER_PASSWORD_FAILURE); } public void reset() { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java index 496e60ddf99e..084b791a8dcd 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java @@ -220,15 +220,18 @@ public abstract class AuthCredentialView extends LinearLayout { setTextOrHide(mDescriptionView, getDescription(mBiometricPromptBundle)); announceForAccessibility(title); - final boolean isManagedProfile = Utils.isManagedProfile(mContext, mEffectiveUserId); - final Drawable image; - if (isManagedProfile) { - image = getResources().getDrawable(R.drawable.auth_dialog_enterprise, - mContext.getTheme()); - } else { - image = getResources().getDrawable(R.drawable.auth_dialog_lock, mContext.getTheme()); + if (mIconView != null) { + final boolean isManagedProfile = Utils.isManagedProfile(mContext, mEffectiveUserId); + final Drawable image; + if (isManagedProfile) { + image = getResources().getDrawable(R.drawable.auth_dialog_enterprise, + mContext.getTheme()); + } else { + image = getResources().getDrawable(R.drawable.auth_dialog_lock, + mContext.getTheme()); + } + mIconView.setImageDrawable(image); } - mIconView.setImageDrawable(image); // Only animate this if we're transitioning from a biometric view. if (mShouldAnimateContents) { diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java index 38bfffbb75d9..0dbee663c1c9 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java @@ -78,6 +78,7 @@ class Bubble implements BubbleViewProvider { private BubbleViewInfoTask mInflationTask; private boolean mInflateSynchronously; + private boolean mPendingIntentCanceled; /** * Presentational info about the flyout. @@ -182,6 +183,14 @@ class Bubble implements BubbleViewProvider { mIconView = null; } + void setPendingIntentCanceled() { + mPendingIntentCanceled = true; + } + + boolean getPendingIntentCanceled() { + return mPendingIntentCanceled; + } + /** * Sets whether to perform inflation on the same thread as the caller. This method should only * be used in tests, not in production. @@ -295,6 +304,13 @@ class Bubble implements BubbleViewProvider { } /** + * @return if the bubble was ever expanded + */ + boolean getWasAccessed() { + return mLastAccessed != 0L; + } + + /** * @return the display id of the virtual display on which bubble contents is drawn. */ @Override diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index da2a56d65124..cafa0604d88e 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -29,7 +29,7 @@ import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static com.android.systemui.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER; import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_BUBBLES; @@ -53,7 +53,10 @@ import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.graphics.PixelFormat; import android.graphics.Rect; +import android.os.Binder; +import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.service.notification.NotificationListenerService; @@ -65,7 +68,7 @@ import android.util.Pair; import android.util.SparseSetArray; import android.view.Display; import android.view.ViewGroup; -import android.widget.FrameLayout; +import android.view.WindowManager; import androidx.annotation.IntDef; import androidx.annotation.MainThread; @@ -75,7 +78,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dumpable; -import com.android.systemui.R; import com.android.systemui.bubbles.dagger.BubbleModule; import com.android.systemui.dump.DumpManager; import com.android.systemui.model.SysUiState; @@ -87,6 +89,7 @@ import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationRemoveInterceptor; +import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.notification.NotificationChannelHelper; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -97,6 +100,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -144,7 +148,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi private final NotificationEntryManager mNotificationEntryManager; private final NotifPipeline mNotifPipeline; private final BubbleTaskStackListener mTaskStackListener; - private BubbleStateChangeListener mStateChangeListener; private BubbleExpandListener mExpandListener; @Nullable private BubbleStackView.SurfaceSynchronizer mSurfaceSynchronizer; private final NotificationGroupManager mNotificationGroupManager; @@ -152,6 +155,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi private final FloatingContentCoordinator mFloatingContentCoordinator; private BubbleData mBubbleData; + private ScrimView mBubbleScrim; @Nullable private BubbleStackView mStackView; private BubbleIconFactory mBubbleIconFactory; @@ -170,12 +174,20 @@ public class BubbleController implements ConfigurationController.ConfigurationLi private INotificationManager mINotificationManager; // Callback that updates BubbleOverflowActivity on data change. - @Nullable private Runnable mOverflowCallback = null; + @Nullable private BubbleData.Listener mOverflowListener = null; private final NotificationInterruptStateProvider mNotificationInterruptStateProvider; private IStatusBarService mBarService; + private WindowManager mWindowManager; private SysUiState mSysUiState; + // Used to post to main UI thread + private Handler mHandler = new Handler(); + + /** LayoutParams used to add the BubbleStackView to the window maanger. */ + private WindowManager.LayoutParams mWmLayoutParams; + + // Used for determining view rect for touch interaction private Rect mTempRect = new Rect(); @@ -191,16 +203,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi private final List<NotifCallback> mCallbacks = new ArrayList<>(); /** - * Listener to be notified when some states of the bubbles change. - */ - public interface BubbleStateChangeListener { - /** - * Called when the stack has bubbles or no longer has bubbles. - */ - void onHasBubblesChanged(boolean hasBubbles); - } - - /** * Listener to find out about stack expansion / collapse events. */ public interface BubbleExpandListener { @@ -389,9 +391,12 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } mSurfaceSynchronizer = synchronizer; + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); + mBubbleScrim = new ScrimView(mContext); + mSavedBubbleKeysPerUser = new SparseSetArray<>(); mCurrentUserId = mNotifUserManager.getCurrentUserId(); mNotifUserManager.addUserChangedListener( @@ -569,6 +574,15 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } /** + * Returns the scrim drawn behind the bubble stack. This is managed by {@link ScrimController} + * since we want the scrim's appearance and behavior to be identical to that of the notification + * shade scrim. + */ + public ScrimView getScrimForBubble() { + return mBubbleScrim; + } + + /** * Sets whether to perform inflation on the same thread as the caller. This method should only * be used in tests, not in production. */ @@ -577,8 +591,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi mInflateSynchronously = inflateSynchronously; } - void setOverflowCallback(Runnable updateOverflow) { - mOverflowCallback = updateOverflow; + void setOverflowListener(BubbleData.Listener listener) { + mOverflowListener = listener; } /** @@ -588,7 +602,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi return mBubbleData.getOverflowBubbles(); } - /** * BubbleStackView is lazily created by this method the first time a Bubble is added. This * method initializes the stack view and adds it to the StatusBar just above the scrim. @@ -598,11 +611,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi mStackView = new BubbleStackView( mContext, mBubbleData, mSurfaceSynchronizer, mFloatingContentCoordinator, mSysUiState, mNotificationShadeWindowController); - ViewGroup nsv = mNotificationShadeWindowController.getNotificationShadeView(); - int bubbleScrimIndex = nsv.indexOfChild(nsv.findViewById(R.id.scrim_for_bubble)); - int stackIndex = bubbleScrimIndex + 1; // Show stack above bubble scrim. - nsv.addView(mStackView, stackIndex, - new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); + mStackView.addView(mBubbleScrim); + addToWindowManager(); if (mExpandListener != null) { mStackView.setExpandListener(mExpandListener); } @@ -612,6 +622,45 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } } + /** Adds the BubbleStackView to the WindowManager. */ + private void addToWindowManager() { + mWmLayoutParams = new WindowManager.LayoutParams( + // Fill the screen so we can use translation animations to position the bubble + // stack. We'll use touchable regions to ignore touches that are not on the bubbles + // themselves. + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + // Start not focusable - we'll become focusable when expanded so the ActivityView + // can use the IME. + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, + PixelFormat.TRANSLUCENT); + + mWmLayoutParams.setFitInsetsTypes(0); + mWmLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + mWmLayoutParams.token = new Binder(); + mWmLayoutParams.setTitle("Bubbles!"); + mWmLayoutParams.packageName = mContext.getPackageName(); + mWmLayoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + + mWindowManager.addView(mStackView, mWmLayoutParams); + } + + private void updateWmFlags() { + if (isStackExpanded()) { + // If we're expanded, we want to be focusable so that the ActivityView can receive focus + // and show the IME. + mWmLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + } else { + // If we're collapsed, we don't want to be able to receive focus. Doing so would + // preclude applications from using the IME since we are always above them. + mWmLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + } + + mWindowManager.updateViewLayout(mStackView, mWmLayoutParams); + } + /** * Records the notification key for any active bubbles. These are used to restore active * bubbles when the user returns to the foreground. @@ -683,13 +732,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } /** - * Set a listener to be notified when some states of the bubbles change. - */ - public void setBubbleStateChangeListener(BubbleStateChangeListener listener) { - mStateChangeListener = listener; - } - - /** * Set a listener to be notified of bubble expand events. */ public void setExpandListener(BubbleExpandListener listener) { @@ -697,7 +739,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi if (listener != null) { listener.onBubbleExpandChanged(isExpanding, key); } - mNotificationShadeWindowController.setBubbleExpanded(isExpanding); + + updateWmFlags(); }); if (mStackView != null) { mStackView.setExpandListener(mExpandListener); @@ -708,7 +751,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi * Whether or not there are bubbles present, regardless of them being visible on the * screen (e.g. if on AOD). */ - public boolean hasBubbles() { + @VisibleForTesting + boolean hasBubbles() { if (mStackView == null) { return false; } @@ -808,7 +852,21 @@ public class BubbleController implements ConfigurationController.ConfigurationLi Bubble bubble = mBubbleData.getOrCreateBubble(notif); bubble.setInflateSynchronously(mInflateSynchronously); bubble.inflate( - b -> mBubbleData.notificationEntryUpdated(b, suppressFlyout, showInShade), + b -> { + mBubbleData.notificationEntryUpdated(b, suppressFlyout, showInShade); + if (bubble.getBubbleIntent() == null) { + return; + } + bubble.getBubbleIntent().registerCancelListener(pendingIntent -> { + if (bubble.getWasAccessed()) { + bubble.setPendingIntentCanceled(); + return; + } + mHandler.post( + () -> removeBubble(bubble.getEntry(), + BubbleController.DISMISS_INVALID_INTENT)); + }); + }, mContext, mStackView, mBubbleIconFactory); } @@ -948,8 +1006,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi @Override public void applyUpdate(BubbleData.Update update) { // Update bubbles in overflow. - if (mOverflowCallback != null) { - mOverflowCallback.run(); + if (mOverflowListener != null) { + mOverflowListener.applyUpdate(update); } // Collapsing? Do this first before remaining steps. @@ -973,7 +1031,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi if (!mBubbleData.hasOverflowBubbleWithKey(bubble.getKey()) && (!bubble.showInShade() || reason == DISMISS_NOTIF_CANCEL - || reason == DISMISS_GROUP_CANCELLED)) { + || reason == DISMISS_GROUP_CANCELLED + || reason == DISMISS_OVERFLOW_MAX_REACHED)) { // The bubble is now gone & the notification is hidden from the shade, so // time to actually remove it for (NotifCallback cb : mCallbacks) { @@ -1040,9 +1099,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi Log.d(TAG, BubbleDebugConfig.formatBubblesString(mStackView.getBubblesOnScreen(), mStackView.getExpandedBubble())); } - Log.d(TAG, "\n[BubbleData] overflow:"); - Log.d(TAG, BubbleDebugConfig.formatBubblesString(mBubbleData.getOverflowBubbles(), - null) + "\n"); } } }; @@ -1130,8 +1186,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi /** * Lets any listeners know if bubble state has changed. * Updates the visibility of the bubbles based on current state. - * Does not un-bubble, just hides or un-hides. Notifies any - * {@link BubbleStateChangeListener}s of visibility changes. + * Does not un-bubble, just hides or un-hides. * Updates stack description for TalkBack focus. */ public void updateStack() { @@ -1145,29 +1200,10 @@ public class BubbleController implements ConfigurationController.ConfigurationLi mStackView.setVisibility(INVISIBLE); } - // Let listeners know if bubble state changed. - boolean hadBubbles = mNotificationShadeWindowController.getBubblesShowing(); - boolean hasBubblesShowing = hasBubbles() && mStackView.getVisibility() == VISIBLE; - mNotificationShadeWindowController.setBubblesShowing(hasBubblesShowing); - if (mStateChangeListener != null && hadBubbles != hasBubblesShowing) { - mStateChangeListener.onHasBubblesChanged(hasBubblesShowing); - } - mStackView.updateContentDescription(); } /** - * Rect indicating the touchable region for the bubble stack / expanded stack. - */ - public Rect getTouchableRegion() { - if (mStackView == null || mStackView.getVisibility() != VISIBLE) { - return null; - } - mStackView.getBoundsOnScreen(mTempRect); - return mTempRect; - } - - /** * The display id of the expanded view, if the stack is expanded and not occluded by the * status bar, otherwise returns {@link Display#INVALID_DISPLAY}. */ diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java index b773bdbcc692..f2b1c031dcd5 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java @@ -74,6 +74,8 @@ public class BubbleData { @Nullable Bubble selectedBubble; @Nullable Bubble addedBubble; @Nullable Bubble updatedBubble; + @Nullable Bubble addedOverflowBubble; + @Nullable Bubble removedOverflowBubble; // Pair with Bubble and @DismissReason Integer final List<Pair<Bubble, Integer>> removedBubbles = new ArrayList<>(); @@ -92,10 +94,12 @@ public class BubbleData { || addedBubble != null || updatedBubble != null || !removedBubbles.isEmpty() + || addedOverflowBubble != null + || removedOverflowBubble != null || orderChanged; } - void bubbleRemoved(Bubble bubbleToRemove, @DismissReason int reason) { + void bubbleRemoved(Bubble bubbleToRemove, @DismissReason int reason) { removedBubbles.add(new Pair<>(bubbleToRemove, reason)); } } @@ -233,6 +237,7 @@ public class BubbleData { private void moveOverflowBubbleToPending(Bubble b) { mOverflowBubbles.remove(b); + mStateChange.removedOverflowBubble = b; mPendingBubbles.add(b); } @@ -440,8 +445,9 @@ public class BubbleData { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel overflow bubble: " + b); } - mStateChange.bubbleRemoved(b, reason); mOverflowBubbles.remove(b); + mStateChange.bubbleRemoved(b, reason); + mStateChange.removedOverflowBubble = b; } return; } @@ -474,7 +480,8 @@ public class BubbleData { } void overflowBubble(@DismissReason int reason, Bubble bubble) { - if (!(reason == BubbleController.DISMISS_AGED + if (bubble.getPendingIntentCanceled() + || !(reason == BubbleController.DISMISS_AGED || reason == BubbleController.DISMISS_USER_GESTURE)) { return; } @@ -482,6 +489,7 @@ public class BubbleData { Log.d(TAG, "Overflowing: " + bubble); } mOverflowBubbles.add(0, bubble); + mStateChange.addedOverflowBubble = bubble; bubble.stopInflation(); if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { // Remove oldest bubble. @@ -489,8 +497,9 @@ public class BubbleData { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflow full. Remove: " + oldest); } - mStateChange.bubbleRemoved(oldest, BubbleController.DISMISS_OVERFLOW_MAX_REACHED); mOverflowBubbles.remove(oldest); + mStateChange.removedOverflowBubble = oldest; + mStateChange.bubbleRemoved(oldest, BubbleController.DISMISS_OVERFLOW_MAX_REACHED); } } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java index bb2365559f74..e367927621f3 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java @@ -131,6 +131,7 @@ public class BubbleExpandedView extends LinearLayout { } try { if (!mIsOverflow && mBubble.usingShortcutInfo()) { + options.setApplyActivityFlagsForBubbles(true); mActivityView.startShortcutActivity(mBubble.getShortcutInfo(), options, null /* sourceBounds */); } else { diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java index 13bc55c9dcb6..de54c353fc85 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java @@ -106,11 +106,12 @@ public class BubbleOverflowActivity extends Activity { mAdapter = new BubbleOverflowAdapter(mOverflowBubbles, mBubbleController::promoteBubbleFromOverflow, viewWidth, viewHeight); mRecyclerView.setAdapter(mAdapter); - onDataChanged(mBubbleController.getOverflowBubbles()); - mBubbleController.setOverflowCallback(() -> { - onDataChanged(mBubbleController.getOverflowBubbles()); - }); - onThemeChanged(); + + mOverflowBubbles.addAll(mBubbleController.getOverflowBubbles()); + mAdapter.notifyDataSetChanged(); + setEmptyStateVisibility(); + + mBubbleController.setOverflowListener(mDataListener); } /** @@ -137,6 +138,14 @@ public class BubbleOverflowActivity extends Activity { } } + void setEmptyStateVisibility() { + if (mOverflowBubbles.isEmpty()) { + mEmptyState.setVisibility(View.VISIBLE); + } else { + mEmptyState.setVisibility(View.GONE); + } + } + void setBackgroundColor() { final TypedArray ta = getApplicationContext().obtainStyledAttributes( new int[]{android.R.attr.colorBackgroundFloating}); @@ -145,22 +154,40 @@ public class BubbleOverflowActivity extends Activity { findViewById(android.R.id.content).setBackgroundColor(bgColor); } - void onDataChanged(List<Bubble> bubbles) { - mOverflowBubbles.clear(); - mOverflowBubbles.addAll(bubbles); - mAdapter.notifyDataSetChanged(); + private final BubbleData.Listener mDataListener = new BubbleData.Listener() { - if (mOverflowBubbles.isEmpty()) { - mEmptyState.setVisibility(View.VISIBLE); - } else { - mEmptyState.setVisibility(View.GONE); - } + @Override + public void applyUpdate(BubbleData.Update update) { - if (DEBUG_OVERFLOW) { - Log.d(TAG, "Updated overflow bubbles:\n" + BubbleDebugConfig.formatBubblesString( - mOverflowBubbles, /*selected*/ null)); + Bubble toRemove = update.removedOverflowBubble; + if (toRemove != null) { + if (DEBUG_OVERFLOW) { + Log.d(TAG, "remove: " + toRemove); + } + toRemove.cleanupViews(); + int i = mOverflowBubbles.indexOf(toRemove); + mOverflowBubbles.remove(toRemove); + mAdapter.notifyItemRemoved(i); + } + + Bubble toAdd = update.addedOverflowBubble; + if (toAdd != null) { + if (DEBUG_OVERFLOW) { + Log.d(TAG, "add: " + toAdd); + } + mOverflowBubbles.add(0, toAdd); + mAdapter.notifyItemInserted(0); + } + + setEmptyStateVisibility(); + + if (DEBUG_OVERFLOW) { + Log.d(TAG, BubbleDebugConfig.formatBubblesString( + mBubbleController.getOverflowBubbles(), + null)); + } } - } + }; @Override public void onStart() { @@ -226,6 +253,7 @@ class BubbleOverflowAdapter extends RecyclerView.Adapter<BubbleOverflowAdapter.V Bubble b = mBubbles.get(index); vh.iconView.setRenderedBubble(b); + vh.iconView.removeDotSuppressionFlag(BadgedImageView.SuppressionFlag.FLYOUT_VISIBLE); vh.iconView.setOnClickListener(view -> { mBubbles.remove(b); notifyDataSetChanged(); diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index 366d4a7345af..c802b59faba9 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -108,7 +108,8 @@ import java.util.function.Consumer; /** * Renders bubbles in a stack and handles animating expanded and collapsed states. */ -public class BubbleStackView extends FrameLayout { +public class BubbleStackView extends FrameLayout + implements ViewTreeObserver.OnComputeInternalInsetsListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleStackView" : TAG_BUBBLES; /** Animation durations for bubble stack user education views. **/ @@ -647,7 +648,6 @@ public class BubbleStackView extends FrameLayout { private boolean mShowingManage = false; private PhysicsAnimator.SpringConfig mManageSpringConfig = new PhysicsAnimator.SpringConfig( SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_LOW_BOUNCY); - @SuppressLint("ClickableViewAccessibility") public BubbleStackView(Context context, BubbleData data, @Nullable SurfaceSynchronizer synchronizer, @@ -1052,14 +1052,24 @@ public class BubbleStackView extends FrameLayout { } @Override - public void getBoundsOnScreen(Rect outRect, boolean clipToParent) { - getBoundsOnScreen(outRect); + public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo inoutInfo) { + inoutInfo.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); + + getTouchableRegion(mTempRect); + inoutInfo.touchableRegion.set(mTempRect); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + getViewTreeObserver().addOnComputeInternalInsetsListener(this); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeOnPreDrawListener(mViewUpdater); + getViewTreeObserver().removeOnComputeInternalInsetsListener(this); } @Override @@ -1960,8 +1970,16 @@ public class BubbleStackView extends FrameLayout { mAfterFlyoutHidden = null; } - @Override - public void getBoundsOnScreen(Rect outRect) { + /** + * Fills the Rect with the touchable region of the bubbles. This will be used by WindowManager + * to decide which touch events go to Bubbles. + * + * Bubbles is below the status bar/notification shade but above application windows. If you're + * trying to get touch events from the status bar or another higher-level window layer, you'll + * need to re-order TYPE_BUBBLES in WindowManagerPolicy so that we have the opportunity to steal + * them. + */ + public void getTouchableRegion(Rect outRect) { if (mUserEducationView != null && mUserEducationView.getVisibility() == VISIBLE) { // When user education shows then capture all touches outRect.set(0, 0, getWidth(), getHeight()); @@ -1971,12 +1989,12 @@ public class BubbleStackView extends FrameLayout { if (!mIsExpanded) { if (getBubbleCount() > 0) { mBubbleContainer.getChildAt(0).getBoundsOnScreen(outRect); + // Increase the touch target size of the bubble + outRect.top -= mBubbleTouchPadding; + outRect.left -= mBubbleTouchPadding; + outRect.right += mBubbleTouchPadding; + outRect.bottom += mBubbleTouchPadding; } - // Increase the touch target size of the bubble - outRect.top -= mBubbleTouchPadding; - outRect.left -= mBubbleTouchPadding; - outRect.right += mBubbleTouchPadding; - outRect.bottom += mBubbleTouchPadding; } else { mBubbleContainer.getBoundsOnScreen(outRect); } diff --git a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt index 3bed55912332..5765be57b5b0 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt @@ -30,6 +30,8 @@ import com.android.systemui.controls.management.ControlsProviderSelectorActivity import com.android.systemui.controls.management.ControlsRequestDialog import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.ControlsUiControllerImpl +import com.android.systemui.controls.ui.ControlActionCoordinator +import com.android.systemui.controls.ui.ControlActionCoordinatorImpl import dagger.Binds import dagger.BindsOptionalOf import dagger.Module @@ -55,6 +57,11 @@ abstract class ControlsModule { @Binds abstract fun provideUiController(controller: ControlsUiControllerImpl): ControlsUiController + @Binds + abstract fun provideControlActionCoordinator( + coordinator: ControlActionCoordinatorImpl + ): ControlActionCoordinator + @BindsOptionalOf abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper @@ -85,4 +92,4 @@ abstract class ControlsModule { abstract fun provideControlsRequestDialog( activity: ControlsRequestDialog ): Activity -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt index a93d223d565e..70092d31fe1e 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt @@ -16,89 +16,52 @@ package com.android.systemui.controls.ui -import android.app.Dialog -import android.content.Intent -import android.os.Vibrator -import android.os.VibrationEffect import android.service.controls.Control -import android.service.controls.actions.BooleanAction -import android.service.controls.actions.CommandAction -import android.view.HapticFeedbackConstants -import com.android.systemui.controls.controller.ControlsController -import com.android.systemui.util.concurrency.DelayableExecutor -object ControlActionCoordinator { - const val MIN_LEVEL = 0 - const val MAX_LEVEL = 10000 - - private var dialog: Dialog? = null - private var vibrator: Vibrator? = null - - lateinit var bgExecutor: DelayableExecutor - - fun closeDialog() { - dialog?.dismiss() - dialog = null - } +/** + * All control interactions should be routed through this coordinator. It handles dispatching of + * actions, haptic support, and all detail panels + */ +interface ControlActionCoordinator { /** - * Create custom vibrations, all intended to create very subtle feedback while interacting - * with the controls. + * Close any dialogs which may have been open */ - fun initialize(vibrator: Vibrator, bgExecutor: DelayableExecutor) { - this.vibrator = vibrator - this.bgExecutor = bgExecutor - } + fun closeDialogs() - fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) { - val effect = if (isChecked) Vibrations.toggleOnEffect else Vibrations.toggleOffEffect - vibrate(effect) - cvh.action(BooleanAction(templateId, !isChecked)) - } + /** + * Create a [BooleanAction], and inform the service of a request to change the device state + * + * @param cvh [ControlViewHolder] for the control + * @param templateId id of the control's template, as given by the service + * @param isChecked new requested state of the control + */ + fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) - fun touch(cvh: ControlViewHolder, templateId: String, control: Control) { - vibrate(Vibrations.toggleOnEffect) - if (cvh.usePanel()) { - showDialog(cvh, control.getAppIntent().getIntent()) - } else { - cvh.action(CommandAction(templateId)) - } - } + /** + * For non-toggle controls, touching may create a dialog or invoke a [CommandAction]. + * + * @param cvh [ControlViewHolder] for the control + * @param templateId id of the control's template, as given by the service + * @param control the control as sent by the service + */ + fun touch(cvh: ControlViewHolder, templateId: String, control: Control) - fun drag(isEdge: Boolean) { - if (isEdge) { - vibrate(Vibrations.rangeEdgeEffect) - } else { - vibrate(Vibrations.rangeMiddleEffect) - } - } + /** + * When a ToggleRange control is interacting with, a drag event is sent. + * + * @param isEdge did the drag event reach a control edge + */ + fun drag(isEdge: Boolean) /** * All long presses will be shown in a 3/4 height bottomsheet panel, in order for the user to * retain context with their favorited controls in the power menu. */ - fun longPress(cvh: ControlViewHolder) { - // Long press snould only be called when there is valid control state, otherwise ignore - cvh.cws.control?.let { - cvh.layout.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) - showDialog(cvh, it.getAppIntent().getIntent()) - } - } - - private fun vibrate(effect: VibrationEffect) { - vibrator?.let { - bgExecutor.execute { it.vibrate(effect) } - } - } + fun longPress(cvh: ControlViewHolder) - private fun showDialog(cvh: ControlViewHolder, intent: Intent) { - dialog = DetailDialog(cvh, intent).also { - it.setOnDismissListener { _ -> dialog = null } - it.show() - } - } - - fun setFocusedElement(cvh: ControlViewHolder?, controlsController: ControlsController) { - controlsController.onFocusChanged(cvh?.cws) - } + /** + * Event to inform the UI that the user has has focused on a single control. + */ + fun setFocusedElement(cvh: ControlViewHolder?) } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt new file mode 100644 index 000000000000..9e6f58851caf --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.controls.ui + +import android.app.Dialog +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import android.os.VibrationEffect +import android.service.controls.Control +import android.service.controls.actions.BooleanAction +import android.service.controls.actions.CommandAction +import android.util.Log +import android.view.HapticFeedbackConstants +import com.android.systemui.controls.controller.ControlsController +import com.android.systemui.globalactions.GlobalActionsComponent +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.concurrency.DelayableExecutor + +import dagger.Lazy + +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ControlActionCoordinatorImpl @Inject constructor( + private val context: Context, + private val bgExecutor: DelayableExecutor, + private val controlsController: Lazy<ControlsController>, + private val activityStarter: ActivityStarter, + private val keyguardStateController: KeyguardStateController, + private val globalActionsComponent: GlobalActionsComponent +) : ControlActionCoordinator { + private var dialog: Dialog? = null + private val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + private var lastAction: (() -> Unit)? = null + + override fun closeDialogs() { + dialog?.dismiss() + dialog = null + } + + override fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) { + bouncerOrRun { + val effect = if (isChecked) Vibrations.toggleOnEffect else Vibrations.toggleOffEffect + vibrate(effect) + cvh.action(BooleanAction(templateId, !isChecked)) + } + } + + override fun touch(cvh: ControlViewHolder, templateId: String, control: Control) { + vibrate(Vibrations.toggleOnEffect) + + bouncerOrRun { + if (cvh.usePanel()) { + showDialog(cvh, control.getAppIntent().getIntent()) + } else { + cvh.action(CommandAction(templateId)) + } + } + } + + override fun drag(isEdge: Boolean) { + bouncerOrRun { + if (isEdge) { + vibrate(Vibrations.rangeEdgeEffect) + } else { + vibrate(Vibrations.rangeMiddleEffect) + } + } + } + + override fun longPress(cvh: ControlViewHolder) { + bouncerOrRun { + // Long press snould only be called when there is valid control state, otherwise ignore + cvh.cws.control?.let { + cvh.layout.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) + showDialog(cvh, it.getAppIntent().getIntent()) + } + } + } + + override fun setFocusedElement(cvh: ControlViewHolder?) { + controlsController.get().onFocusChanged(cvh?.cws) + } + + private fun bouncerOrRun(f: () -> Unit) { + if (!keyguardStateController.isUnlocked()) { + context.sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) + activityStarter.dismissKeyguardThenExecute({ + Log.d(ControlsUiController.TAG, "Device unlocked, invoking controls action") + globalActionsComponent.handleShowGlobalActionsMenu() + f() + true + }, null, true) + } else { + f() + } + } + + private fun vibrate(effect: VibrationEffect) { + bgExecutor.execute { vibrator.vibrate(effect) } + } + + private fun showDialog(cvh: ControlViewHolder, intent: Intent) { + dialog = DetailDialog(cvh, intent).also { + it.setOnDismissListener { _ -> dialog = null } + it.show() + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt index f5acc287262b..a9b540eddb2c 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt @@ -53,7 +53,8 @@ class ControlViewHolder( val layout: ViewGroup, val controlsController: ControlsController, val uiExecutor: DelayableExecutor, - val bgExecutor: DelayableExecutor + val bgExecutor: DelayableExecutor, + val controlActionCoordinator: ControlActionCoordinator ) { companion object { @@ -65,6 +66,9 @@ class ControlViewHolder( DeviceTypes.TYPE_THERMOSTAT, DeviceTypes.TYPE_CAMERA ) + + const val MIN_LEVEL = 0 + const val MAX_LEVEL = 10000 } private val toggleBackgroundIntensity: Float = layout.context.resources @@ -121,7 +125,7 @@ class ControlViewHolder( cws.control?.let { layout.setClickable(true) layout.setOnLongClickListener(View.OnLongClickListener() { - ControlActionCoordinator.longPress(this@ControlViewHolder) + controlActionCoordinator.longPress(this@ControlViewHolder) true }) } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index 25f4940e1f47..7108966072b9 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -29,7 +29,6 @@ import android.content.res.Configuration import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Process -import android.os.Vibrator import android.service.controls.Control import android.util.Log import android.util.TypedValue @@ -59,6 +58,8 @@ import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsProviderSelectorActivity import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.concurrency.DelayableExecutor import dagger.Lazy import java.text.Collator @@ -75,7 +76,10 @@ class ControlsUiControllerImpl @Inject constructor ( @Main val uiExecutor: DelayableExecutor, @Background val bgExecutor: DelayableExecutor, val controlsListingController: Lazy<ControlsListingController>, - @Main val sharedPreferences: SharedPreferences + @Main val sharedPreferences: SharedPreferences, + val controlActionCoordinator: ControlActionCoordinator, + private val activityStarter: ActivityStarter, + private val keyguardStateController: KeyguardStateController ) : ControlsUiController { companion object { @@ -107,11 +111,6 @@ class ControlsUiControllerImpl @Inject constructor ( private lateinit var listingCallback: ControlsListingController.ControlsListingCallback - init { - val vibratorService = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator - ControlActionCoordinator.initialize(vibratorService, bgExecutor) - } - private fun createCallback( onResult: (List<SelectionItem>) -> Unit ): ControlsListingController.ControlsListingCallback { @@ -267,8 +266,16 @@ class ControlsUiControllerImpl @Inject constructor ( private fun startActivity(context: Context, intent: Intent) { // Force animations when transitioning from a dialog to an activity intent.putExtra(ControlsUiController.EXTRA_ANIMATE, true) - context.startActivity(intent) dismissGlobalActions.run() + + if (!keyguardStateController.isUnlocked()) { + activityStarter.dismissKeyguardThenExecute({ + context.startActivity(intent) + true + }, null, true) + } else { + context.startActivity(intent) + } } private fun showControlsView(items: List<SelectionItem>) { @@ -463,7 +470,8 @@ class ControlsUiControllerImpl @Inject constructor ( baseLayout, controlsController.get(), uiExecutor, - bgExecutor + bgExecutor, + controlActionCoordinator ) cvh.bindData(it) controlViewsById.put(key, cvh) @@ -545,9 +553,7 @@ class ControlsUiControllerImpl @Inject constructor ( controlViewsById.forEach { it.value.dismiss() } - - ControlActionCoordinator.closeDialog() - + controlActionCoordinator.closeDialogs() controlsController.get().unsubscribe() parent.removeAllViews() diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt index 6340db1d756d..b4d0e6349605 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt @@ -22,8 +22,8 @@ import android.service.controls.Control import android.service.controls.templates.TemperatureControlTemplate import com.android.systemui.R -import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL -import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL class TemperatureControlBehavior : Behavior { lateinit var clipLayer: Drawable @@ -35,7 +35,7 @@ class TemperatureControlBehavior : Behavior { this.cvh = cvh cvh.layout.setOnClickListener { _ -> - ControlActionCoordinator.touch(cvh, template.getTemplateId(), control) + cvh.controlActionCoordinator.touch(cvh, template.getTemplateId(), control) } } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt index 368d1399971d..3e1669898a7f 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleBehavior.kt @@ -22,7 +22,7 @@ import android.service.controls.Control import android.service.controls.templates.ToggleTemplate import android.view.View import com.android.systemui.R -import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL class ToggleBehavior : Behavior { lateinit var clipLayer: Drawable @@ -35,7 +35,7 @@ class ToggleBehavior : Behavior { cvh.applyRenderInfo(false /* enabled */, 0 /* offset */, false /* animated */) cvh.layout.setOnClickListener(View.OnClickListener() { - ControlActionCoordinator.toggle(cvh, template.getTemplateId(), template.isChecked()) + cvh.controlActionCoordinator.toggle(cvh, template.getTemplateId(), template.isChecked()) }) } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt index 4ba2486193ca..bfc06450b360 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt @@ -40,8 +40,8 @@ import android.view.accessibility.AccessibilityNodeInfo import android.widget.TextView import com.android.systemui.Interpolators import com.android.systemui.R -import com.android.systemui.controls.ui.ControlActionCoordinator.MAX_LEVEL -import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL import java.util.IllegalFormatException class ToggleRangeBehavior : Behavior { @@ -141,7 +141,7 @@ class ToggleRangeBehavior : Behavior { ): Boolean { val handled = when (action) { AccessibilityNodeInfo.ACTION_CLICK -> { - ControlActionCoordinator.toggle(cvh, template.getTemplateId(), + cvh.controlActionCoordinator.toggle(cvh, template.getTemplateId(), template.isChecked()) true } @@ -175,7 +175,7 @@ class ToggleRangeBehavior : Behavior { fun beginUpdateRange() { status.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources() .getDimensionPixelSize(R.dimen.control_status_expanded).toFloat()) - ControlActionCoordinator.setFocusedElement(cvh, cvh.controlsController) + cvh.controlActionCoordinator.setFocusedElement(cvh) } fun updateRange(level: Int, checked: Boolean, isDragging: Boolean) { @@ -187,7 +187,7 @@ class ToggleRangeBehavior : Behavior { if (isDragging) { clipLayer.level = newLevel val isEdge = newLevel == MIN_LEVEL || newLevel == MAX_LEVEL - ControlActionCoordinator.drag(isEdge) + cvh.controlActionCoordinator.drag(isEdge) } else { rangeAnimator = ValueAnimator.ofInt(cvh.clipLayer.level, newLevel).apply { addUpdateListener { @@ -248,7 +248,7 @@ class ToggleRangeBehavior : Behavior { status.setText("$currentStatusText $currentRangeValue") cvh.action(FloatAction(rangeTemplate.getTemplateId(), findNearestStep(levelToRangeValue(clipLayer.getLevel())))) - ControlActionCoordinator.setFocusedElement(null, cvh.controlsController) + cvh.controlActionCoordinator.setFocusedElement(null) } fun findNearestStep(value: Float): Float { @@ -282,7 +282,7 @@ class ToggleRangeBehavior : Behavior { if (isDragging) { return } - ControlActionCoordinator.longPress(this@ToggleRangeBehavior.cvh) + cvh.controlActionCoordinator.longPress(this@ToggleRangeBehavior.cvh) } override fun onScroll( @@ -309,7 +309,7 @@ class ToggleRangeBehavior : Behavior { override fun onSingleTapUp(e: MotionEvent): Boolean { val th = this@ToggleRangeBehavior - ControlActionCoordinator.toggle(th.cvh, th.template.getTemplateId(), + cvh.controlActionCoordinator.toggle(th.cvh, th.template.getTemplateId(), th.template.isChecked()) return true } diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt index fd96cea1541e..7ae3df751419 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/TouchBehavior.kt @@ -23,7 +23,7 @@ import android.service.controls.Control import android.service.controls.templates.ControlTemplate import com.android.systemui.R -import com.android.systemui.controls.ui.ControlActionCoordinator.MIN_LEVEL +import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL /** * Supports touch events, but has no notion of state as the {@link ToggleBehavior} does. Must be @@ -40,7 +40,7 @@ class TouchBehavior : Behavior { cvh.applyRenderInfo(false /* enabled */, 0 /* offset */, false /* animated */) cvh.layout.setOnClickListener(View.OnClickListener() { - ControlActionCoordinator.touch(cvh, template.getTemplateId(), control) + cvh.controlActionCoordinator.touch(cvh, template.getTemplateId(), control) }) } diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java index 3a4b273e1c98..23bcb29923d8 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java @@ -33,6 +33,8 @@ import android.view.LayoutInflater; import android.view.WindowManager; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.util.NotificationMessagingUtil; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.ViewMediatorCallback; @@ -218,4 +220,11 @@ public class DependencyProvider { public Choreographer providesChoreographer() { return Choreographer.getInstance(); } + + /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ + @Singleton + @Provides + static UiEventLogger provideUiEventLogger() { + return new UiEventLoggerImpl(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 1be4d438683a..3510e07d2cea 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -34,6 +34,9 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -45,6 +48,7 @@ import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.WakeLock; import java.io.PrintWriter; +import java.util.Optional; import java.util.function.Consumer; /** @@ -58,6 +62,8 @@ public class DozeTriggers implements DozeMachine.Part { /** adb shell am broadcast -a com.android.systemui.doze.pulse com.android.systemui */ private static final String PULSE_ACTION = "com.android.systemui.doze.pulse"; + private static final UiEventLogger UI_EVENT_LOGGER = new UiEventLoggerImpl(); + /** * Last value sent by the wake-display sensor. * Assuming that the screen should start on. @@ -88,6 +94,62 @@ public class DozeTriggers implements DozeMachine.Part { private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); + @VisibleForTesting + public enum DozingUpdateUiEvent implements UiEventLogger.UiEventEnum { + @UiEvent(doc = "Dozing updated due to notification.") + DOZING_UPDATE_NOTIFICATION(433), + + @UiEvent(doc = "Dozing updated due to sigmotion.") + DOZING_UPDATE_SIGMOTION(434), + + @UiEvent(doc = "Dozing updated because sensor was picked up.") + DOZING_UPDATE_SENSOR_PICKUP(435), + + @UiEvent(doc = "Dozing updated because sensor was double tapped.") + DOZING_UPDATE_SENSOR_DOUBLE_TAP(436), + + @UiEvent(doc = "Dozing updated because sensor was long squeezed.") + DOZING_UPDATE_SENSOR_LONG_SQUEEZE(437), + + @UiEvent(doc = "Dozing updated due to docking.") + DOZING_UPDATE_DOCKING(438), + + @UiEvent(doc = "Dozing updated because sensor woke up.") + DOZING_UPDATE_SENSOR_WAKEUP(439), + + @UiEvent(doc = "Dozing updated because sensor woke up the lockscreen.") + DOZING_UPDATE_SENSOR_WAKE_LOCKSCREEN(440), + + @UiEvent(doc = "Dozing updated because sensor was tapped.") + DOZING_UPDATE_SENSOR_TAP(441); + + private final int mId; + + DozingUpdateUiEvent(int id) { + mId = id; + } + + @Override + public int getId() { + return mId; + } + + static DozingUpdateUiEvent fromReason(int reason) { + switch (reason) { + case 1: return DOZING_UPDATE_NOTIFICATION; + case 2: return DOZING_UPDATE_SIGMOTION; + case 3: return DOZING_UPDATE_SENSOR_PICKUP; + case 4: return DOZING_UPDATE_SENSOR_DOUBLE_TAP; + case 5: return DOZING_UPDATE_SENSOR_LONG_SQUEEZE; + case 6: return DOZING_UPDATE_DOCKING; + case 7: return DOZING_UPDATE_SENSOR_WAKEUP; + case 8: return DOZING_UPDATE_SENSOR_WAKE_LOCKSCREEN; + case 9: return DOZING_UPDATE_SENSOR_TAP; + default: return null; + } + } + } + public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler, @@ -224,6 +286,8 @@ public class DozeTriggers implements DozeMachine.Part { mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE) .setSubtype(reason)); + Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) + .ifPresent(UI_EVENT_LOGGER::log); if (mDozeParameters.getDisplayNeedsBlanking()) { // Let's prepare the display to wake-up by drawing black. // This will cover the hardware wake-up sequence, where the display @@ -401,6 +465,8 @@ public class DozeTriggers implements DozeMachine.Part { // Logs request pulse reason on AOD screen. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE).setSubtype(reason)); + Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) + .ifPresent(UI_EVENT_LOGGER::log); } private boolean canPulse() { diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java index e949007a158b..b29c5b07c765 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java @@ -24,6 +24,7 @@ import com.android.systemui.plugins.GlobalActions; import com.android.systemui.plugins.GlobalActions.GlobalActionsManager; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue.Callbacks; +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ExtensionController; import com.android.systemui.statusbar.policy.ExtensionController.Extension; @@ -43,15 +44,18 @@ public class GlobalActionsComponent extends SystemUI implements Callbacks, Globa private GlobalActions mPlugin; private Extension<GlobalActions> mExtension; private IStatusBarService mBarService; + private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Inject public GlobalActionsComponent(Context context, CommandQueue commandQueue, ExtensionController extensionController, - Provider<GlobalActions> globalActionsProvider) { + Provider<GlobalActions> globalActionsProvider, + StatusBarKeyguardViewManager statusBarKeyguardViewManager) { super(context); mCommandQueue = commandQueue; mExtensionController = extensionController; mGlobalActionsProvider = globalActionsProvider; + mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; } @Override @@ -81,6 +85,7 @@ public class GlobalActionsComponent extends SystemUI implements Callbacks, Globa @Override public void handleShowGlobalActionsMenu() { + mStatusBarKeyguardViewManager.setGlobalActionsVisible(true); mExtension.get().showGlobalActions(this); } @@ -95,6 +100,7 @@ public class GlobalActionsComponent extends SystemUI implements Callbacks, Globa @Override public void onGlobalActionsHidden() { try { + mStatusBarKeyguardViewManager.setGlobalActionsVisible(false); mBarService.onGlobalActionsHidden(); } catch (RemoteException e) { } diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index 80ebe5701c3c..8123158408dd 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -234,6 +234,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private SharedPreferences mControlsPreferences; private final RingerModeTracker mRingerModeTracker; private int mDialogPressDelay = DIALOG_PRESS_DELAY; // ms + private Handler mMainHandler; + private boolean mShowLockScreenCardsAndControls = false; @VisibleForTesting public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum { @@ -288,7 +290,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, @Background Executor backgroundExecutor, ControlsListingController controlsListingController, ControlsController controlsController, UiEventLogger uiEventLogger, - RingerModeTracker ringerModeTracker) { + RingerModeTracker ringerModeTracker, @Main Handler handler) { mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); mWindowManagerFuncs = windowManagerFuncs; mAudioManager = audioManager; @@ -317,6 +319,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mBlurUtils = blurUtils; mRingerModeTracker = ringerModeTracker; mControlsController = controlsController; + mMainHandler = handler; // receive broadcasts IntentFilter filter = new IntentFilter(); @@ -352,10 +355,15 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, keyguardStateController.addCallback(new KeyguardStateController.Callback() { @Override public void onUnlockedChanged() { - if (mDialog != null && mDialog.mPanelController != null) { + if (mDialog != null) { boolean unlocked = keyguardStateController.isUnlocked() || keyguardStateController.canDismissLockScreen(); - mDialog.mPanelController.onDeviceLockStateChanged(unlocked); + if (mDialog.mPanelController != null) { + mDialog.mPanelController.onDeviceLockStateChanged(unlocked); + } + if (!mDialog.isShowingControls() && shouldShowControls()) { + mDialog.showControls(mControlsUiController); + } } } }); @@ -370,6 +378,17 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mControlsPreferences = userContext.getSharedPreferences(PREFS_CONTROLS_FILE, Context.MODE_PRIVATE); + // Listen for changes to show controls on the power menu while locked + onPowerMenuLockScreenSettingsChanged(); + mContext.getContentResolver().registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), + false /* notifyForDescendants */, + new ContentObserver(mMainHandler) { + @Override + public void onChange(boolean selfChange) { + onPowerMenuLockScreenSettingsChanged(); + } + }); } private void seedFavorites() { @@ -485,15 +504,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, @VisibleForTesting protected int getMaxShownPowerItems() { if (shouldUseControlsLayout()) { - int maxColumns = - mResources.getInteger(com.android.systemui.R.integer.power_menu_max_columns); - // TODO: Overflow temporarily disabled on keyguard to prevent touch issues. - // Show an extra item on the keyguard because the overflow button currently disabled. - if (mKeyguardShowing) { - return maxColumns + 1; - } else { - return maxColumns; - } + return mResources.getInteger(com.android.systemui.R.integer.power_menu_max_columns); } else { return Integer.MAX_VALUE; } @@ -1804,7 +1815,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } }; - private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { + private ContentObserver mAirplaneModeObserver = new ContentObserver(mMainHandler) { @Override public void onChange(boolean selfChange) { onAirplaneModeChanged(); @@ -1950,6 +1961,15 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, initializeLayout(); } + private boolean isShowingControls() { + return mControlsUiController != null; + } + + private void showControls(ControlsUiController controller) { + mControlsUiController = controller; + mControlsUiController.show(mControlsView, this::dismissForControlsActivity); + } + private boolean shouldUsePanel() { return mPanelController != null && mPanelController.getPanelContent() != null; } @@ -2066,8 +2086,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, View overflowButton = findViewById( com.android.systemui.R.id.global_actions_overflow_button); if (overflowButton != null) { - // TODO: Overflow button hidden on keyguard to temporarily prevent touch issues. - if (mOverflowAdapter.getCount() > 0 && !mKeyguardShowing) { + if (mOverflowAdapter.getCount() > 0) { overflowButton.setOnClickListener((view) -> showPowerOverflowMenu()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams(); @@ -2354,7 +2373,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, @VisibleForTesting protected boolean shouldShowControls() { - return mKeyguardStateController.isUnlocked() + boolean isUnlocked = mKeyguardStateController.isUnlocked() + || mKeyguardStateController.canDismissLockScreen(); + return (isUnlocked || mShowLockScreenCardsAndControls) && mControlsUiController.getAvailable() && !mControlsServiceInfos.isEmpty(); } @@ -2363,4 +2384,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, // always use new controls layout return true; } + + private void onPowerMenuLockScreenSettingsChanged() { + mShowLockScreenCardsAndControls = Settings.Secure.getInt(mContentResolver, + Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT, 0) != 0; + } } diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index 9c8fb7c52eec..d38c481752c6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -250,7 +250,7 @@ public class PipTaskOrganizer extends TaskOrganizer { } @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo info) { + public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) { Objects.requireNonNull(info, "Requires RunningTaskInfo"); final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds( info.topActivity, getAspectRatioOrDefault(info.pictureInPictureParams), @@ -259,7 +259,7 @@ public class PipTaskOrganizer extends TaskOrganizer { mTaskInfo = info; mToken = mTaskInfo.token; mInPip = true; - mLeash = mToken.getLeash(); + mLeash = leash; final Rect currentBounds = mTaskInfo.configuration.windowConfiguration.getBounds(); mBoundsToRestore.put(mToken.asBinder(), currentBounds); diff --git a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt index 448531a132df..c5ae3ab2c9fb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt @@ -20,10 +20,14 @@ import android.content.Context import android.content.res.Configuration import android.view.View import android.view.ViewGroup +import com.android.internal.logging.UiEventLogger import com.android.systemui.R import com.android.systemui.qs.TileLayout.exactly -class DoubleLineTileLayout(context: Context) : ViewGroup(context), QSPanel.QSTileLayout { +class DoubleLineTileLayout( + context: Context, + private val uiEventLogger: UiEventLogger +) : ViewGroup(context), QSPanel.QSTileLayout { companion object { private const val NUM_LINES = 2 @@ -86,6 +90,13 @@ class DoubleLineTileLayout(context: Context) : ViewGroup(context), QSPanel.QSTil for (record in mRecords) { record.tile.setListening(this, listening) } + if (listening) { + for (i in 0 until numVisibleTiles) { + val tile = mRecords[i].tile + uiEventLogger.logWithInstanceId( + QSEvent.QQS_TILE_VISIBLE, 0, tile.metricsSpec, tile.instanceId) + } + } } override fun getNumVisibleTiles() = tilesToShow diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index cd737217b84a..b157f4b3c5ed 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -22,7 +22,9 @@ import android.widget.Scroller; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSPanel.TileRecord; @@ -63,7 +65,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { private int mLayoutDirection; private int mHorizontalClipBound; private final Rect mClippingRect; - private int mLastMaxHeight = -1; + private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger(); public PagedTileLayout(Context context, AttributeSet attrs) { super(context, attrs); @@ -75,6 +77,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { mLayoutDirection = getLayoutDirection(); mClippingRect = new Rect(); } + private int mLastMaxHeight = -1; public void saveInstanceState(Bundle outState) { outState.putInt(CURRENT_PAGE, getCurrentItem()); @@ -126,6 +129,15 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { return page; } + // This will dump to the ui log all the tiles that are visible in this page + private void logVisibleTiles(TilePage page) { + for (int i = 0; i < page.mRecords.size(); i++) { + QSTile t = page.mRecords.get(i).tile; + mUiEventLogger.logWithInstanceId(QSEvent.QS_TILE_VISIBLE, 0, t.getMetricsSpec(), + t.getInstanceId()); + } + } + @Override public void setListening(boolean listening) { if (mListening == listening) return; @@ -218,7 +230,11 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); int currentItem = getCurrentPageNumber(); for (int i = 0; i < mPages.size(); i++) { - mPages.get(i).setSelected(i == currentItem ? selected : false); + TilePage page = mPages.get(i); + page.setSelected(i == currentItem ? selected : false); + if (page.isSelected()) { + logVisibleTiles(page); + } } setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO); } @@ -419,6 +435,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { mPageListener.onPageChanged(isLayoutRtl() ? position == mPages.size() - 1 : position == 0); } + } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java index 17aaff1f7383..ee3b499edfb7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java @@ -39,6 +39,7 @@ import android.widget.Switch; import android.widget.TextView; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.Dependency; import com.android.systemui.FontSizeUtils; import com.android.systemui.R; @@ -53,6 +54,7 @@ public class QSDetail extends LinearLayout { private static final long FADE_DURATION = 300; private final SparseArray<View> mDetailViews = new SparseArray<>(); + private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger(); private ViewGroup mDetailContent; protected TextView mDetailSettingsButton; @@ -205,6 +207,7 @@ public class QSDetail extends LinearLayout { mDetailContent.addView(detailView); mDetailViews.put(viewCacheIndex, detailView); Dependency.get(MetricsLogger.class).visible(adapter.getMetricsCategory()); + mUiEventLogger.log(adapter.openDetailEvent()); announceForAccessibility(mContext.getString( R.string.accessibility_quick_settings_detail, adapter.getTitle())); @@ -214,6 +217,7 @@ public class QSDetail extends LinearLayout { } else { if (mDetailAdapter != null) { Dependency.get(MetricsLogger.class).hidden(mDetailAdapter.getMetricsCategory()); + mUiEventLogger.log(mDetailAdapter.closeDetailEvent()); } mClosingDetail = true; mDetailAdapter = null; @@ -249,6 +253,7 @@ public class QSDetail extends LinearLayout { mDetailSettingsButton.setOnClickListener(v -> { Dependency.get(MetricsLogger.class).action(ACTION_QS_MORE_SETTINGS, adapter.getMetricsCategory()); + mUiEventLogger.log(adapter.moreSettingsEvent()); Dependency.get(ActivityStarter.class) .postStartActivityDismissingKeyguard(settingsIntent, 0); }); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt b/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt new file mode 100644 index 000000000000..54e8a2be0d2a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/QSEvents.kt @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs + +import com.android.internal.logging.UiEvent +import com.android.internal.logging.UiEventLogger +import com.android.internal.logging.UiEventLoggerImpl +import com.android.internal.logging.testing.UiEventLoggerFake + +object QSEvents { + + var qsUiEventsLogger: UiEventLogger = UiEventLoggerImpl() + private set + + fun setLoggerForTesting(): UiEventLoggerFake { + return UiEventLoggerFake().also { + qsUiEventsLogger = it + } + } + + fun resetLogger() { + qsUiEventsLogger = UiEventLoggerImpl() + } +} + +enum class QSEvent(private val _id: Int) : UiEventLogger.UiEventEnum { + @UiEvent(doc = "Tile clicked. It has an instance id and a spec (or packageName)") + QS_ACTION_CLICK(387), + + @UiEvent(doc = "Tile secondary button clicked. " + + "It has an instance id and a spec (or packageName)") + QS_ACTION_SECONDARY_CLICK(388), + + @UiEvent(doc = "Tile long clicked. It has an instance id and a spec (or packageName)") + QS_ACTION_LONG_PRESS(389), + + @UiEvent(doc = "Quick Settings panel expanded") + QS_PANEL_EXPANDED(390), + + @UiEvent(doc = "Quick Settings panel collapsed") + QS_PANEL_COLLAPSED(391), + + @UiEvent(doc = "Tile visible in Quick Settings panel. The tile may be in a different page. " + + "It has an instance id and a spec (or packageName)") + QS_TILE_VISIBLE(392), + + @UiEvent(doc = "Quick Quick Settings panel expanded") + QQS_PANEL_EXPANDED(393), + + @UiEvent(doc = "Quick Quick Settings panel collapsed") + QQS_PANEL_COLLAPSED(394), + + @UiEvent(doc = "Tile visible in Quick Quick Settings panel. " + + "It has an instance id and a spec (or packageName)") + QQS_TILE_VISIBLE(395); + + override fun getId() = _id +} + +enum class QSEditEvent(private val _id: Int) : UiEventLogger.UiEventEnum { + + @UiEvent(doc = "Tile removed from current tiles") + QS_EDIT_REMOVE(210), + + @UiEvent(doc = "Tile added to current tiles") + QS_EDIT_ADD(211), + + @UiEvent(doc = "Tile moved") + QS_EDIT_MOVE(212), + + @UiEvent(doc = "QS customizer open") + QS_EDIT_OPEN(213), + + @UiEvent(doc = "QS customizer closed") + QS_EDIT_CLOSED(214), + + @UiEvent(doc = "QS tiles reset") + QS_EDIT_RESET(215); + + override fun getId() = _id +} + +enum class QSDndEvent(private val _id: Int) : UiEventLogger.UiEventEnum { + @UiEvent(doc = "TODO(beverlyt)") + QS_DND_CONDITION_SELECT(420), + + @UiEvent(doc = "TODO(beverlyt)") + QS_DND_TIME_UP(422), + + @UiEvent(doc = "TODO(beverlyt)") + QS_DND_TIME_DOWN(423); + + override fun getId() = _id +} + +enum class QSUserSwitcherEvent(private val _id: Int) : UiEventLogger.UiEventEnum { + @UiEvent(doc = "The current user has been switched in the detail panel") + QS_USER_SWITCH(424), + + @UiEvent(doc = "User switcher QS detail panel open") + QS_USER_DETAIL_OPEN(425), + + @UiEvent(doc = "User switcher QS detail panel closed") + QS_USER_DETAIL_CLOSE(426), + + @UiEvent(doc = "User switcher QS detail panel more settings pressed") + QS_USER_MORE_SETTINGS(427); + + override fun getId() = _id +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java index ece1ce8bb4d0..1e8c4d86da36 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java @@ -16,6 +16,8 @@ package com.android.systemui.qs; import android.content.Context; +import com.android.internal.logging.InstanceId; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.external.TileServices; import com.android.systemui.qs.logging.QSLogger; @@ -30,6 +32,7 @@ public interface QSHost { Context getContext(); Context getUserContext(); QSLogger getQSLogger(); + UiEventLogger getUiEventLogger(); Collection<QSTile> getTiles(); void addCallback(Callback callback); void removeCallback(Callback callback); @@ -39,6 +42,8 @@ public interface QSHost { int indexOf(String tileSpec); + InstanceId getNewInstanceId(); + interface Callback { void onTilesChanged(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 121e2aa94954..a3004bdc004d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -52,6 +52,7 @@ import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.NotificationVisibility; import com.android.settingslib.Utils; @@ -129,6 +130,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne private BrightnessController mBrightnessController; private final DumpManager mDumpManager; private final QSLogger mQSLogger; + protected final UiEventLogger mUiEventLogger; protected QSTileHost mHost; protected QSSecurityFooter mFooter; @@ -176,7 +178,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter, - NotificationEntryManager entryManager + NotificationEntryManager entryManager, + UiEventLogger uiEventLogger ) { super(context, attrs); mContext = context; @@ -188,6 +191,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mBroadcastDispatcher = broadcastDispatcher; mActivityStarter = activityStarter; mNotificationEntryManager = entryManager; + mUiEventLogger = uiEventLogger; setOrientation(VERTICAL); @@ -678,8 +682,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } mMetricsLogger.visibility(MetricsEvent.QS_PANEL, mExpanded); if (!mExpanded) { + mUiEventLogger.log(closePanelEvent()); closeDetail(); } else { + mUiEventLogger.log(openPanelEvent()); logTiles(); } } @@ -786,6 +792,18 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne return mHost.createTileView(tile, collapsedView); } + protected QSEvent openPanelEvent() { + return QSEvent.QS_PANEL_EXPANDED; + } + + protected QSEvent closePanelEvent() { + return QSEvent.QS_PANEL_COLLAPSED; + } + + protected QSEvent tileVisibleEvent() { + return QSEvent.QS_TILE_VISIBLE; + } + protected boolean shouldShowDetail() { return mExpanded; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index 9e8eb3a28781..8835e5db50c0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -31,6 +31,9 @@ import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; +import com.android.internal.logging.InstanceId; +import com.android.internal.logging.InstanceIdSequence; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -73,6 +76,7 @@ import javax.inject.Singleton; public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, Dumpable { private static final String TAG = "QSTileHost"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + private static final int MAX_QS_INSTANCE_ID = 1 << 20; public static final String TILES_SETTING = Secure.QS_TILES; @@ -85,6 +89,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D private final DumpManager mDumpManager; private final BroadcastDispatcher mBroadcastDispatcher; private final QSLogger mQSLogger; + private final UiEventLogger mUiEventLogger; + private final InstanceIdSequence mInstanceIdSequence; private final List<Callback> mCallbacks = new ArrayList<>(); private AutoTileManager mAutoTiles; @@ -106,7 +112,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D DumpManager dumpManager, BroadcastDispatcher broadcastDispatcher, Optional<StatusBar> statusBarOptional, - QSLogger qsLogger) { + QSLogger qsLogger, + UiEventLogger uiEventLogger) { mIconController = iconController; mContext = context; mUserContext = context; @@ -114,8 +121,10 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D mPluginManager = pluginManager; mDumpManager = dumpManager; mQSLogger = qsLogger; + mUiEventLogger = uiEventLogger; mBroadcastDispatcher = broadcastDispatcher; + mInstanceIdSequence = new InstanceIdSequence(MAX_QS_INSTANCE_ID); mServices = new TileServices(this, bgLooper, mBroadcastDispatcher); mStatusBarOptional = statusBarOptional; @@ -137,6 +146,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D return mIconController; } + @Override + public InstanceId getNewInstanceId() { + return mInstanceIdSequence.newInstanceId(); + } + public void destroy() { mTiles.values().forEach(tile -> tile.destroy()); mAutoTiles.destroy(); @@ -170,6 +184,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D } @Override + public UiEventLogger getUiEventLogger() { + return mUiEventLogger; + } + + @Override public void addCallback(Callback callback) { mCallbacks.add(callback); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 38dea657242d..6683a1ce4f4f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -27,6 +27,7 @@ import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; +import com.android.internal.logging.UiEventLogger; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.systemui.Dependency; import com.android.systemui.R; @@ -88,11 +89,12 @@ public class QuickQSPanel extends QSPanel { @Background DelayableExecutor backgroundExecutor, @Nullable LocalBluetoothManager localBluetoothManager, ActivityStarter activityStarter, - NotificationEntryManager entryManager + NotificationEntryManager entryManager, + UiEventLogger uiEventLogger ) { super(context, attrs, dumpManager, broadcastDispatcher, qsLogger, foregroundExecutor, backgroundExecutor, localBluetoothManager, activityStarter, - entryManager); + entryManager, uiEventLogger); if (mFooter != null) { removeView(mFooter.getView()); } @@ -118,9 +120,9 @@ public class QuickQSPanel extends QSPanel { lp2.setMarginStart(0); mHorizontalLinearLayout.addView(mMediaPlayer.getView(), lp2); - mTileLayout = new DoubleLineTileLayout(context); + mTileLayout = new DoubleLineTileLayout(context, mUiEventLogger); mMediaTileLayout = mTileLayout; - mRegularTileLayout = new HeaderTileLayout(context); + mRegularTileLayout = new HeaderTileLayout(context, mUiEventLogger); LayoutParams lp = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1); lp.setMarginEnd(0); lp.setMarginStart(marginSize); @@ -135,7 +137,7 @@ public class QuickQSPanel extends QSPanel { super.setPadding(0, 0, 0, 0); } else { sDefaultMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_columns); - mTileLayout = new HeaderTileLayout(context); + mTileLayout = new HeaderTileLayout(context, mUiEventLogger); mTileLayout.setListening(mListening); addView((View) mTileLayout, 0 /* Between brightness and footer */); super.setPadding(0, 0, 0, 0); @@ -312,13 +314,30 @@ public class QuickQSPanel extends QSPanel { super.setVisibility(visibility); } + @Override + protected QSEvent openPanelEvent() { + return QSEvent.QQS_PANEL_EXPANDED; + } + + @Override + protected QSEvent closePanelEvent() { + return QSEvent.QQS_PANEL_COLLAPSED; + } + + @Override + protected QSEvent tileVisibleEvent() { + return QSEvent.QQS_TILE_VISIBLE; + } + private static class HeaderTileLayout extends TileLayout { - private boolean mListening; + private final UiEventLogger mUiEventLogger; + private Rect mClippingBounds = new Rect(); - public HeaderTileLayout(Context context) { + public HeaderTileLayout(Context context, UiEventLogger uiEventLogger) { super(context); + mUiEventLogger = uiEventLogger; setClipChildren(false); setClipToPadding(false); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, @@ -443,5 +462,18 @@ public class QuickQSPanel extends QSPanel { } return getPaddingStart() + column * (mCellWidth + mCellMarginHorizontal); } + + @Override + public void setListening(boolean listening) { + boolean startedListening = !mListening && listening; + super.setListening(listening); + if (startedListening) { + for (int i = 0; i < getNumVisibleTiles(); i++) { + QSTile tile = mRecords.get(i).tile; + mUiEventLogger.logWithInstanceId(QSEvent.QQS_TILE_VISIBLE, 0, + tile.getMetricsSpec(), tile.getInstanceId()); + } + } + } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 9f59277c918a..098431658e6a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -31,7 +31,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); private int mCellMarginTop; - private boolean mListening; + protected boolean mListening; protected int mMaxAllowedRows = 3; // Prototyping with less rows diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index bfac85bd4c10..3e2f9dec5807 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -44,6 +44,7 @@ import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.QSDetailClipper; +import com.android.systemui.qs.QSEditEvent; import com.android.systemui.qs.QSTileHost; import com.android.systemui.statusbar.phone.LightBarController; import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; @@ -93,7 +94,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene LightBarController lightBarController, KeyguardStateController keyguardStateController, ScreenLifecycle screenLifecycle, - TileQueryHelper tileQueryHelper) { + TileQueryHelper tileQueryHelper, + UiEventLogger uiEventLogger) { super(new ContextThemeWrapper(context, R.style.edit_theme), attrs); LayoutInflater.from(getContext()).inflate(R.layout.qs_customize_panel_content, this); @@ -115,7 +117,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene mToolbar.setTitle(R.string.qs_edit); mRecyclerView = findViewById(android.R.id.list); mTransparentView = findViewById(R.id.customizer_transparent_view); - mTileAdapter = new TileAdapter(getContext()); + mTileAdapter = new TileAdapter(getContext(), uiEventLogger); mTileQueryHelper = tileQueryHelper; mTileQueryHelper.setListener(mTileAdapter); mRecyclerView.setAdapter(mTileAdapter); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt b/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt deleted file mode 100644 index ff8ddec8397a..000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSEditEvent.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.qs.customize - -import com.android.internal.logging.UiEvent -import com.android.internal.logging.UiEventLogger - -enum class QSEditEvent(private val _id: Int) : UiEventLogger.UiEventEnum { - - @UiEvent(doc = "Tile removed from current tiles") - QS_EDIT_REMOVE(210), - @UiEvent(doc = "Tile added to current tiles") - QS_EDIT_ADD(211), - @UiEvent(doc = "Tile moved") - QS_EDIT_MOVE(212), - @UiEvent(doc = "QS customizer open") - QS_EDIT_OPEN(213), - @UiEvent(doc = "QS customizer closed") - QS_EDIT_CLOSED(214), - @UiEvent(doc = "QS tiles reset") - QS_EDIT_RESET(215); - - override fun getId() = _id -}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index 58de95d7ed6d..e738cec4962a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -41,8 +41,8 @@ import androidx.recyclerview.widget.RecyclerView.State; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.android.internal.logging.UiEventLogger; -import com.android.internal.logging.UiEventLoggerImpl; import com.android.systemui.R; +import com.android.systemui.qs.QSEditEvent; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.customize.TileAdapter.Holder; import com.android.systemui.qs.customize.TileQueryHelper.TileInfo; @@ -92,10 +92,11 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private int mAccessibilityFromIndex; private CharSequence mAccessibilityFromLabel; private QSTileHost mHost; - private UiEventLogger mUiEventLogger = new UiEventLoggerImpl(); + private final UiEventLogger mUiEventLogger; - public TileAdapter(Context context) { + public TileAdapter(Context context, UiEventLogger uiEventLogger) { mContext = context; + mUiEventLogger = uiEventLogger; mAccessibilityManager = context.getSystemService(AccessibilityManager.class); mItemTouchHelper = new ItemTouchHelper(mCallbacks); mDecoration = new TileItemDecoration(context); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java index 08c8f86c1125..30e0a766de37 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -371,6 +371,11 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener return MetricsEvent.QS_CUSTOM; } + @Override + public final String getMetricsSpec() { + return mComponent.getPackageName(); + } + public void startUnlockAndRun() { Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> { try { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index 60f6647743d2..7e5f2e1961e1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -48,7 +48,9 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.InstanceId; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.Utils; @@ -62,6 +64,7 @@ import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile.State; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.PagedTileLayout.TilePage; +import com.android.systemui.qs.QSEvent; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QuickStatusBarHeader; import com.android.systemui.qs.logging.QSLogger; @@ -97,12 +100,14 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); private final StatusBarStateController mStatusBarStateController = Dependency.get(StatusBarStateController.class); + private final UiEventLogger mUiEventLogger; private final QSLogger mQSLogger; private final ArrayList<Callback> mCallbacks = new ArrayList<>(); private final Object mStaleListener = new Object(); protected TState mState; private TState mTmpState; + private final InstanceId mInstanceId; private boolean mAnnounceNextStateChange; private String mTileSpec; @@ -156,10 +161,12 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy protected QSTileImpl(QSHost host) { mHost = host; mContext = host.getContext(); + mInstanceId = host.getNewInstanceId(); mState = newTileState(); mTmpState = newTileState(); mQSSettingsPanelOption = QSSettingsControllerKt.getQSSettingsPanelOption(); mQSLogger = host.getQSLogger(); + mUiEventLogger = host.getUiEventLogger(); } protected final void resetStates() { @@ -173,6 +180,11 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy return mLifecycle; } + @Override + public InstanceId getInstanceId() { + return mInstanceId; + } + /** * Adds or removes a listening client for the tile. If the tile has one or more * listening client it will go into the listening state. @@ -247,6 +259,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy mMetricsLogger.write(populate(new LogMaker(ACTION_QS_CLICK).setType(TYPE_ACTION) .addTaggedData(FIELD_STATUS_BAR_STATE, mStatusBarStateController.getState()))); + mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_CLICK, 0, getMetricsSpec(), + getInstanceId()); mQSLogger.logTileClick(mTileSpec, mStatusBarStateController.getState(), mState.state); mHandler.sendEmptyMessage(H.CLICK); } @@ -255,6 +269,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy mMetricsLogger.write(populate(new LogMaker(ACTION_QS_SECONDARY_CLICK).setType(TYPE_ACTION) .addTaggedData(FIELD_STATUS_BAR_STATE, mStatusBarStateController.getState()))); + mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_SECONDARY_CLICK, 0, getMetricsSpec(), + getInstanceId()); mQSLogger.logTileSecondaryClick(mTileSpec, mStatusBarStateController.getState(), mState.state); mHandler.sendEmptyMessage(H.SECONDARY_CLICK); @@ -264,6 +280,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy mMetricsLogger.write(populate(new LogMaker(ACTION_QS_LONG_PRESS).setType(TYPE_ACTION) .addTaggedData(FIELD_STATUS_BAR_STATE, mStatusBarStateController.getState()))); + mUiEventLogger.logWithInstanceId(QSEvent.QS_ACTION_LONG_PRESS, 0, getMetricsSpec(), + getInstanceId()); mQSLogger.logTileLongClick(mTileSpec, mStatusBarStateController.getState(), mState.state); mHandler.sendEmptyMessage(H.LONG_CLICK); @@ -483,6 +501,11 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy } } + @Override + public String getMetricsSpec() { + return mTileSpec; + } + /** * Provides a default label for the tile. * @return default label for the tile. diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index 447f48b5db94..89ce125ae985 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -26,10 +26,12 @@ import android.view.View; import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.RestrictedLockUtils; import com.android.systemui.R; import com.android.systemui.qs.PseudoGridView; +import com.android.systemui.qs.QSUserSwitcherEvent; import com.android.systemui.statusbar.policy.UserSwitcherController; /** @@ -48,8 +50,9 @@ public class UserDetailView extends PseudoGridView { R.layout.qs_user_detail, parent, attach); } - public void createAndSetAdapter(UserSwitcherController controller) { - mAdapter = new Adapter(mContext, controller); + public void createAndSetAdapter(UserSwitcherController controller, + UiEventLogger uiEventLogger) { + mAdapter = new Adapter(mContext, controller, uiEventLogger); ViewGroupAdapterBridge.link(this, mAdapter); } @@ -63,11 +66,14 @@ public class UserDetailView extends PseudoGridView { private final Context mContext; protected UserSwitcherController mController; private View mCurrentUserView; + private final UiEventLogger mUiEventLogger; - public Adapter(Context context, UserSwitcherController controller) { + public Adapter(Context context, UserSwitcherController controller, + UiEventLogger uiEventLogger) { super(controller); mContext = context; mController = controller; + mUiEventLogger = uiEventLogger; } @Override @@ -127,6 +133,7 @@ public class UserDetailView extends PseudoGridView { mController.startActivity(intent); } else if (tag.isSwitchToEnabled) { MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER); + mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH); if (!tag.isAddUser && !tag.isRestricted && !tag.isDisabledByAdmin) { if (mCurrentUserView != null) { mCurrentUserView.setActivated(false); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index fdf2c34f9850..581422116c8f 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -68,6 +68,7 @@ import android.view.ViewGroup; import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.view.WindowManager; +import android.view.animation.AccelerateInterpolator; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.FrameLayout; @@ -165,11 +166,16 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset private static final long SCREENSHOT_TO_CORNER_SCALE_DURATION_MS = 234; private static final long SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS = 400; private static final long SCREENSHOT_ACTIONS_ALPHA_DURATION_MS = 100; + private static final long SCREENSHOT_DISMISS_Y_DURATION_MS = 350; + private static final long SCREENSHOT_DISMISS_ALPHA_DURATION_MS = 183; + private static final long SCREENSHOT_DISMISS_ALPHA_OFFSET_MS = 50; // delay before starting fade private static final float SCREENSHOT_ACTIONS_START_SCALE_X = .7f; private static final float ROUNDED_CORNER_RADIUS = .05f; private static final long SCREENSHOT_CORNER_TIMEOUT_MILLIS = 6000; private static final int MESSAGE_CORNER_TIMEOUT = 2; + private final Interpolator mAccelerateInterpolator = new AccelerateInterpolator(); + private final ScreenshotNotificationsController mNotificationsController; private final UiEventLogger mUiEventLogger; @@ -195,12 +201,14 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset private Animator mScreenshotAnimation; private Runnable mOnCompleteRunnable; private boolean mInDarkMode = false; + private Animator mDismissAnimation; private float mScreenshotOffsetXPx; private float mScreenshotOffsetYPx; private float mScreenshotHeightPx; private float mDismissButtonSize; private float mCornerSizeX; + private float mDismissDeltaY; private MediaActionSound mCameraSound; @@ -213,7 +221,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset switch (msg.what) { case MESSAGE_CORNER_TIMEOUT: mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_INTERACTION_TIMEOUT); - GlobalScreenshot.this.clearScreenshot("timeout"); + GlobalScreenshot.this.dismissScreenshot("timeout", false); mOnCompleteRunnable.run(); break; default: @@ -255,7 +263,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset mDismissButton = mScreenshotLayout.findViewById(R.id.global_screenshot_dismiss_button); mDismissButton.setOnClickListener(view -> { mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_EXPLICIT_DISMISSAL); - clearScreenshot("dismiss_button"); + dismissScreenshot("dismiss_button", false); mOnCompleteRunnable.run(); }); mDismissImage = mDismissButton.findViewById(R.id.global_screenshot_dismiss_image); @@ -294,6 +302,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset mDismissButtonSize = resources.getDimensionPixelSize( R.dimen.screenshot_dismiss_button_tappable_size); mCornerSizeX = resources.getDimensionPixelSize(R.dimen.global_screenshot_x_scale); + mDismissDeltaY = resources.getDimensionPixelSize(R.dimen.screenshot_dismissal_height_delta); mFastOutSlowIn = AnimationUtils.loadInterpolator(mContext, android.R.interpolator.fast_out_slow_in); @@ -354,6 +363,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset } private void takeScreenshot(Bitmap screenshot, Consumer<Uri> finisher, Rect screenRect) { + dismissScreenshot("new screenshot requested", true); + mScreenBitmap = screenshot; if (mScreenBitmap == null) { @@ -373,12 +384,15 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams); mScreenshotLayout.getViewTreeObserver().addOnComputeInternalInsetsListener(this); + if (mDismissAnimation != null && mDismissAnimation.isRunning()) { + mDismissAnimation.cancel(); + } // Start the post-screenshot animation startAnimation(finisher, screenRect.width(), screenRect.height(), screenRect); } void takeScreenshot(Consumer<Uri> finisher, Runnable onComplete) { - clearScreenshot("new screenshot requested"); + dismissScreenshot("new screenshot requested", true); mOnCompleteRunnable = onComplete; mDisplay.getRealMetrics(mDisplayMetrics); @@ -390,9 +404,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset void handleImageAsScreenshot(Bitmap screenshot, Rect screenshotScreenBounds, Insets visibleInsets, int taskId, Consumer<Uri> finisher, Runnable onComplete) { // TODO use taskId and visibleInsets - clearScreenshot("new screenshot requested"); + dismissScreenshot("new screenshot requested", true); mOnCompleteRunnable = onComplete; - takeScreenshot(screenshot, finisher, screenshotScreenBounds); } @@ -401,7 +414,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset */ @SuppressLint("ClickableViewAccessibility") void takeScreenshotPartial(final Consumer<Uri> finisher, Runnable onComplete) { - clearScreenshot("new screenshot requested"); + dismissScreenshot("new screenshot requested", true); mOnCompleteRunnable = onComplete; mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams); @@ -454,8 +467,24 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset /** * Clears current screenshot */ - private void clearScreenshot(String reason) { + private void dismissScreenshot(String reason, boolean immediate) { Log.v(TAG, "clearing screenshot: " + reason); + if (!immediate) { + mDismissAnimation = createScreenshotDismissAnimation(); + mDismissAnimation.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + clearScreenshot(); + } + }); + mDismissAnimation.start(); + } else { + clearScreenshot(); + } + } + + private void clearScreenshot() { if (mScreenshotLayout.isAttachedToWindow()) { mWindowManager.removeView(mScreenshotLayout); } @@ -472,10 +501,15 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset mScreenshotView.setLayerType(View.LAYER_TYPE_NONE, null); mScreenshotView.setContentDescription( mContext.getResources().getString(R.string.screenshot_preview_description)); + mScreenshotLayout.setAlpha(1); + mDismissButton.setTranslationY(0); + mActionsContainer.setTranslationY(0); + mScreenshotView.setTranslationY(0); } /** - * Update assets (called when the dark theme status changes). We only need to update the dismiss + * Update assets (called when the dark theme status changes). We only need to update the + * dismiss * button and the actions container background, since the buttons are re-inflated on demand. */ private void reloadAssets() { @@ -514,13 +548,17 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset */ private void startAnimation(final Consumer<Uri> finisher, int w, int h, @Nullable Rect screenRect) { - // If power save is on, show a toast so there is some visual indication that a screenshot + // If power save is on, show a toast so there is some visual indication that a + // screenshot // has been taken. - PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + PowerManager powerManager = (PowerManager) mContext.getSystemService( + Context.POWER_SERVICE); if (powerManager.isPowerSaveMode()) { - Toast.makeText(mContext, R.string.screenshot_saved_title, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, R.string.screenshot_saved_title, + Toast.LENGTH_SHORT).show(); } + // Add the view for the animation mScreenshotView.setImageBitmap(mScreenBitmap); @@ -550,12 +588,12 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset } else { createScreenshotActionsShadeAnimation(imageData).start(); } + mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT); + mScreenshotHandler.sendMessageDelayed( + mScreenshotHandler.obtainMessage(MESSAGE_CORNER_TIMEOUT), + SCREENSHOT_CORNER_TIMEOUT_MILLIS); }); } - mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT); - mScreenshotHandler.sendMessageDelayed( - mScreenshotHandler.obtainMessage(MESSAGE_CORNER_TIMEOUT), - SCREENSHOT_CORNER_TIMEOUT_MILLIS); } }); mScreenshotHandler.post(() -> { @@ -586,14 +624,16 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset final PointF startPos = new PointF(bounds.centerX(), bounds.centerY()); final PointF finalPos = new PointF(mScreenshotOffsetXPx + width * cornerScale / 2f, - mDisplayMetrics.heightPixels - mScreenshotOffsetYPx - height * cornerScale / 2f); + mDisplayMetrics.heightPixels - mScreenshotOffsetYPx + - height * cornerScale / 2f); ValueAnimator toCorner = ValueAnimator.ofFloat(0, 1); toCorner.setDuration(SCREENSHOT_TO_CORNER_Y_DURATION_MS); float xPositionPct = SCREENSHOT_TO_CORNER_X_DURATION_MS / (float) SCREENSHOT_TO_CORNER_Y_DURATION_MS; float scalePct = - SCREENSHOT_TO_CORNER_SCALE_DURATION_MS / (float) SCREENSHOT_TO_CORNER_Y_DURATION_MS; + SCREENSHOT_TO_CORNER_SCALE_DURATION_MS + / (float) SCREENSHOT_TO_CORNER_Y_DURATION_MS; toCorner.addUpdateListener(animation -> { float t = animation.getAnimatedFraction(); if (t < scalePct) { @@ -676,7 +716,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset actionChip.setPendingIntent(smartAction.actionIntent, () -> { mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_SMART_ACTION_TAPPED); - clearScreenshot("chip tapped"); + dismissScreenshot("chip tapped", false); mOnCompleteRunnable.run(); }); mActionsView.addView(actionChip); @@ -689,7 +729,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset shareChip.setIcon(imageData.shareAction.getIcon(), true); shareChip.setPendingIntent(imageData.shareAction.actionIntent, () -> { mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_SHARE_TAPPED); - clearScreenshot("chip tapped"); + dismissScreenshot("chip tapped", false); mOnCompleteRunnable.run(); }); mActionsView.addView(shareChip); @@ -701,7 +741,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset editChip.setIcon(imageData.editAction.getIcon(), true); editChip.setPendingIntent(imageData.editAction.actionIntent, () -> { mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_EDIT_TAPPED); - clearScreenshot("chip tapped"); + dismissScreenshot("chip tapped", false); mOnCompleteRunnable.run(); }); mActionsView.addView(editChip); @@ -711,7 +751,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset try { imageData.editAction.actionIntent.send(); mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_PREVIEW_TAPPED); - clearScreenshot("screenshot preview tapped"); + dismissScreenshot("screenshot preview tapped", false); mOnCompleteRunnable.run(); } catch (PendingIntent.CanceledException e) { Log.e(TAG, "Intent cancelled", e); @@ -757,6 +797,32 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset return animator; } + private AnimatorSet createScreenshotDismissAnimation() { + ValueAnimator alphaAnim = ValueAnimator.ofFloat(0, 1); + alphaAnim.setStartDelay(SCREENSHOT_DISMISS_ALPHA_OFFSET_MS); + alphaAnim.setDuration(SCREENSHOT_DISMISS_ALPHA_DURATION_MS); + alphaAnim.addUpdateListener(animation -> { + mScreenshotLayout.setAlpha(1 - animation.getAnimatedFraction()); + }); + + ValueAnimator yAnim = ValueAnimator.ofFloat(0, 1); + yAnim.setInterpolator(mAccelerateInterpolator); + yAnim.setDuration(SCREENSHOT_DISMISS_Y_DURATION_MS); + float screenshotStartY = mScreenshotView.getTranslationY(); + float dismissStartY = mDismissButton.getTranslationY(); + yAnim.addUpdateListener(animation -> { + float yDelta = MathUtils.lerp(0, mDismissDeltaY, animation.getAnimatedFraction()); + mScreenshotView.setTranslationY(screenshotStartY + yDelta); + mDismissButton.setTranslationY(dismissStartY + yDelta); + mActionsContainer.setTranslationY(yDelta); + }); + + AnimatorSet animSet = new AnimatorSet(); + animSet.play(yAnim).with(alphaAnim); + + return animSet; + } + /** * Receiver to proxy the share or edit intent, used to clean up the notification and send * appropriate signals to the system (ie. to dismiss the keyguard if necessary). @@ -802,7 +868,8 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset } if (intent.getBooleanExtra(EXTRA_SMART_ACTIONS_ENABLED, false)) { - String actionType = Intent.ACTION_EDIT.equals(intent.getAction()) ? ACTION_TYPE_EDIT + String actionType = Intent.ACTION_EDIT.equals(intent.getAction()) + ? ACTION_TYPE_EDIT : ACTION_TYPE_SHARE; ScreenshotSmartActions.notifyScreenshotAction( context, intent.getStringExtra(EXTRA_ID), actionType, false); diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index f36f8c131848..555202a2b02c 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -36,7 +36,6 @@ import android.provider.Settings; import android.util.Slog; import android.view.LayoutInflater; import android.view.SurfaceControl; -import android.view.SurfaceSession; import android.view.View; import android.window.TaskOrganizer; import android.window.WindowContainerToken; @@ -94,7 +93,6 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, private boolean mHomeStackResizable = false; private ForcedResizableInfoActivityController mForcedResizableController; private SystemWindows mSystemWindows; - final SurfaceSession mSurfaceSession = new SurfaceSession(); private DisplayController mDisplayController; private DisplayImeController mImeController; final TransactionPool mTransactionPool; @@ -263,11 +261,25 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, wct.setScreenSizeDp(mSplits.mSecondary.token, mSplits.mSecondary.configuration.screenWidthDp, mSplits.mSecondary.configuration.screenHeightDp); + + wct.setBounds(mSplits.mPrimary.token, mSplitLayout.mAdjustedPrimary); + adjustAppBounds = new Rect(mSplits.mPrimary.configuration + .windowConfiguration.getAppBounds()); + adjustAppBounds.offset(0, mSplitLayout.mAdjustedPrimary.top + - mSplitLayout.mPrimary.top); + wct.setAppBounds(mSplits.mPrimary.token, adjustAppBounds); + wct.setScreenSizeDp(mSplits.mPrimary.token, + mSplits.mPrimary.configuration.screenWidthDp, + mSplits.mPrimary.configuration.screenHeightDp); } else { wct.setBounds(mSplits.mSecondary.token, mSplitLayout.mSecondary); wct.setAppBounds(mSplits.mSecondary.token, null); wct.setScreenSizeDp(mSplits.mSecondary.token, SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED); + wct.setBounds(mSplits.mPrimary.token, mSplitLayout.mPrimary); + wct.setAppBounds(mSplits.mPrimary.token, null); + wct.setScreenSizeDp(mSplits.mPrimary.token, + SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED); } WindowOrganizer.applyTransaction(wct); @@ -493,7 +505,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, return; } try { - mSplits.init(mSurfaceSession); + mSplits.init(); // Set starting tile bounds based on middle target final WindowContainerTransaction tct = new WindowContainerTransaction(); int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position; @@ -505,7 +517,6 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, return; } ActivityManagerWrapper.getInstance().registerTaskStackListener(mActivityRestartListener); - update(mDisplayController.getDisplayContext(displayId).getResources().getConfiguration()); } @Override @@ -574,14 +585,29 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } private void update(Configuration configuration) { + final boolean isDividerHidden = mView != null && mView.isHidden(); + removeDivider(); addDivider(configuration); - if (mMinimized && mView != null) { - mView.setMinimizedDockStack(true, mHomeStackResizable); - updateTouchable(); + + if (mView != null) { + if (mMinimized) { + mView.setMinimizedDockStack(true, mHomeStackResizable); + updateTouchable(); + } + mView.setHidden(isDividerHidden); } } + void onTaskVanished() { + mHandler.post(this::removeDivider); + } + + void onTasksReady() { + mHandler.post(() -> update(mDisplayController.getDisplayContext( + mContext.getDisplayId()).getResources().getConfiguration())); + } + void updateVisibility(final boolean visible) { if (DEBUG) Slog.d(TAG, "Updating visibility " + mVisible + "->" + visible); if (mVisible != visible) { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java index f5d6cb6fd4b0..717edc591d7f 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java @@ -47,39 +47,27 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { final Divider mDivider; private boolean mSplitScreenSupported = false; + final SurfaceSession mSurfaceSession = new SurfaceSession(); + SplitScreenTaskOrganizer(Divider divider) { mDivider = divider; } - void init(SurfaceSession session) throws RemoteException { + void init() throws RemoteException { registerOrganizer(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); registerOrganizer(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); - try { - mPrimary = TaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, - WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); - mSecondary = TaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, - WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); - mPrimarySurface = mPrimary.token.getLeash(); - mSecondarySurface = mSecondary.token.getLeash(); - } catch (Exception e) { - // teardown to prevent callbacks - unregisterOrganizer(); - throw e; + synchronized (this) { + try { + mPrimary = TaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, + WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + mSecondary = TaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, + WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); + } catch (Exception e) { + // teardown to prevent callbacks + unregisterOrganizer(); + throw e; + } } - mSplitScreenSupported = true; - - // Initialize dim surfaces: - mPrimaryDim = new SurfaceControl.Builder(session).setParent(mPrimarySurface) - .setColorLayer().setName("Primary Divider Dim").build(); - mSecondaryDim = new SurfaceControl.Builder(session).setParent(mSecondarySurface) - .setColorLayer().setName("Secondary Divider Dim").build(); - SurfaceControl.Transaction t = getTransaction(); - t.setLayer(mPrimaryDim, Integer.MAX_VALUE); - t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f}); - t.setLayer(mSecondaryDim, Integer.MAX_VALUE); - t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f}); - t.apply(); - releaseTransaction(t); } boolean isSplitScreenSupported() { @@ -95,6 +83,67 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { } @Override + public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { + synchronized (this) { + if (mPrimary == null || mSecondary == null) { + Log.w(TAG, "Received onTaskAppeared before creating root tasks " + taskInfo); + return; + } + + if (taskInfo.token.equals(mPrimary.token)) { + mPrimarySurface = leash; + } else if (taskInfo.token.equals(mSecondary.token)) { + mSecondarySurface = leash; + } + + if (!mSplitScreenSupported && mPrimarySurface != null && mSecondarySurface != null) { + mSplitScreenSupported = true; + + // Initialize dim surfaces: + mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession) + .setParent(mPrimarySurface).setColorLayer() + .setName("Primary Divider Dim").build(); + mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession) + .setParent(mSecondarySurface).setColorLayer() + .setName("Secondary Divider Dim").build(); + SurfaceControl.Transaction t = getTransaction(); + t.setLayer(mPrimaryDim, Integer.MAX_VALUE); + t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f}); + t.setLayer(mSecondaryDim, Integer.MAX_VALUE); + t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f}); + t.apply(); + releaseTransaction(t); + + mDivider.onTasksReady(); + } + } + } + + @Override + public void onTaskVanished(RunningTaskInfo taskInfo) { + synchronized (this) { + final boolean isPrimaryTask = mPrimary != null + && taskInfo.token.equals(mPrimary.token); + final boolean isSecondaryTask = mSecondary != null + && taskInfo.token.equals(mSecondary.token); + + if (mSplitScreenSupported && (isPrimaryTask || isSecondaryTask)) { + mSplitScreenSupported = false; + + SurfaceControl.Transaction t = getTransaction(); + t.remove(mPrimaryDim); + t.remove(mSecondaryDim); + t.remove(mPrimarySurface); + t.remove(mSecondarySurface); + t.apply(); + releaseTransaction(t); + + mDivider.onTaskVanished(); + } + } + } + + @Override public void onTaskInfoChanged(RunningTaskInfo taskInfo) { if (taskInfo.displayId != DEFAULT_DISPLAY) { return; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index 866980458cad..c70d3847bd6f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -38,8 +38,8 @@ open class BlurUtils @Inject constructor( @Main private val resources: Resources, dumpManager: DumpManager ) : Dumpable { - private val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) - private val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) + val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) + val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) private val blurSupportedSysProp = SystemProperties .getBoolean("ro.surface_flinger.supports_background_blur", false) private val blurDisabledSysProp = SystemProperties diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index 25f1a974bc36..7aae724ae80a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -20,7 +20,9 @@ import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.app.WallpaperManager +import android.os.SystemClock import android.util.Log +import android.util.MathUtils import android.view.Choreographer import android.view.View import androidx.annotation.VisibleForTesting @@ -44,6 +46,7 @@ import java.io.PrintWriter import javax.inject.Inject import javax.inject.Singleton import kotlin.math.max +import kotlin.math.sign /** * Controller responsible for statusbar window blur. @@ -61,6 +64,11 @@ class NotificationShadeDepthController @Inject constructor( ) : PanelExpansionListener, Dumpable { companion object { private const val WAKE_UP_ANIMATION_ENABLED = true + private const val VELOCITY_SCALE = 100f + private const val MAX_VELOCITY = 3000f + private const val MIN_VELOCITY = -MAX_VELOCITY + private const val INTERACTION_BLUR_FRACTION = 0.4f + private const val ANIMATION_BLUR_FRACTION = 1f - INTERACTION_BLUR_FRACTION private const val TAG = "DepthController" } @@ -71,8 +79,19 @@ class NotificationShadeDepthController @Inject constructor( private var updateScheduled: Boolean = false private var shadeExpansion = 0f private var ignoreShadeBlurUntilHidden: Boolean = false + private var isClosed: Boolean = true + private var isOpen: Boolean = false + private var isBlurred: Boolean = false + + private var prevTracking: Boolean = false + private var prevTimestamp: Long = -1 + private var prevShadeDirection = 0 + private var prevShadeVelocity = 0f + @VisibleForTesting var shadeSpring = DepthAnimation() + var shadeAnimation = DepthAnimation() + @VisibleForTesting var globalActionsSpring = DepthAnimation() var showingHomeControls: Boolean = false @@ -98,12 +117,15 @@ class NotificationShadeDepthController @Inject constructor( return } - if (shadeSpring.radius == 0) { + if (shadeSpring.radius == 0 && shadeAnimation.radius == 0) { return } ignoreShadeBlurUntilHidden = true shadeSpring.animateTo(0) shadeSpring.finishIfRunning() + + shadeAnimation.animateTo(0) + shadeAnimation.finishIfRunning() } /** @@ -132,8 +154,11 @@ class NotificationShadeDepthController @Inject constructor( @VisibleForTesting val updateBlurCallback = Choreographer.FrameCallback { updateScheduled = false - - var shadeRadius = max(shadeSpring.radius, wakeAndUnlockBlurRadius).toFloat() + val normalizedBlurRadius = MathUtils.constrain(shadeAnimation.radius, + blurUtils.minBlurRadius, blurUtils.maxBlurRadius) + val combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION + + normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt() + var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat() shadeRadius *= 1f - brightnessMirrorSpring.ratio val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f shadeRadius *= (1f - launchProgress) * (1f - launchProgress) @@ -208,12 +233,15 @@ class NotificationShadeDepthController @Inject constructor( private val statusBarStateCallback = object : StatusBarStateController.StateListener { override fun onStateChanged(newState: Int) { + updateShadeAnimationBlur( + shadeExpansion, prevTracking, prevShadeVelocity, prevShadeDirection) updateShadeBlur() } override fun onDozingChanged(isDozing: Boolean) { if (isDozing) { shadeSpring.finishIfRunning() + shadeAnimation.finishIfRunning() globalActionsSpring.finishIfRunning() brightnessMirrorSpring.finishIfRunning() } @@ -234,24 +262,110 @@ class NotificationShadeDepthController @Inject constructor( // Stop blur effect when scrims is opaque to avoid unnecessary GPU composition. visibility -> scrimsVisible = visibility == ScrimController.OPAQUE } + shadeAnimation.setStiffness(SpringForce.STIFFNESS_LOW) + shadeAnimation.setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY) } /** * Update blurs when pulling down the shade */ override fun onPanelExpansionChanged(expansion: Float, tracking: Boolean) { - if (expansion == shadeExpansion) { + val timestamp = SystemClock.elapsedRealtimeNanos() + + if (shadeExpansion == expansion && prevTracking == tracking) { + prevTimestamp = timestamp return } + + var deltaTime = 1f + if (prevTimestamp < 0) { + prevTimestamp = timestamp + } else { + deltaTime = MathUtils.constrain( + ((timestamp - prevTimestamp) / 1E9).toFloat(), 0.00001f, 1f) + } + + val diff = expansion - shadeExpansion + val shadeDirection = sign(diff).toInt() + val shadeVelocity = MathUtils.constrain( + VELOCITY_SCALE * diff / deltaTime, MIN_VELOCITY, MAX_VELOCITY) + updateShadeAnimationBlur(expansion, tracking, shadeVelocity, shadeDirection) + + prevShadeDirection = shadeDirection + prevShadeVelocity = shadeVelocity shadeExpansion = expansion + prevTracking = tracking + prevTimestamp = timestamp + updateShadeBlur() } + private fun updateShadeAnimationBlur( + expansion: Float, + tracking: Boolean, + velocity: Float, + direction: Int + ) { + if (isOnKeyguardNotDismissing()) { + if (expansion > 0f) { + // Blur view if user starts animating in the shade. + if (isClosed) { + animateBlur(true, velocity) + isClosed = false + } + + // If we were blurring out and the user stopped the animation, blur view. + if (tracking && !isBlurred) { + animateBlur(true, 0f) + } + + // If shade is being closed and the user isn't interacting with it, un-blur. + if (!tracking && direction < 0 && isBlurred) { + animateBlur(false, velocity) + } + + if (expansion == 1f) { + if (!isOpen) { + isOpen = true + // If shade is open and view is not blurred, blur. + if (!isBlurred) { + animateBlur(true, velocity) + } + } + } else { + isOpen = false + } + // Automatic animation when the user closes the shade. + } else if (!isClosed) { + isClosed = true + // If shade is closed and view is not blurred, blur. + if (isBlurred) { + animateBlur(false, velocity) + } + } + } else { + animateBlur(false, 0f) + isClosed = true + isOpen = false + } + } + + private fun animateBlur(blur: Boolean, velocity: Float) { + isBlurred = blur + + val targetBlurNormalized = if (blur && isOnKeyguardNotDismissing()) { + 1f + } else { + 0f + } + + shadeAnimation.setStartVelocity(velocity) + shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized)) + } + private fun updateShadeBlur() { var newBlur = 0 - val state = statusBarStateController.state - if ((state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && - !keyguardStateController.isKeyguardFadingAway) { + if (isOnKeyguardNotDismissing()) { newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion) } shadeSpring.animateTo(newBlur) @@ -266,6 +380,12 @@ class NotificationShadeDepthController @Inject constructor( choreographer.postFrameCallback(updateBlurCallback) } + private fun isOnKeyguardNotDismissing(): Boolean { + val state = statusBarStateController.state + return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && + !keyguardStateController.isKeyguardFadingAway + } + fun updateGlobalDialogVisibility(visibility: Float, dialogView: View?) { globalActionsSpring.animateTo(blurUtils.blurRadiusOfRatio(visibility), dialogView) } @@ -275,6 +395,7 @@ class NotificationShadeDepthController @Inject constructor( it.println("StatusBarWindowBlurController:") it.increaseIndent() it.println("shadeRadius: ${shadeSpring.radius}") + it.println("shadeAnimation: ${shadeAnimation.radius}") it.println("globalActionsRadius: ${globalActionsSpring.radius}") it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}") it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius") @@ -311,7 +432,7 @@ class NotificationShadeDepthController @Inject constructor( private var view: View? = null private var springAnimation = SpringAnimation(this, object : - FloatPropertyCompat<DepthAnimation>("blurRadius") { + FloatPropertyCompat<DepthAnimation>("blurRadius") { override fun setValue(rect: DepthAnimation?, value: Float) { radius = value.toInt() scheduleUpdate(view) @@ -343,5 +464,17 @@ class NotificationShadeDepthController @Inject constructor( springAnimation.skipToEnd() } } + + fun setStiffness(stiffness: Float) { + springAnimation.spring.stiffness = stiffness + } + + fun setDampingRatio(dampingRation: Float) { + springAnimation.spring.dampingRatio = dampingRation + } + + fun setStartVelocity(velocity: Float) { + springAnimation.setStartVelocity(velocity) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java index 02c41e5aaefe..8fcc67a0708e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java @@ -61,7 +61,7 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle private final Handler mHandler; - /** Re-usable map of notifications to their sorted children.*/ + /** Re-usable map of top-level notifications to their sorted children if any.*/ private final HashMap<NotificationEntry, List<NotificationEntry>> mTmpChildOrderMap = new HashMap<>(); @@ -211,6 +211,8 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle } orderedChildren.add(ent); } else { + // Top-level notif + mTmpChildOrderMap.put(ent, null); toShow.add(ent.getRow()); } } @@ -288,7 +290,7 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle } - mDynamicChildBindController.updateChildContentViews(mTmpChildOrderMap); + mDynamicChildBindController.updateContentViews(mTmpChildOrderMap); mVisualStabilityManager.onReorderingFinished(); // clear the map again for the next usage mTmpChildOrderMap.clear(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index e81e5cae5bfc..229aa6d98e0a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -24,6 +24,7 @@ import android.util.Log; import android.view.animation.Interpolator; import com.android.internal.annotations.GuardedBy; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; import com.android.systemui.Interpolators; @@ -69,6 +70,7 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll }; private final ArrayList<RankedListener> mListeners = new ArrayList<>(); + private final UiEventLogger mUiEventLogger; private int mState; private int mLastState; private boolean mLeaveOpenOnKeyguardHide; @@ -119,7 +121,8 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll private Interpolator mDozeInterpolator = Interpolators.FAST_OUT_SLOW_IN; @Inject - public StatusBarStateControllerImpl() { + public StatusBarStateControllerImpl(UiEventLogger uiEventLogger) { + mUiEventLogger = uiEventLogger; for (int i = 0; i < HISTORY_SIZE; i++) { mHistoricalRecords[i] = new HistoricalState(); } @@ -155,6 +158,7 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll } mLastState = mState; mState = state; + mUiEventLogger.log(StatusBarStateEvent.fromState(mState)); for (RankedListener rl : new ArrayList<>(mListeners)) { rl.mListener.onStateChanged(mState); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java new file mode 100644 index 000000000000..8330169980d4 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateEvent.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; + +/** + * Events for changes in the {@link StatusBarState}. + */ +public enum StatusBarStateEvent implements UiEventLogger.UiEventEnum { + + @UiEvent(doc = "StatusBarState changed to unknown state") + STATUS_BAR_STATE_UNKNOWN(428), + + @UiEvent(doc = "StatusBarState changed to SHADE state") + STATUS_BAR_STATE_SHADE(429), + + @UiEvent(doc = "StatusBarState changed to KEYGUARD state") + STATUS_BAR_STATE_KEYGUARD(430), + + @UiEvent(doc = "StatusBarState changed to SHADE_LOCKED state") + STATUS_BAR_STATE_SHADE_LOCKED(431), + + @UiEvent(doc = "StatusBarState changed to FULLSCREEN_USER_SWITCHER state") + STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER(432); + + private int mId; + StatusBarStateEvent(int id) { + mId = id; + } + + @Override + public int getId() { + return mId; + } + + /** + * Return the event associated with the state. + */ + public static StatusBarStateEvent fromState(int state) { + switch(state) { + case StatusBarState.SHADE: + return STATUS_BAR_STATE_SHADE; + case StatusBarState.KEYGUARD: + return STATUS_BAR_STATE_KEYGUARD; + case StatusBarState.SHADE_LOCKED: + return STATUS_BAR_STATE_SHADE_LOCKED; + case StatusBarState.FULLSCREEN_USER_SWITCHER: + return STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER; + default: + return STATUS_BAR_STATE_UNKNOWN; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java index 148cdea92052..57b41f36e51f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java @@ -63,44 +63,52 @@ public class DynamicChildBindController { } /** - * Update the child content views, unbinding content views on children that won't be visible - * and binding content views on children that will be visible eventually. + * Update the content views, unbinding content views on children that won't be visible + * and binding content views on children that will be visible eventually and previously unbound + * children that are no longer children. * - * @param groupNotifs map of notification summaries to their children + * @param groupNotifs map of top-level notifs to their children, if any */ - public void updateChildContentViews( + public void updateContentViews( Map<NotificationEntry, List<NotificationEntry>> groupNotifs) { for (NotificationEntry entry : groupNotifs.keySet()) { List<NotificationEntry> children = groupNotifs.get(entry); + if (children == null) { + if (!hasContent(entry)) { + // Case where child is updated to be top level + bindContent(entry); + } + continue; + } for (int j = 0; j < children.size(); j++) { NotificationEntry childEntry = children.get(j); if (j >= mChildBindCutoff) { - if (hasChildContent(childEntry)) { - freeChildContent(childEntry); + if (hasContent(childEntry)) { + freeContent(childEntry); } } else { - if (!hasChildContent(childEntry)) { - bindChildContent(childEntry); + if (!hasContent(childEntry)) { + bindContent(childEntry); } } } } } - private boolean hasChildContent(NotificationEntry entry) { + private boolean hasContent(NotificationEntry entry) { ExpandableNotificationRow row = entry.getRow(); return row.getPrivateLayout().getContractedChild() != null || row.getPrivateLayout().getExpandedChild() != null; } - private void freeChildContent(NotificationEntry entry) { + private void freeContent(NotificationEntry entry) { RowContentBindParams params = mStage.getStageParams(entry); params.markContentViewsFreeable(FLAG_CONTENT_VIEW_CONTRACTED); params.markContentViewsFreeable(FLAG_CONTENT_VIEW_EXPANDED); mStage.requestRebind(entry, null); } - private void bindChildContent(NotificationEntry entry) { + private void bindContent(NotificationEntry entry) { RowContentBindParams params = mStage.getStageParams(entry); params.requireContentViews(FLAG_CONTENT_VIEW_CONTRACTED); params.requireContentViews(FLAG_CONTENT_VIEW_EXPANDED); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java index a0b144b4497c..2ab329e9574c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java @@ -54,9 +54,14 @@ public class DynamicPrivacyController implements KeyguardStateController.Callbac } @Override + public void onKeyguardFadingAwayChanged() { + onUnlockedChanged(); + } + + @Override public void onUnlockedChanged() { if (isDynamicPrivacyEnabled()) { - // We only want to notify our listeners if dynamic privacy is actually active + // We only want to notify our listeners if dynamic privacy is actually enabled boolean dynamicallyUnlocked = isDynamicallyUnlocked(); if (dynamicallyUnlocked != mLastDynamicUnlocked || mCacheInvalid) { mLastDynamicUnlocked = dynamicallyUnlocked; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java index ba1b23bd80ed..5748c4aa0b13 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java @@ -33,6 +33,8 @@ public interface NotificationActivityStarter { void startNotificationGutsIntent(Intent intent, int appUid, ExpandableNotificationRow row); + void startHistoryIntent(boolean showHistory); + default boolean isCollapsingToShowActivityOverLockscreen() { return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index 78ee5f25b111..1dbfa32cdf41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -24,8 +24,6 @@ import android.os.Handler; import android.view.accessibility.AccessibilityManager; import com.android.internal.logging.MetricsLogger; -import com.android.internal.logging.UiEventLogger; -import com.android.internal.logging.UiEventLoggerImpl; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; @@ -161,13 +159,6 @@ public interface NotificationsModule { return new NotificationPanelLoggerImpl(); } - /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ - @Singleton - @Provides - static UiEventLogger provideUiEventLogger() { - return new UiEventLoggerImpl(); - } - /** Provides an instance of {@link NotificationBlockingHelperManager} */ @Singleton @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java index 324bc923fb35..fefad531377f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java @@ -336,6 +336,14 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter return false; } } + + if (entry.hasJustLaunchedFullScreenIntent()) { + if (DEBUG_HEADS_UP) { + Log.d(TAG, "No alerting: recent fullscreen: " + sbn.getKey()); + } + return false; + } + return true; } @@ -365,13 +373,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter return false; } - if (entry.hasJustLaunchedFullScreenIntent()) { - if (DEBUG_HEADS_UP) { - Log.d(TAG, "No alerting: recent fullscreen: " + sbn.getKey()); - } - return false; - } - return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index f8844c715230..2e5af9a7414a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -1680,7 +1680,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView public void reset() { mShowingPublicInitialized = false; unDismiss(); - resetTranslation(); + if (mMenuRow == null || !mMenuRow.isMenuVisible()) { + resetTranslation(); + } onHeightReset(); requestLayout(); } @@ -1838,10 +1840,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } public void resetTranslation() { - if (mMenuRow != null && mMenuRow.isMenuVisible()) { - return; - } - if (mTranslateAnim != null) { mTranslateAnim.cancel(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java index 32477a6f39b7..9e70f0ac29d5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java @@ -72,6 +72,7 @@ public class HybridConversationNotificationView extends HybridNotificationView { mFacePileProtectionWidth = getResources().getDimensionPixelSize( R.dimen.conversation_single_line_face_pile_protection_width); mTransformationHelper.addViewTransformingToSimilar(mConversationIconView); + mTransformationHelper.addTransformedView(mConversationSenderName); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java index 9c7de2bbf2ae..75affdf20364 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java @@ -437,7 +437,6 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx guts.resetFalsingCheck(); mOnSettingsClickListener.onSettingsClick(sbn.getKey()); startAppNotificationSettingsActivity(packageName, appUid, channel, row); - notificationInfoView.closeControls(v, false); }; } ConversationIconFactory iconFactoryLoader = new ConversationIconFactory(mContext, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java index c4a720cb659f..09ab1d89473e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java @@ -23,6 +23,7 @@ import android.view.View; import android.view.ViewGroup; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.VisibilityLocationProvider; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.SimpleNotificationListContainer; @@ -194,4 +195,6 @@ public interface NotificationListContainer extends ExpandableView.OnHeightChange * @param v the item to remove */ void removeListItem(@NonNull NotificationListItem v); + + void setNotificationActivityStarter(NotificationActivityStarter notificationActivityStarter); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 9e19c70abf24..7093dd8b39e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -29,6 +29,7 @@ import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEX import static java.lang.annotation.RetentionPolicy.SOURCE; +import android.app.TaskStackBuilder; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.TimeAnimator; @@ -50,6 +51,7 @@ import android.graphics.PointF; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.os.AsyncTask; import android.os.Bundle; import android.os.ServiceManager; import android.provider.Settings; @@ -117,6 +119,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.FakeShadowView; import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationUtils; @@ -255,6 +258,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd private final AmbientState mAmbientState; private NotificationGroupManager mGroupManager; + private NotificationActivityStarter mNotificationActivityStarter; private HashSet<ExpandableView> mChildrenToAddAnimated = new HashSet<>(); private ArrayList<View> mAddedHeadsUpChildren = new ArrayList<>(); private ArrayList<ExpandableView> mChildrenToRemoveAnimated = new ArrayList<>(); @@ -5699,6 +5703,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } } + @Override + public void setNotificationActivityStarter( + NotificationActivityStarter notificationActivityStarter) { + mNotificationActivityStarter = notificationActivityStarter; + } + @VisibleForTesting @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) protected void inflateFooterView() { @@ -5709,10 +5719,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd clearNotifications(ROWS_ALL, true /* closeShade */); }); footerView.setManageButtonClickListener(v -> { - Intent intent = footerView.isHistoryShown() ? new Intent( - Settings.ACTION_NOTIFICATION_HISTORY) : new Intent( - Settings.ACTION_NOTIFICATION_SETTINGS); - mStatusBar.startActivity(intent, true, true, Intent.FLAG_ACTIVITY_SINGLE_TOP); + mNotificationActivityStarter.startHistoryIntent(mFooterView.isHistoryShown()); }); setFooterView(footerView); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index 8c9bb6c75828..303a0831b52f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -29,6 +29,9 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.LatencyTracker; import com.android.keyguard.KeyguardConstants; @@ -50,6 +53,8 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.Map; +import java.util.Optional; import javax.inject.Inject; import javax.inject.Singleton; @@ -64,6 +69,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private static final boolean DEBUG_BIO_WAKELOCK = KeyguardConstants.DEBUG_BIOMETRIC_WAKELOCK; private static final long BIOMETRIC_WAKELOCK_TIMEOUT_MS = 15 * 1000; private static final String BIOMETRIC_WAKE_LOCK_NAME = "wake-and-unlock:wakelock"; + private static final UiEventLogger UI_EVENT_LOGGER = new UiEventLoggerImpl(); @IntDef(prefix = { "MODE_" }, value = { MODE_NONE, @@ -171,6 +177,68 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp } } + @VisibleForTesting + public enum BiometricUiEvent implements UiEventLogger.UiEventEnum { + + @UiEvent(doc = "A biometric event of type fingerprint succeeded.") + BIOMETRIC_FINGERPRINT_SUCCESS(396), + + @UiEvent(doc = "A biometric event of type fingerprint failed.") + BIOMETRIC_FINGERPRINT_FAILURE(397), + + @UiEvent(doc = "A biometric event of type fingerprint errored.") + BIOMETRIC_FINGERPRINT_ERROR(398), + + @UiEvent(doc = "A biometric event of type face unlock succeeded.") + BIOMETRIC_FACE_SUCCESS(399), + + @UiEvent(doc = "A biometric event of type face unlock failed.") + BIOMETRIC_FACE_FAILURE(400), + + @UiEvent(doc = "A biometric event of type face unlock errored.") + BIOMETRIC_FACE_ERROR(401), + + @UiEvent(doc = "A biometric event of type iris succeeded.") + BIOMETRIC_IRIS_SUCCESS(402), + + @UiEvent(doc = "A biometric event of type iris failed.") + BIOMETRIC_IRIS_FAILURE(403), + + @UiEvent(doc = "A biometric event of type iris errored.") + BIOMETRIC_IRIS_ERROR(404); + + private final int mId; + + BiometricUiEvent(int id) { + mId = id; + } + + @Override + public int getId() { + return mId; + } + + static final Map<BiometricSourceType, BiometricUiEvent> ERROR_EVENT_BY_SOURCE_TYPE = Map.of( + BiometricSourceType.FINGERPRINT, BiometricUiEvent.BIOMETRIC_FINGERPRINT_ERROR, + BiometricSourceType.FACE, BiometricUiEvent.BIOMETRIC_FACE_ERROR, + BiometricSourceType.IRIS, BiometricUiEvent.BIOMETRIC_IRIS_ERROR + ); + + static final Map<BiometricSourceType, BiometricUiEvent> SUCCESS_EVENT_BY_SOURCE_TYPE = + Map.of( + BiometricSourceType.FINGERPRINT, BiometricUiEvent.BIOMETRIC_FINGERPRINT_SUCCESS, + BiometricSourceType.FACE, BiometricUiEvent.BIOMETRIC_FACE_SUCCESS, + BiometricSourceType.IRIS, BiometricUiEvent.BIOMETRIC_IRIS_SUCCESS + ); + + static final Map<BiometricSourceType, BiometricUiEvent> FAILURE_EVENT_BY_SOURCE_TYPE = + Map.of( + BiometricSourceType.FINGERPRINT, BiometricUiEvent.BIOMETRIC_FINGERPRINT_FAILURE, + BiometricSourceType.FACE, BiometricUiEvent.BIOMETRIC_FACE_FAILURE, + BiometricSourceType.IRIS, BiometricUiEvent.BIOMETRIC_IRIS_FAILURE + ); + } + @Inject public BiometricUnlockController(Context context, DozeScrimController dozeScrimController, KeyguardViewMediator keyguardViewMediator, ScrimController scrimController, @@ -274,6 +342,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp } mMetricsLogger.write(new LogMaker(MetricsEvent.BIOMETRIC_AUTH) .setType(MetricsEvent.TYPE_SUCCESS).setSubtype(toSubtype(biometricSourceType))); + Optional.ofNullable(BiometricUiEvent.SUCCESS_EVENT_BY_SOURCE_TYPE.get(biometricSourceType)) + .ifPresent(UI_EVENT_LOGGER::log); + boolean unlockAllowed = mKeyguardBypassController.onBiometricAuthenticated( biometricSourceType, isStrongBiometric); if (unlockAllowed) { @@ -504,6 +575,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp public void onBiometricAuthFailed(BiometricSourceType biometricSourceType) { mMetricsLogger.write(new LogMaker(MetricsEvent.BIOMETRIC_AUTH) .setType(MetricsEvent.TYPE_FAILURE).setSubtype(toSubtype(biometricSourceType))); + Optional.ofNullable(BiometricUiEvent.FAILURE_EVENT_BY_SOURCE_TYPE.get(biometricSourceType)) + .ifPresent(UI_EVENT_LOGGER::log); cleanup(); } @@ -513,6 +586,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mMetricsLogger.write(new LogMaker(MetricsEvent.BIOMETRIC_AUTH) .setType(MetricsEvent.TYPE_ERROR).setSubtype(toSubtype(biometricSourceType)) .addTaggedData(MetricsEvent.FIELD_BIOMETRIC_AUTH_ERROR, msgId)); + Optional.ofNullable(BiometricUiEvent.ERROR_EVENT_BY_SOURCE_TYPE.get(biometricSourceType)) + .ifPresent(UI_EVENT_LOGGER::log); cleanup(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java index 462b42a44c17..fc6a02840891 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java @@ -273,8 +273,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable, private void applyFocusableFlag(State state) { boolean panelFocusable = state.mNotificationShadeFocusable && state.mPanelExpanded; if (state.mBouncerShowing && (state.mKeyguardOccluded || state.mKeyguardNeedsInput) - || ENABLE_REMOTE_INPUT && state.mRemoteInputActive - || state.mBubbleExpanded) { + || ENABLE_REMOTE_INPUT && state.mRemoteInputActive) { mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE; mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM; } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) { @@ -320,7 +319,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable, private boolean isExpanded(State state) { return !state.mForceCollapsed && (state.isKeyguardShowingAndNotOccluded() || state.mPanelVisible || state.mKeyguardFadingAway || state.mBouncerShowing - || state.mHeadsUpShowing || state.mBubblesShowing + || state.mHeadsUpShowing || state.mScrimsVisibility != ScrimController.TRANSPARENT) || state.mBackgroundBlurRadius > 0; } @@ -579,36 +578,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable, } /** - * Sets whether there are bubbles showing on the screen. - */ - public void setBubblesShowing(boolean bubblesShowing) { - mCurrentState.mBubblesShowing = bubblesShowing; - apply(mCurrentState); - } - - /** - * The bubbles showing state for the status bar. - */ - public boolean getBubblesShowing() { - return mCurrentState.mBubblesShowing; - } - - /** - * Sets if there is a bubble being expanded on the screen. - */ - public void setBubbleExpanded(boolean bubbleExpanded) { - mCurrentState.mBubbleExpanded = bubbleExpanded; - apply(mCurrentState); - } - - /** - * Whether the bubble is shown in expanded state for the status bar. - */ - public boolean getBubbleExpanded() { - return mCurrentState.mBubbleExpanded; - } - - /** * Whether the status bar panel is expanded or not. */ public boolean getPanelExpanded() { @@ -679,8 +648,6 @@ public class NotificationShadeWindowController implements Callback, Dumpable, boolean mBackdropShowing; boolean mWallpaperSupportsAmbientMode; boolean mNotTouchable; - boolean mBubblesShowing; - boolean mBubbleExpanded; boolean mForceHasTopUi; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index a2afd9c2d52b..bbf83bc2057a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1144,7 +1144,7 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimBehind = mNotificationShadeWindowView.findViewById(R.id.scrim_behind); ScrimView scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front); - ScrimView scrimForBubble = mNotificationShadeWindowView.findViewById(R.id.scrim_for_bubble); + ScrimView scrimForBubble = mBubbleController.getScrimForBubble(); mScrimController.setScrimVisibleListener(scrimsVisible -> { mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible); @@ -1301,6 +1301,9 @@ public class StatusBar extends SystemUI implements DemoMode, .setNotificationPanelViewController(mNotificationPanelViewController) .build(); + ((NotificationListContainer) mStackScroller) + .setNotificationActivityStarter(mNotificationActivityStarter); + mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter); mNotificationsController.initialize( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index ed25db40fea6..bc94cdeba37f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -152,6 +152,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb protected boolean mShowing; protected boolean mOccluded; protected boolean mRemoteInputActive; + private boolean mGlobalActionsVisible = false; + private boolean mLastGlobalActionsVisible = false; private boolean mDozing; private boolean mPulsing; private boolean mGesturalNav; @@ -293,6 +295,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb updateLockIcon(); } + /** + * Update the global actions visibility state in order to show the navBar when active. + */ + public void setGlobalActionsVisible(boolean isVisible) { + mGlobalActionsVisible = isVisible; + updateStates(); + } + private void updateLockIcon() { // Not all form factors have a lock icon if (mLockIconContainer == null) { @@ -820,6 +830,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mFirstUpdate = false; mLastShowing = showing; + mLastGlobalActionsVisible = mGlobalActionsVisible; mLastOccluded = occluded; mLastBouncerShowing = bouncerShowing; mLastBouncerDismissible = bouncerDismissible; @@ -864,7 +875,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb boolean keyguardWithGestureNav = (keyguardShowing && !mDozing || mPulsing && !mIsDocked) && mGesturalNav; return (!keyguardShowing && !hideWhileDozing || mBouncer.isShowing() - || mRemoteInputActive || keyguardWithGestureNav); + || mRemoteInputActive || keyguardWithGestureNav + || mGlobalActionsVisible); } /** @@ -876,7 +888,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb boolean keyguardWithGestureNav = (keyguardShowing && !mLastDozing || mLastPulsing && !mLastIsDocked) && mLastGesturalNav; return (!keyguardShowing && !hideWhileDozing || mLastBouncerShowing - || mLastRemoteInputActive || keyguardWithGestureNav); + || mLastRemoteInputActive || keyguardWithGestureNav + || mLastGlobalActionsVisible); } public boolean shouldDismissOnMenuPressed() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java index fbe3e9b19248..d40b5f9728dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -35,6 +35,7 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.os.UserHandle; +import android.provider.Settings; import android.service.dreams.IDreamManager; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; @@ -470,6 +471,29 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit }, null, false /* afterKeyguardGone */); } + @Override + public void startHistoryIntent(boolean showHistory) { + mActivityStarter.dismissKeyguardThenExecute(() -> { + AsyncTask.execute(() -> { + Intent intent = showHistory ? new Intent( + Settings.ACTION_NOTIFICATION_HISTORY) : new Intent( + Settings.ACTION_NOTIFICATION_SETTINGS); + TaskStackBuilder tsb = TaskStackBuilder.create(mContext) + .addNextIntent(new Intent(Settings.ACTION_NOTIFICATION_SETTINGS)); + if (showHistory) { + tsb.addNextIntent(intent); + } + tsb.startActivities(); + if (shouldCollapse()) { + // Putting it back on the main thread, since we're touching views + mMainThreadHandler.post(() -> mCommandQueue.animateCollapsePanels( + CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */)); + } + }); + return true; + }, null, false /* afterKeyguardGone */); + } + private void handleFullScreenIntent(NotificationEntry entry) { if (mNotificationInterruptStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry)) { if (shouldSuppressFullScreenIntent(entry)) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java index 5bab86715663..9c7f49090122 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java @@ -32,7 +32,6 @@ import android.view.WindowInsets; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.ScreenDecorations; -import com.android.systemui.bubbles.BubbleController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; @@ -45,8 +44,8 @@ import javax.inject.Singleton; /** * Manages what parts of the status bar are touchable. Clients are primarily UI that display in the - * status bar even though the UI doesn't look like part of the status bar. Currently this - * includes HeadsUpNotifications and Bubbles. + * status bar even though the UI doesn't look like part of the status bar. Currently this consists + * of HeadsUpNotifications. */ @Singleton public final class StatusBarTouchableRegionManager implements Dumpable { @@ -55,7 +54,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable { private final Context mContext; private final HeadsUpManagerPhone mHeadsUpManager; private final NotificationShadeWindowController mNotificationShadeWindowController; - private final BubbleController mBubbleController; private boolean mIsStatusBarExpanded = false; private boolean mShouldAdjustInsets = false; @@ -73,8 +71,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable { Context context, NotificationShadeWindowController notificationShadeWindowController, ConfigurationController configurationController, - HeadsUpManagerPhone headsUpManager, - BubbleController bubbleController + HeadsUpManagerPhone headsUpManager ) { mContext = context; initResources(); @@ -117,11 +114,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable { mNotificationShadeWindowController.setForcePluginOpenListener((forceOpen) -> { updateTouchableRegion(); }); - - mBubbleController = bubbleController; - mBubbleController.setBubbleStateChangeListener((hasBubbles) -> { - updateTouchableRegion(); - }); } protected void setup( @@ -172,12 +164,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable { mStatusBarHeight); updateRegionForNotch(mTouchableRegion); } - - // Update touchable region for bubbles - Rect bubbleRect = mBubbleController.getTouchableRegion(); - if (bubbleRect != null) { - mTouchableRegion.union(bubbleRect); - } return mTouchableRegion; } @@ -198,7 +184,6 @@ public final class StatusBarTouchableRegionManager implements Dumpable { && (mNotificationShadeWindowView.getRootWindowInsets().getDisplayCutout() != null); boolean shouldObserve = mHeadsUpManager.hasPinnedHeadsUp() || mHeadsUpManager.isHeadsUpGoingAway() - || mBubbleController.hasBubbles() || mForceCollapsedUntilLayout || hasCutoutInset || mNotificationShadeWindowController.getForcePluginOpen(); @@ -266,7 +251,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable { } // Update touch insets to include any area needed for touching features that live in - // the status bar (ie: heads up notifications or bubbles) + // the status bar (ie: heads up notifications) info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); info.touchableRegion.set(calculateTouchableRegion()); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index bb0b5e00ff67..412962cc797a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -48,6 +48,7 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.UserIcons; import com.android.settingslib.RestrictedLockUtilsInternal; @@ -61,6 +62,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; +import com.android.systemui.qs.QSUserSwitcherEvent; import com.android.systemui.qs.tiles.UserDetailView; import com.android.systemui.statusbar.phone.SystemUIDialog; @@ -108,13 +110,15 @@ public class UserSwitcherController implements Dumpable { private int mSecondaryUser = UserHandle.USER_NULL; private Intent mSecondaryUserServiceIntent; private SparseBooleanArray mForcePictureLoadForUserId = new SparseBooleanArray(2); + private final UiEventLogger mUiEventLogger; @Inject public UserSwitcherController(Context context, KeyguardStateController keyguardStateController, @Main Handler handler, ActivityStarter activityStarter, - BroadcastDispatcher broadcastDispatcher) { + BroadcastDispatcher broadcastDispatcher, UiEventLogger uiEventLogger) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; + mUiEventLogger = uiEventLogger; if (!UserManager.isGuestUserEphemeral()) { mGuestResumeSessionReceiver.register(mBroadcastDispatcher); } @@ -801,7 +805,7 @@ public class UserSwitcherController implements Dumpable { UserDetailView v; if (!(convertView instanceof UserDetailView)) { v = UserDetailView.inflate(context, parent, false); - v.createAndSetAdapter(UserSwitcherController.this); + v.createAndSetAdapter(UserSwitcherController.this, mUiEventLogger); } else { v = (UserDetailView) convertView; } @@ -827,6 +831,21 @@ public class UserSwitcherController implements Dumpable { public int getMetricsCategory() { return MetricsEvent.QS_USERDETAIL; } + + @Override + public UiEventLogger.UiEventEnum openDetailEvent() { + return QSUserSwitcherEvent.QS_USER_DETAIL_OPEN; + } + + @Override + public UiEventLogger.UiEventEnum closeDetailEvent() { + return QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE; + } + + @Override + public UiEventLogger.UiEventEnum moreSettingsEvent() { + return QSUserSwitcherEvent.QS_USER_MORE_SETTINGS; + } }; private final KeyguardStateController.Callback mCallback = diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java index 7bb987ca7cf0..0cd4fb9578ff 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java @@ -56,9 +56,12 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Prefs; import com.android.systemui.R; +import com.android.systemui.qs.QSDndEvent; +import com.android.systemui.qs.QSEvents; import com.android.systemui.statusbar.policy.ZenModeController; import java.io.FileDescriptor; @@ -103,6 +106,7 @@ public class ZenModePanel extends FrameLayout { private final TransitionHelper mTransitionHelper = new TransitionHelper(); private final Uri mForeverId; private final ConfigurableTexts mConfigurableTexts; + private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger(); private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this)); @@ -662,6 +666,7 @@ public class ZenModePanel extends FrameLayout { tag.rb.setChecked(true); if (DEBUG) Log.d(mTag, "onCheckedChanged " + conditionId); MetricsLogger.action(mContext, MetricsEvent.QS_DND_CONDITION_SELECT); + mUiEventLogger.log(QSDndEvent.QS_DND_CONDITION_SELECT); select(tag.condition); announceConditionSelection(tag); } @@ -767,6 +772,7 @@ public class ZenModePanel extends FrameLayout { private void onClickTimeButton(View row, ConditionTag tag, boolean up, int rowId) { MetricsLogger.action(mContext, MetricsEvent.QS_DND_TIME, up); + mUiEventLogger.log(up ? QSDndEvent.QS_DND_TIME_UP : QSDndEvent.QS_DND_TIME_DOWN); Condition newCondition = null; final int N = MINUTE_BUCKETS.length; if (mBucketIndex == -1) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index c2b35069a4ad..58906d7bd2d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -30,7 +30,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -162,8 +161,6 @@ public class BubbleControllerTest extends SysuiTestCase { private ExpandableNotificationRow mNonBubbleNotifRow; @Mock - private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener; - @Mock private BubbleController.BubbleExpandListener mBubbleExpandListener; @Mock private PendingIntent mDeleteIntent; @@ -280,7 +277,6 @@ public class BubbleControllerTest extends SysuiTestCase { mFloatingContentCoordinator, mSysUiState, mock(INotificationManager.class)); - mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener); mBubbleController.setExpandListener(mBubbleExpandListener); // Get a reference to the BubbleController's entry listener @@ -298,7 +294,6 @@ public class BubbleControllerTest extends SysuiTestCase { mBubbleController.updateBubble(mRow.getEntry()); assertTrue(mBubbleController.hasBubbles()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); assertFalse(mSysUiStateBubblesExpanded); } @@ -316,14 +311,11 @@ public class BubbleControllerTest extends SysuiTestCase { assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); assertTrue(mBubbleController.hasBubbles()); verify(mNotificationEntryManager).updateNotifications(any()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); mBubbleController.removeBubble( mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE); - assertFalse(mNotificationShadeWindowController.getBubblesShowing()); assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); verify(mNotificationEntryManager, times(2)).updateNotifications(anyString()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(false); assertFalse(mSysUiStateBubblesExpanded); } @@ -388,7 +380,6 @@ public class BubbleControllerTest extends SysuiTestCase { assertTrue(mBubbleController.hasBubbles()); mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE); - assertFalse(mNotificationShadeWindowController.getBubblesShowing()); verify(mNotificationEntryManager, times(3)).updateNotifications(any()); assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey())); @@ -408,14 +399,12 @@ public class BubbleControllerTest extends SysuiTestCase { assertTrue(mBubbleController.hasBubbles()); assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade( mRow.getEntry())); - assertFalse(mNotificationShadeWindowController.getBubbleExpanded()); // Expand the stack BubbleStackView stackView = mBubbleController.getStackView(); mBubbleData.setExpanded(true); assertTrue(mBubbleController.isStackExpanded()); verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey()); - assertTrue(mNotificationShadeWindowController.getBubbleExpanded()); assertTrue(mSysUiStateBubblesExpanded); @@ -427,7 +416,6 @@ public class BubbleControllerTest extends SysuiTestCase { mBubbleController.collapseStack(); verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); assertFalse(mBubbleController.isStackExpanded()); - assertFalse(mNotificationShadeWindowController.getBubbleExpanded()); assertFalse(mSysUiStateBubblesExpanded); } @@ -553,7 +541,6 @@ public class BubbleControllerTest extends SysuiTestCase { mEntryListener.onPendingEntryAdded(mRow2.getEntry()); mBubbleController.updateBubble(mRow.getEntry()); mBubbleController.updateBubble(mRow2.getEntry()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); // Expand BubbleStackView stackView = mBubbleController.getStackView(); @@ -588,7 +575,6 @@ public class BubbleControllerTest extends SysuiTestCase { // Make sure state changes and collapse happens verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(false); assertFalse(mBubbleController.hasBubbles()); assertFalse(mSysUiStateBubblesExpanded); @@ -609,9 +595,6 @@ public class BubbleControllerTest extends SysuiTestCase { mRow.getEntry().getKey()); assertFalse(mBubbleController.isStackExpanded()); - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); - assertFalse(mSysUiStateBubblesExpanded); } @@ -629,9 +612,6 @@ public class BubbleControllerTest extends SysuiTestCase { mRow.getEntry().getKey()); assertTrue(mBubbleController.isStackExpanded()); - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); - assertTrue(mSysUiStateBubblesExpanded); } @@ -651,9 +631,6 @@ public class BubbleControllerTest extends SysuiTestCase { assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot()); assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); - assertFalse(mSysUiStateBubblesExpanded); } @@ -679,9 +656,6 @@ public class BubbleControllerTest extends SysuiTestCase { assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot()); assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); - assertFalse(mSysUiStateBubblesExpanded); } @@ -716,7 +690,6 @@ public class BubbleControllerTest extends SysuiTestCase { mEntryListener.onPendingEntryAdded(mNonBubbleNotifRow.getEntry()); mEntryListener.onPreEntryUpdated(mNonBubbleNotifRow.getEntry()); - verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean()); assertThat(mBubbleController.hasBubbles()).isFalse(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java index 23dfb7c2a3a5..ec1a797533fa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/NewNotifPipelineBubbleControllerTest.java @@ -26,7 +26,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -150,8 +149,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { private ExpandableNotificationRow mRow2; private ExpandableNotificationRow mNonBubbleNotifRow; @Mock - private BubbleController.BubbleStateChangeListener mBubbleStateChangeListener; - @Mock private BubbleController.BubbleExpandListener mBubbleExpandListener; @Mock private PendingIntent mDeleteIntent; @@ -256,7 +253,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { mSysUiState, mock(INotificationManager.class)); mBubbleController.addNotifCallback(mNotifCallback); - mBubbleController.setBubbleStateChangeListener(mBubbleStateChangeListener); mBubbleController.setExpandListener(mBubbleExpandListener); // Get a reference to the BubbleController's entry listener @@ -269,8 +265,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { public void testAddBubble() { mBubbleController.updateBubble(mRow.getEntry()); assertTrue(mBubbleController.hasBubbles()); - - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); } @Test @@ -286,13 +280,10 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); assertTrue(mBubbleController.hasBubbles()); verify(mNotifCallback, times(1)).invalidateNotifications(anyString()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); mBubbleController.removeBubble(mRow.getEntry(), BubbleController.DISMISS_USER_GESTURE); - assertFalse(mNotificationShadeWindowController.getBubblesShowing()); assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); verify(mNotifCallback, times(2)).invalidateNotifications(anyString()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(false); } @Test @@ -347,7 +338,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { assertTrue(mBubbleController.hasBubbles()); mBubbleData.dismissAll(BubbleController.DISMISS_USER_GESTURE); - assertFalse(mNotificationShadeWindowController.getBubblesShowing()); verify(mNotifCallback, times(3)).invalidateNotifications(anyString()); assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey())); assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getEntry().getKey())); @@ -365,14 +355,12 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { assertTrue(mBubbleController.hasBubbles()); assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade( mRow.getEntry())); - assertFalse(mNotificationShadeWindowController.getBubbleExpanded()); // Expand the stack BubbleStackView stackView = mBubbleController.getStackView(); mBubbleData.setExpanded(true); assertTrue(mBubbleController.isStackExpanded()); verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getEntry().getKey()); - assertTrue(mNotificationShadeWindowController.getBubbleExpanded()); // Make sure the notif is suppressed assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(mRow.getEntry())); @@ -381,7 +369,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { mBubbleController.collapseStack(); verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); assertFalse(mBubbleController.isStackExpanded()); - assertFalse(mNotificationShadeWindowController.getBubbleExpanded()); } @Test @@ -495,7 +482,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { mEntryListener.onEntryAdded(mRow2.getEntry()); mBubbleController.updateBubble(mRow.getEntry()); mBubbleController.updateBubble(mRow2.getEntry()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(true); // Expand BubbleStackView stackView = mBubbleController.getStackView(); @@ -528,7 +514,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { // Make sure state changes and collapse happens verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getEntry().getKey()); - verify(mBubbleStateChangeListener).onHasBubblesChanged(false); assertFalse(mBubbleController.hasBubbles()); } @@ -546,9 +531,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { verify(mBubbleExpandListener, never()).onBubbleExpandChanged(false /* expanded */, mRow.getEntry().getKey()); assertFalse(mBubbleController.isStackExpanded()); - - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); } @Test @@ -564,9 +546,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { verify(mBubbleExpandListener).onBubbleExpandChanged(true /* expanded */, mRow.getEntry().getKey()); assertTrue(mBubbleController.isStackExpanded()); - - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); } @Test @@ -584,9 +563,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { // Dot + flyout is hidden because notif is suppressed assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot()); assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); } @Test @@ -610,9 +586,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { // Dot + flyout is hidden because notif is suppressed assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showDot()); assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getEntry().getKey()).showFlyout()); - - // # of bubbles should change - verify(mBubbleStateChangeListener).onHasBubblesChanged(true /* hasBubbles */); } @Test @@ -630,7 +603,6 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase { mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry()); mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry()); - verify(mBubbleStateChangeListener, never()).onHasBubblesChanged(anyBoolean()); assertThat(mBubbleController.hasBubbles()).isFalse(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java index 5b78067ef81a..ae7387996322 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java @@ -27,6 +27,7 @@ import android.util.DisplayMetrics; import androidx.test.filters.SmallTest; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.brightline.BrightLineFalsingManager; @@ -65,7 +66,8 @@ public class FalsingManagerProxyTest extends SysuiTestCase { private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private DockManager mDockManager = new DockManagerFake(); - private StatusBarStateController mStatusBarStateController = new StatusBarStateControllerImpl(); + private StatusBarStateController mStatusBarStateController = + new StatusBarStateControllerImpl(new UiEventLoggerFake()); @Before public void setup() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java index 8b5cc9abb777..b9cb499420ee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java @@ -25,6 +25,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.DisplayMetrics; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; @@ -67,7 +68,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm); DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake(); DockManager dockManager = new DockManagerFake(); - mStatusBarStateController = new StatusBarStateControllerImpl(); + mStatusBarStateController = new StatusBarStateControllerImpl(new UiEventLoggerFake()); mStatusBarStateController.setState(StatusBarState.KEYGUARD); mFalsingManager = new BrightLineFalsingManager(falsingDataProvider, mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager, diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java index b44b23a9f51e..64acdcc30a12 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java @@ -32,6 +32,7 @@ import android.content.ContentResolver; import android.content.res.Resources; import android.media.AudioManager; import android.net.ConnectivityManager; +import android.os.Handler; import android.os.UserManager; import android.service.dreams.IDreamManager; import android.telephony.TelephonyManager; @@ -106,6 +107,7 @@ public class GlobalActionsDialogTest extends SysuiTestCase { @Mock private UiEventLogger mUiEventLogger; @Mock private RingerModeTracker mRingerModeTracker; @Mock private RingerModeLiveData mRingerModeLiveData; + @Mock private Handler mHandler; private TestableLooper mTestableLooper; @@ -147,7 +149,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase { mControlsListingController, mControlsController, mUiEventLogger, - mRingerModeTracker + mRingerModeTracker, + mHandler ); mGlobalActionsDialog.setZeroDialogPressDelayForTesting(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java index 8879e83b4d0e..353efeeb21f6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java @@ -16,6 +16,7 @@ package com.android.systemui.qs; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_MORE_SETTINGS; +import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; @@ -33,11 +34,13 @@ import android.view.View; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -54,10 +57,13 @@ public class QSDetailTest extends SysuiTestCase { private ActivityStarter mActivityStarter; private DetailAdapter mMockDetailAdapter; private TestableLooper mTestableLooper; + private UiEventLoggerFake mUiEventLogger; @Before public void setup() throws Exception { mTestableLooper = TestableLooper.get(this); + mUiEventLogger = QSEvents.INSTANCE.setLoggerForTesting(); + mTestableLooper.runWithLooper(() -> { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class); @@ -70,6 +76,19 @@ public class QSDetailTest extends SysuiTestCase { when(mMockDetailAdapter.createDetailView(any(), any(), any())) .thenReturn(mock(View.class)); }); + + // Only detail in use is the user detail + when(mMockDetailAdapter.openDetailEvent()) + .thenReturn(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN); + when(mMockDetailAdapter.closeDetailEvent()) + .thenReturn(QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE); + when(mMockDetailAdapter.moreSettingsEvent()) + .thenReturn(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS); + } + + @After + public void tearDown() { + QSEvents.INSTANCE.resetLogger(); } @Test @@ -79,9 +98,16 @@ public class QSDetailTest extends SysuiTestCase { mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false); verify(mMetricsLogger).visible(eq(mMockDetailAdapter.getMetricsCategory())); + assertEquals(1, mUiEventLogger.numLogs()); + assertEquals(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN.getId(), mUiEventLogger.eventId(0)); + mUiEventLogger.getLogs().clear(); + mQsDetail.handleShowingDetail(null, 0, 0, false); verify(mMetricsLogger).hidden(eq(mMockDetailAdapter.getMetricsCategory())); + assertEquals(1, mUiEventLogger.numLogs()); + assertEquals(QSUserSwitcherEvent.QS_USER_DETAIL_CLOSE.getId(), mUiEventLogger.eventId(0)); + ViewUtils.detachView(mQsDetail); mTestableLooper.processAllMessages(); } @@ -92,10 +118,13 @@ public class QSDetailTest extends SysuiTestCase { mTestableLooper.processAllMessages(); mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false); - mQsDetail.findViewById(android.R.id.button2).performClick(); + mUiEventLogger.getLogs().clear(); + mQsDetail.requireViewById(android.R.id.button2).performClick(); int metricsCategory = mMockDetailAdapter.getMetricsCategory(); verify(mMetricsLogger).action(eq(ACTION_QS_MORE_SETTINGS), eq(metricsCategory)); + assertEquals(1, mUiEventLogger.numLogs()); + assertEquals(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS.getId(), mUiEventLogger.eventId(0)); verify(mActivityStarter).postStartActivityDismissingKeyguard(any(), anyInt()); @@ -105,7 +134,9 @@ public class QSDetailTest extends SysuiTestCase { @Test public void testNullAdapterClick() { - mQsDetail.setupDetailFooter(mock(DetailAdapter.class)); - mQsDetail.findViewById(android.R.id.button2).performClick(); + DetailAdapter mock = mock(DetailAdapter.class); + when(mock.moreSettingsEvent()).thenReturn(DetailAdapter.INVALID); + mQsDetail.setupDetailFooter(mock); + mQsDetail.requireViewById(android.R.id.button2).performClick(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index 1f494a69f953..d338cbf51fb5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -34,6 +34,7 @@ import androidx.test.filters.SmallTest; import androidx.test.filters.Suppress; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; import com.android.keyguard.CarrierText; import com.android.systemui.Dependency; import com.android.systemui.R; @@ -106,7 +107,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest { mock(PluginManager.class), mock(TunerService.class), () -> mock(AutoTileManager.class), mock(DumpManager.class), mock(BroadcastDispatcher.class), Optional.of(mock(StatusBar.class)), - mock(QSLogger.class)); + mock(QSLogger.class), mock(UiEventLogger.class)); qs.setHost(host); qs.setListening(true); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index 392adf99e511..9d35e53e7421 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -94,17 +95,19 @@ public class QSPanelTest extends SysuiTestCase { private ActivityStarter mActivityStarter; @Mock private NotificationEntryManager mEntryManager; + private UiEventLoggerFake mUiEventLogger; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); mTestableLooper = TestableLooper.get(this); + mUiEventLogger = new UiEventLoggerFake(); mTestableLooper.runWithLooper(() -> { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher, mQSLogger, mForegroundExecutor, mBackgroundExecutor, - mLocalBluetoothManager, mActivityStarter, mEntryManager); + mLocalBluetoothManager, mActivityStarter, mEntryManager, mUiEventLogger); // Provides a parent with non-zero size for QSPanel mParentView = new FrameLayout(mContext); mParentView.addView(mQsPanel); @@ -124,9 +127,17 @@ public class QSPanelTest extends SysuiTestCase { mQsPanel.setExpanded(true); verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(true)); verify(mQSLogger).logPanelExpanded(true, mQsPanel.getDumpableTag()); + assertEquals(1, mUiEventLogger.numLogs()); + assertEquals(QSEvent.QS_PANEL_EXPANDED.getId(), mUiEventLogger.eventId(0)); + mUiEventLogger.getLogs().clear(); + mQsPanel.setExpanded(false); verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(false)); verify(mQSLogger).logPanelExpanded(false, mQsPanel.getDumpableTag()); + assertEquals(1, mUiEventLogger.numLogs()); + assertEquals(QSEvent.QS_PANEL_COLLAPSED.getId(), mUiEventLogger.eventId(0)); + mUiEventLogger.getLogs().clear(); + } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java index 95c3e5aee870..966fa88653bf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java @@ -41,6 +41,7 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; +import com.android.internal.logging.UiEventLogger; import com.android.internal.util.CollectionUtils; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; @@ -50,7 +51,6 @@ import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.logging.QSLogger; -import com.android.systemui.qs.tileimpl.QSFactoryImpl; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.phone.AutoTileManager; @@ -105,6 +105,8 @@ public class QSTileHostTest extends SysuiTestCase { private QSLogger mQSLogger; @Mock private CustomTile mCustomTile; + @Mock + private UiEventLogger mUiEventLogger; private Handler mHandler; private TestableLooper mLooper; @@ -117,7 +119,7 @@ public class QSTileHostTest extends SysuiTestCase { mHandler = new Handler(mLooper.getLooper()); mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler, mLooper.getLooper(), mPluginManager, mTunerService, mAutoTiles, mDumpManager, - mBroadcastDispatcher, mStatusBar, mQSLogger); + mBroadcastDispatcher, mStatusBar, mQSLogger, mUiEventLogger); setUpTileFactory(); // Override this config so there are no unexpected tiles @@ -298,10 +300,11 @@ public class QSTileHostTest extends SysuiTestCase { QSFactory defaultFactory, Handler mainHandler, Looper bgLooper, PluginManager pluginManager, TunerService tunerService, Provider<AutoTileManager> autoTiles, DumpManager dumpManager, - BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger) { + BroadcastDispatcher broadcastDispatcher, StatusBar statusBar, QSLogger qsLogger, + UiEventLogger uiEventLogger) { super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager, tunerService, autoTiles, dumpManager, broadcastDispatcher, - Optional.of(statusBar), qsLogger); + Optional.of(statusBar), qsLogger, uiEventLogger); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java index 25bac7ae4117..204de929e331 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java @@ -24,6 +24,7 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.SysuiTestCase; import com.android.systemui.qs.QSTileHost; @@ -42,7 +43,8 @@ public class TileAdapterTest extends SysuiTestCase { @Before public void setup() throws Exception { - TestableLooper.get(this).runWithLooper(() -> mTileAdapter = new TileAdapter(mContext)); + TestableLooper.get(this).runWithLooper(() -> mTileAdapter = + new TileAdapter(mContext, new UiEventLoggerFake())); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java index 884e4c0f5205..2fc3d72c2672 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java @@ -30,6 +30,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; +import com.android.internal.logging.UiEventLogger; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; @@ -81,6 +82,8 @@ public class TileServicesTest extends SysuiTestCase { private StatusBar mStatusBar; @Mock private QSLogger mQSLogger; + @Mock + private UiEventLogger mUiEventLogger; @Before public void setUp() throws Exception { @@ -98,7 +101,8 @@ public class TileServicesTest extends SysuiTestCase { mDumpManager, mBroadcastDispatcher, Optional.of(mStatusBar), - mQSLogger); + mQSLogger, + mUiEventLogger); mTileService = new TestTileServices(host, Looper.getMainLooper(), mBroadcastDispatcher); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java index 4fada336fb94..1c0d451e064a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java @@ -46,12 +46,16 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; +import com.android.internal.logging.InstanceId; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.UiEventLogger; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.qs.QSEvent; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; @@ -83,6 +87,8 @@ public class QSTileImplTest extends SysuiTestCase { private QSTileHost mHost; private MetricsLogger mMetricsLogger; private StatusBarStateController mStatusBarStateController; + private UiEventLoggerFake mUiEventLoggerFake; + private InstanceId mInstanceId = InstanceId.fakeInstanceId(5); @Captor private ArgumentCaptor<LogMaker> mLogCaptor; @@ -94,12 +100,15 @@ public class QSTileImplTest extends SysuiTestCase { mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper()); mDependency.injectMockDependency(ActivityStarter.class); mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); + mUiEventLoggerFake = new UiEventLoggerFake(); mStatusBarStateController = mDependency.injectMockDependency(StatusBarStateController.class); mHost = mock(QSTileHost.class); when(mHost.indexOf(SPEC)).thenReturn(POSITION); when(mHost.getContext()).thenReturn(mContext.getBaseContext()); when(mHost.getQSLogger()).thenReturn(mQsLogger); + when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake); + when(mHost.getNewInstanceId()).thenReturn(mInstanceId); mTile = spy(new TileImpl(mHost)); mTile.mHandler = mTile.new H(mTestableLooper.getLooper()); @@ -110,6 +119,9 @@ public class QSTileImplTest extends SysuiTestCase { public void testClick_Metrics() { mTile.click(); verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_CLICK))); + assertEquals(1, mUiEventLoggerFake.numLogs()); + UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); + assertEvent(QSEvent.QS_ACTION_CLICK, event); } @Test @@ -133,6 +145,9 @@ public class QSTileImplTest extends SysuiTestCase { public void testSecondaryClick_Metrics() { mTile.secondaryClick(); verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_SECONDARY_CLICK))); + assertEquals(1, mUiEventLoggerFake.numLogs()); + UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); + assertEvent(QSEvent.QS_ACTION_SECONDARY_CLICK, event); } @Test @@ -156,6 +171,9 @@ public class QSTileImplTest extends SysuiTestCase { public void testLongClick_Metrics() { mTile.longClick(); verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_LONG_PRESS))); + assertEquals(1, mUiEventLoggerFake.numLogs()); + UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0); + assertEvent(QSEvent.QS_ACTION_LONG_PRESS, event); } @@ -249,6 +267,13 @@ public class QSTileImplTest extends SysuiTestCase { verify(mQsLogger).logTileChangeListening(SPEC, false); } + private void assertEvent(UiEventLogger.UiEventEnum eventType, + UiEventLoggerFake.FakeUiEvent fakeEvent) { + assertEquals(eventType.getId(), fakeEvent.eventId); + assertEquals(SPEC, fakeEvent.packageName); + assertEquals(mInstanceId, fakeEvent.instanceId); + } + private class TileLogMatcher implements ArgumentMatcher<LogMaker> { private final int mCategory; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt index b51e716591fe..6d6a4d8f6b7d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt @@ -24,8 +24,11 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest +import com.android.internal.logging.testing.UiEventLoggerFake import com.android.systemui.SysuiTestCase +import com.android.systemui.qs.QSUserSwitcherEvent import com.android.systemui.statusbar.policy.UserSwitcherController +import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -50,15 +53,17 @@ class UserDetailViewAdapterTest : SysuiTestCase() { @Mock private lateinit var mPicture: Bitmap @Mock private lateinit var mLayoutInflater: LayoutInflater private lateinit var adapter: UserDetailView.Adapter + private lateinit var uiEventLogger: UiEventLoggerFake @Before fun setUp() { MockitoAnnotations.initMocks(this) + uiEventLogger = UiEventLoggerFake() mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE, mLayoutInflater) `when`(mLayoutInflater.inflate(anyInt(), any(ViewGroup::class.java), anyBoolean())) .thenReturn(mInflatedUserDetailItemView) - adapter = UserDetailView.Adapter(mContext, mUserSwitcherController) + adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger) } private fun clickableTest( @@ -77,6 +82,17 @@ class UserDetailViewAdapterTest : SysuiTestCase() { } @Test + fun testUserSwitchLog() { + val user = createUserRecord(false /* current */, false /* guest */) + val v = adapter.createUserDetailItemView(View(mContext), mParent, user) + `when`(v.tag).thenReturn(user) + adapter.onClick(v) + + assertEquals(1, uiEventLogger.numLogs()) + assertEquals(QSUserSwitcherEvent.QS_USER_SWITCH.id, uiEventLogger.eventId(0)) + } + + @Test fun testGuestIsClickable_differentViews_notCurrent() { clickableTest(false, true, mOtherView, true) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt index c874915e9124..c46ac47e660c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt @@ -64,6 +64,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Mock private lateinit var root: View @Mock private lateinit var viewRootImpl: ViewRootImpl @Mock private lateinit var shadeSpring: NotificationShadeDepthController.DepthAnimation + @Mock private lateinit var shadeAnimation: NotificationShadeDepthController.DepthAnimation @Mock private lateinit var globalActionsSpring: NotificationShadeDepthController.DepthAnimation @Mock private lateinit var brightnessSpring: NotificationShadeDepthController.DepthAnimation @JvmField @Rule val mockitoRule = MockitoJUnit.rule() @@ -80,11 +81,15 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { `when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer -> (answer.arguments[0] as Float * maxBlur).toInt() } + `when`(blurUtils.minBlurRadius).thenReturn(0) + `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) + notificationShadeDepthController = NotificationShadeDepthController( statusBarStateController, blurUtils, biometricUnlockController, keyguardStateController, choreographer, wallpaperManager, notificationShadeWindowController, dumpManager) notificationShadeDepthController.shadeSpring = shadeSpring + notificationShadeDepthController.shadeAnimation = shadeAnimation notificationShadeDepthController.brightnessMirrorSpring = brightnessSpring notificationShadeDepthController.globalActionsSpring = globalActionsSpring notificationShadeDepthController.root = root @@ -104,16 +109,61 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { notificationShadeDepthController.onPanelExpansionChanged(1f /* expansion */, false /* tracking */) verify(shadeSpring).animateTo(eq(maxBlur), any()) + verify(shadeAnimation).animateTo(eq(maxBlur), any()) + } + + @Test + fun onPanelExpansionChanged_animatesBlurIn_ifShade() { + notificationShadeDepthController.onPanelExpansionChanged(0.01f /* expansion */, + false /* tracking */) + verify(shadeAnimation).animateTo(eq(maxBlur), any()) + } + + @Test + fun onPanelExpansionChanged_animatesBlurOut_ifShade() { + onPanelExpansionChanged_animatesBlurIn_ifShade() + clearInvocations(shadeAnimation) + notificationShadeDepthController.onPanelExpansionChanged(0f /* expansion */, + false /* tracking */) + verify(shadeAnimation).animateTo(eq(0), any()) + } + + @Test + fun onPanelExpansionChanged_animatesBlurOut_ifFlick() { + onPanelExpansionChanged_apliesBlur_ifShade() + clearInvocations(shadeAnimation) + notificationShadeDepthController.onPanelExpansionChanged(1f /* expansion */, + true /* tracking */) + verify(shadeAnimation, never()).animateTo(anyInt(), any()) + + notificationShadeDepthController.onPanelExpansionChanged(0.9f /* expansion */, + true /* tracking */) + verify(shadeAnimation, never()).animateTo(anyInt(), any()) + + notificationShadeDepthController.onPanelExpansionChanged(0.8f /* expansion */, + false /* tracking */) + verify(shadeAnimation).animateTo(eq(0), any()) + } + + @Test + fun onPanelExpansionChanged_animatesBlurIn_ifFlickCancelled() { + onPanelExpansionChanged_animatesBlurOut_ifFlick() + clearInvocations(shadeAnimation) + notificationShadeDepthController.onPanelExpansionChanged(0.6f /* expansion */, + true /* tracking */) + verify(shadeAnimation).animateTo(eq(maxBlur), any()) } @Test fun onStateChanged_reevalutesBlurs_ifSameRadiusAndNewState() { onPanelExpansionChanged_apliesBlur_ifShade() clearInvocations(shadeSpring) + clearInvocations(shadeAnimation) statusBarState = StatusBarState.KEYGUARD statusBarStateListener.onStateChanged(statusBarState) verify(shadeSpring).animateTo(eq(0), any()) + verify(shadeAnimation).animateTo(eq(0), any()) } @Test @@ -147,6 +197,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Test fun updateBlurCallback_setsBlur_whenExpanded() { `when`(shadeSpring.radius).thenReturn(maxBlur) + `when`(shadeAnimation.radius).thenReturn(maxBlur) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(maxBlur)) } @@ -154,6 +205,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Test fun updateBlurCallback_appLaunchAnimation_overridesZoom() { `when`(shadeSpring.radius).thenReturn(maxBlur) + `when`(shadeAnimation.radius).thenReturn(maxBlur) val animProgress = ActivityLaunchAnimator.ExpandAnimationParameters() animProgress.linearProgress = 1f notificationShadeDepthController.notificationLaunchAnimationParams = animProgress @@ -187,6 +239,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { `when`(brightnessSpring.ratio).thenReturn(1f) // And shade is blurred `when`(shadeSpring.radius).thenReturn(maxBlur) + `when`(shadeAnimation.radius).thenReturn(maxBlur) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(notificationShadeWindowController).setBackgroundBlurRadius(0) @@ -207,8 +260,10 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { val animProgress = ActivityLaunchAnimator.ExpandAnimationParameters() animProgress.linearProgress = 0.5f `when`(shadeSpring.radius).thenReturn(0) + `when`(shadeAnimation.radius).thenReturn(0) notificationShadeDepthController.notificationLaunchAnimationParams = animProgress verify(shadeSpring, never()).animateTo(anyInt(), any()) + verify(shadeAnimation, never()).animateTo(anyInt(), any()) } private fun <T : Any> safeEq(value: T): T { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java index d41b6cfb32c0..92a2c8738344 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java @@ -43,6 +43,7 @@ import com.android.systemui.bubbles.BubbleController; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; import com.android.systemui.statusbar.notification.DynamicChildBindController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -329,6 +330,10 @@ public class NotificationViewHierarchyManagerTest extends SysuiTestCase { } @Override + public void setNotificationActivityStarter( + NotificationActivityStarter notificationActivityStarter) {} + + @Override public void addContainerView(View v) { mLayout.addView(v); mRows.add(v); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt new file mode 100644 index 000000000000..fca6bc50f6e2 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.internal.logging.testing.UiEventLoggerFake +import com.android.systemui.SysuiTestCase +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper +class StatusBarStateControllerImplTest : SysuiTestCase() { + + private lateinit var controller: StatusBarStateControllerImpl + private lateinit var uiEventLogger: UiEventLoggerFake + + @Before + fun setUp() { + uiEventLogger = UiEventLoggerFake() + controller = StatusBarStateControllerImpl(uiEventLogger) + } + + @Test + fun testChangeState_logged() { + TestableLooper.get(this).runWithLooper { + controller.state = StatusBarState.FULLSCREEN_USER_SWITCHER + controller.state = StatusBarState.KEYGUARD + controller.state = StatusBarState.SHADE + controller.state = StatusBarState.SHADE_LOCKED + } + + val logs = uiEventLogger.logs + assertEquals(4, logs.size) + val ids = logs.map(UiEventLoggerFake.FakeUiEvent::eventId) + assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER.id, ids[0]) + assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_KEYGUARD.id, ids[1]) + assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE.id, ids[2]) + assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE_LOCKED.id, ids[3]) + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt new file mode 100644 index 000000000000..b5b2f1fc0484 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateEventTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar + +import android.testing.AndroidTestingRunner +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +class StatusBarStateEventTest : SysuiTestCase() { + + @Test + fun testFromState() { + val events = listOf( + StatusBarStateEvent.STATUS_BAR_STATE_SHADE, + StatusBarStateEvent.STATUS_BAR_STATE_SHADE_LOCKED, + StatusBarStateEvent.STATUS_BAR_STATE_KEYGUARD, + StatusBarStateEvent.STATUS_BAR_STATE_FULLSCREEN_USER_SWITCHER, + StatusBarStateEvent.STATUS_BAR_STATE_UNKNOWN + ) + val states = listOf( + StatusBarState.SHADE, + StatusBarState.SHADE_LOCKED, + StatusBarState.KEYGUARD, + StatusBarState.FULLSCREEN_USER_SWITCHER, + -1 + ) + events.zip(states).forEach { (event, state) -> + assertEquals(event, StatusBarStateEvent.fromState(state)) + } + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java index 29040147d1ca..d0dfb17111c6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java @@ -80,7 +80,7 @@ public class DynamicChildBindControllerTest extends SysuiTestCase { when(mBindStage.getStageParams(lastChild)).thenReturn(bindParams); // WHEN the controller gets the list - mDynamicChildBindController.updateChildContentViews(mGroupNotifs); + mDynamicChildBindController.updateContentViews(mGroupNotifs); // THEN we free content views verify(bindParams).markContentViewsFreeable(FLAG_CONTENT_VIEW_CONTRACTED); @@ -101,7 +101,7 @@ public class DynamicChildBindControllerTest extends SysuiTestCase { when(mBindStage.getStageParams(lastChild)).thenReturn(bindParams); // WHEN the controller gets the list - mDynamicChildBindController.updateChildContentViews(mGroupNotifs); + mDynamicChildBindController.updateContentViews(mGroupNotifs); // THEN we bind content views verify(bindParams).requireContentViews(FLAG_CONTENT_VIEW_CONTRACTED); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java index 99dc895eafff..68cf66dfb700 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -85,6 +86,22 @@ public class DynamicPrivacyControllerTest extends SysuiTestCase { verify(mListener).onDynamicPrivacyChanged(); } + @Test + public void testNotifiedWhenKeyguardFadingAwayChanges() { + when(mKeyguardStateController.canDismissLockScreen()).thenReturn(false); + when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(false); + enableDynamicPrivacy(); + + when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(true); + mDynamicPrivacyController.onKeyguardFadingAwayChanged(); + verify(mListener).onDynamicPrivacyChanged(); + reset(mListener); + + when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(false); + mDynamicPrivacyController.onUnlockedChanged(); + verify(mListener).onDynamicPrivacyChanged(); + } + private void enableDynamicPrivacy() { when(mLockScreenUserManager.shouldHideNotifications(any())).thenReturn( false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java index 4f481081855f..f54252effdd3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java @@ -176,6 +176,7 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { .setKey(mEntry.getKey()) .setImportance(IMPORTANCE_MIN) .build()); + when(mHighPriorityProvider.isHighPriority(mEntry)).thenReturn(false); // THEN filter out the entry assertTrue(mKeyguardFilter.shouldFilterOut(mEntry, 0)); @@ -197,7 +198,8 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { .setImportance(IMPORTANCE_MIN) .build()); - // WHEN its parent has a summary that exceeds threshold to show on lockscreen + // WHEN its parent does exceed threshold tot show on the lockscreen + when(mHighPriorityProvider.isHighPriority(parent)).thenReturn(true); parent.setSummary(new NotificationEntryBuilder() .setImportance(IMPORTANCE_HIGH) .build()); @@ -205,7 +207,8 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { // THEN don't filter out the entry assertFalse(mKeyguardFilter.shouldFilterOut(entryWithParent, 0)); - // WHEN its parent has a summary that doesn't exceed threshold to show on lockscreen + // WHEN its parent doesn't exceed threshold to show on lockscreen + when(mHighPriorityProvider.isHighPriority(parent)).thenReturn(false); parent.setSummary(new NotificationEntryBuilder() .setImportance(IMPORTANCE_MIN) .build()); @@ -248,5 +251,8 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { .thenReturn(true); // notification doesn't have a summary + + // notification is high priority, so it shouldn't be filtered + when(mHighPriorityProvider.isHighPriority(mEntry)).thenReturn(true); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index 4b09aa687073..57ef05544e7e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -47,6 +47,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.internal.util.LatencyTracker; import com.android.keyguard.KeyguardClockSwitch; import com.android.keyguard.KeyguardUpdateMonitor; @@ -207,7 +208,7 @@ public class NotificationPanelViewTest extends SysuiTestCase { NotificationWakeUpCoordinator coordinator = new NotificationWakeUpCoordinator( mock(HeadsUpManagerPhone.class), - new StatusBarStateControllerImpl(), + new StatusBarStateControllerImpl(new UiEventLoggerFake()), mKeyguardBypassController, mDozeParameters); PulseExpansionHandler expansionHandler = new PulseExpansionHandler( diff --git a/packages/Tethering/common/TetheringLib/Android.bp b/packages/Tethering/common/TetheringLib/Android.bp index ee6b9f12f9d2..b520bc880821 100644 --- a/packages/Tethering/common/TetheringLib/Android.bp +++ b/packages/Tethering/common/TetheringLib/Android.bp @@ -134,5 +134,5 @@ java_library { java_library { name: "framework-tethering-stubs-module_libs_api", srcs: [":framework-tethering-stubs-srcs-module_libs_api"], - defaults: ["framework-module-stubs-lib-defaults-systemapi"], + defaults: ["framework-module-stubs-lib-defaults-module_libs_api"], } diff --git a/packages/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java b/packages/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java index 82a26beadacf..4f8ad8a221ef 100644 --- a/packages/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java +++ b/packages/Tethering/src/android/net/dhcp/DhcpServingParamsParcelExt.java @@ -169,7 +169,7 @@ public class DhcpServingParamsParcelExt extends DhcpServingParamsParcel { * <p>If not set, the default value is null. */ public DhcpServingParamsParcelExt setSingleClientAddr(@Nullable Inet4Address clientAddr) { - this.clientAddr = clientAddr == null ? 0 : inet4AddressToIntHTH(clientAddr); + this.singleClientAddr = clientAddr == null ? 0 : inet4AddressToIntHTH(clientAddr); return this; } diff --git a/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java b/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java index c007c174fe4f..1817f35f1dcd 100644 --- a/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java +++ b/packages/Tethering/src/com/android/networkstack/tethering/OffloadController.java @@ -23,6 +23,7 @@ import static android.net.NetworkStats.SET_DEFAULT; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkStats.UID_TETHERING; +import static android.net.netstats.provider.NetworkStatsProvider.QUOTA_UNLIMITED; import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED; import android.annotation.NonNull; @@ -76,6 +77,7 @@ public class OffloadController { private static final boolean DBG = false; private static final String ANYIP = "0.0.0.0"; private static final ForwardedStats EMPTY_STATS = new ForwardedStats(); + private static final int DEFAULT_PERFORM_POLL_INTERVAL_MS = 5000; @VisibleForTesting enum StatsType { @@ -115,11 +117,33 @@ public class OffloadController { // includes upstream interfaces that have a quota set. private HashMap<String, Long> mInterfaceQuotas = new HashMap<>(); + // Tracking remaining alert quota. Unlike limit quota is subject to interface, the alert + // quota is interface independent and global for tether offload. Note that this is only + // accessed on the handler thread and in the constructor. + private long mRemainingAlertQuota = QUOTA_UNLIMITED; + // Runnable that used to schedule the next stats poll. + private final Runnable mScheduledPollingTask = () -> { + updateStatsForCurrentUpstream(); + maybeSchedulePollingStats(); + }; + private int mNatUpdateCallbacksReceived; private int mNatUpdateNetlinkErrors; + @NonNull + private final Dependencies mDeps; + + // TODO: Put more parameters in constructor into dependency object. + static class Dependencies { + int getPerformPollInterval() { + // TODO: Consider make this configurable. + return DEFAULT_PERFORM_POLL_INTERVAL_MS; + } + } + public OffloadController(Handler h, OffloadHardwareInterface hwi, - ContentResolver contentResolver, NetworkStatsManager nsm, SharedLog log) { + ContentResolver contentResolver, NetworkStatsManager nsm, SharedLog log, + @NonNull Dependencies deps) { mHandler = h; mHwInterface = hwi; mContentResolver = contentResolver; @@ -135,6 +159,7 @@ public class OffloadController { provider = null; } mStatsProvider = provider; + mDeps = deps; } /** Start hardware offload. */ @@ -240,6 +265,7 @@ public class OffloadController { mLog.log("tethering offload started"); mNatUpdateCallbacksReceived = 0; mNatUpdateNetlinkErrors = 0; + maybeSchedulePollingStats(); } return isStarted; } @@ -255,6 +281,9 @@ public class OffloadController { mHwInterface.stopOffloadControl(); mControlInitialized = false; mConfigInitialized = false; + if (mHandler.hasCallbacks(mScheduledPollingTask)) { + mHandler.removeCallbacks(mScheduledPollingTask); + } if (wasStarted) mLog.log("tethering offload stopped"); } @@ -345,6 +374,11 @@ public class OffloadController { @Override public void onSetAlert(long quotaBytes) { // TODO: Ask offload HAL to notify alert without stopping traffic. + // Post it to handler thread since it access remaining quota bytes. + mHandler.post(() -> { + updateAlertQuota(quotaBytes); + maybeSchedulePollingStats(); + }); } } @@ -366,15 +400,66 @@ public class OffloadController { // the stats for each interface, and does not observe partial writes where rxBytes is // updated and txBytes is not. ForwardedStats diff = mHwInterface.getForwardedStats(iface); + final long usedAlertQuota = diff.rxBytes + diff.txBytes; ForwardedStats base = mForwardedStats.get(iface); if (base != null) { diff.add(base); } + + // Update remaining alert quota if it is still positive. + if (mRemainingAlertQuota > 0 && usedAlertQuota > 0) { + // Trim to zero if overshoot. + final long newQuota = Math.max(mRemainingAlertQuota - usedAlertQuota, 0); + updateAlertQuota(newQuota); + } + mForwardedStats.put(iface, diff); // diff is a new object, just created by getForwardedStats(). Therefore, anyone reading from // mForwardedStats (i.e., any caller of getTetherStats) will see the new stats immediately. } + /** + * Update remaining alert quota, fire the {@link NetworkStatsProvider#notifyAlertReached()} + * callback when it reaches zero. This can be invoked either from service setting the alert, or + * {@code maybeUpdateStats} when updating stats. Note that this can be only called on + * handler thread. + * + * @param newQuota non-negative value to indicate the new quota, or + * {@link NetworkStatsProvider#QUOTA_UNLIMITED} to indicate there is no + * quota. + */ + private void updateAlertQuota(long newQuota) { + if (newQuota < QUOTA_UNLIMITED) { + throw new IllegalArgumentException("invalid quota value " + newQuota); + } + if (mRemainingAlertQuota == newQuota) return; + + mRemainingAlertQuota = newQuota; + if (mRemainingAlertQuota == 0) { + mLog.i("notifyAlertReached"); + if (mStatsProvider != null) mStatsProvider.notifyAlertReached(); + } + } + + /** + * Schedule polling if needed, this will be stopped if offload has been + * stopped or remaining quota reaches zero or upstream is empty. + * Note that this can be only called on handler thread. + */ + private void maybeSchedulePollingStats() { + if (!isPollingStatsNeeded()) return; + + if (mHandler.hasCallbacks(mScheduledPollingTask)) { + mHandler.removeCallbacks(mScheduledPollingTask); + } + mHandler.postDelayed(mScheduledPollingTask, mDeps.getPerformPollInterval()); + } + + private boolean isPollingStatsNeeded() { + return started() && mRemainingAlertQuota > 0 + && !TextUtils.isEmpty(currentUpstreamInterface()); + } + private boolean maybeUpdateDataLimit(String iface) { // setDataLimit may only be called while offload is occurring on this upstream. if (!started() || !TextUtils.equals(iface, currentUpstreamInterface())) { @@ -414,6 +499,8 @@ public class OffloadController { final String iface = currentUpstreamInterface(); if (!TextUtils.isEmpty(iface)) mForwardedStats.putIfAbsent(iface, EMPTY_STATS); + maybeSchedulePollingStats(); + // TODO: examine return code and decide what to do if programming // upstream parameters fails (probably just wait for a subsequent // onOffloadEvent() callback to tell us offload is available again and diff --git a/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java b/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java index c4a1078d0be0..293f8eae32d5 100644 --- a/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java +++ b/packages/Tethering/src/com/android/networkstack/tethering/OffloadHardwareInterface.java @@ -308,7 +308,6 @@ public class OffloadHardwareInterface { return stats; } - mLog.log(logmsg + YIELDS + stats); return stats; } diff --git a/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java index 4e16c49caa0e..0a95a5e0073b 100644 --- a/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java +++ b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java @@ -273,7 +273,7 @@ public class Tethering { mHandler = mTetherMasterSM.getHandler(); mOffloadController = new OffloadController(mHandler, mDeps.getOffloadHardwareInterface(mHandler, mLog), mContext.getContentResolver(), - statsManager, mLog); + statsManager, mLog, new OffloadController.Dependencies()); mUpstreamNetworkMonitor = mDeps.getUpstreamNetworkMonitor(mContext, mTetherMasterSM, mLog, TetherMasterSM.EVENT_UPSTREAM_CALLBACK); mForwardedDownstreams = new LinkedHashSet<>(); diff --git a/packages/Tethering/tests/unit/src/android/net/dhcp/DhcpServingParamsParcelExtTest.java b/packages/Tethering/tests/unit/src/android/net/dhcp/DhcpServingParamsParcelExtTest.java index f8eb1476bad0..a8857b2e5cb0 100644 --- a/packages/Tethering/tests/unit/src/android/net/dhcp/DhcpServingParamsParcelExtTest.java +++ b/packages/Tethering/tests/unit/src/android/net/dhcp/DhcpServingParamsParcelExtTest.java @@ -110,7 +110,7 @@ public class DhcpServingParamsParcelExtTest { @Test public void testSetClientAddr() { mParcel.setSingleClientAddr(TEST_CLIENT_ADDRESS); - assertEquals(TEST_CLIENT_ADDRESS_PARCELED, mParcel.clientAddr); + assertEquals(TEST_CLIENT_ADDRESS_PARCELED, mParcel.singleClientAddr); } private static Inet4Address inet4Addr(String addr) { diff --git a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java index 65797200fa92..088a663190b8 100644 --- a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java +++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/OffloadControllerTest.java @@ -116,6 +116,12 @@ public class OffloadControllerTest { private final ArgumentCaptor<OffloadHardwareInterface.ControlCallback> mControlCallbackCaptor = ArgumentCaptor.forClass(OffloadHardwareInterface.ControlCallback.class); private MockContentResolver mContentResolver; + private OffloadController.Dependencies mDeps = new OffloadController.Dependencies() { + @Override + int getPerformPollInterval() { + return 0; + } + }; @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -150,7 +156,7 @@ public class OffloadControllerTest { private OffloadController makeOffloadController() throws Exception { OffloadController offload = new OffloadController(new Handler(Looper.getMainLooper()), - mHardware, mContentResolver, mStatsManager, new SharedLog("test")); + mHardware, mContentResolver, mStatsManager, new SharedLog("test"), mDeps); final ArgumentCaptor<OffloadController.OffloadTetheringStatsProvider> tetherStatsProviderCaptor = ArgumentCaptor.forClass(OffloadController.OffloadTetheringStatsProvider.class); diff --git a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index 0c86eeb6cd4d..0363f5f9989f 100644 --- a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -1689,7 +1689,7 @@ public class TetheringTest { final DhcpServingParamsParcel params = dhcpParamsCaptor.getValue(); assertEquals(serverAddr, intToInet4AddressHTH(params.serverAddr).getHostAddress()); assertEquals(24, params.serverAddrPrefixLength); - assertEquals(clientAddrParceled, params.clientAddr); + assertEquals(clientAddrParceled, params.singleClientAddr); } @Test diff --git a/packages/overlays/Android.mk b/packages/overlays/Android.mk index 550b8713024a..50e1030fda30 100644 --- a/packages/overlays/Android.mk +++ b/packages/overlays/Android.mk @@ -48,6 +48,7 @@ LOCAL_REQUIRED_MODULES := \ IconShapePebbleOverlay \ IconShapeRoundedRectOverlay \ IconShapeSquircleOverlay \ + IconShapeTaperedRectOverlay \ IconShapeTeardropOverlay \ IconShapeVesselOverlay \ NavigationBarMode3ButtonOverlay \ diff --git a/packages/overlays/IconShapeHexagonOverlay/Android.mk b/packages/overlays/IconShapeTaperedRectOverlay/Android.mk index 16ef3995dedd..6f1bf2370a15 100644 --- a/packages/overlays/IconShapeHexagonOverlay/Android.mk +++ b/packages/overlays/IconShapeTaperedRectOverlay/Android.mk @@ -17,13 +17,13 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) -LOCAL_RRO_THEME := IconShapeHexagon +LOCAL_RRO_THEME := IconShapeTaperedRect LOCAL_PRODUCT_MODULE := true LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res -LOCAL_PACKAGE_NAME := IconShapeHexagonOverlay +LOCAL_PACKAGE_NAME := IconShapeTaperedRectOverlay LOCAL_SDK_VERSION := current include $(BUILD_RRO_PACKAGE) diff --git a/packages/overlays/IconShapeHexagonOverlay/AndroidManifest.xml b/packages/overlays/IconShapeTaperedRectOverlay/AndroidManifest.xml index bf408fd62569..61ed222327ef 100644 --- a/packages/overlays/IconShapeHexagonOverlay/AndroidManifest.xml +++ b/packages/overlays/IconShapeTaperedRectOverlay/AndroidManifest.xml @@ -15,7 +15,7 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.theme.icon.hexagon" + package="com.android.theme.icon.taperedrect" android:versionCode="1" android:versionName="1.0"> <overlay @@ -23,5 +23,5 @@ android:category="android.theme.customization.adaptive_icon_shape" android:priority="1"/> - <application android:label="@string/icon_shape_hexagon_overlay" android:hasCode="false"/> + <application android:label="@string/icon_shape_tapered_rect_overlay" android:hasCode="false"/> </manifest> diff --git a/packages/overlays/IconShapeHexagonOverlay/res/values/config.xml b/packages/overlays/IconShapeTaperedRectOverlay/res/values/config.xml index f7cb5951b4f1..8e80c9df1da3 100644 --- a/packages/overlays/IconShapeHexagonOverlay/res/values/config.xml +++ b/packages/overlays/IconShapeTaperedRectOverlay/res/values/config.xml @@ -16,12 +16,14 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Specifies the path that is used by AdaptiveIconDrawable class to crop launcher icons. --> - <string name="config_icon_mask" translatable="false">"M12,0 88,0 100,50 88,100 12,100 0,50 12,0 Z"</string> + <string name="config_icon_mask" translatable="false">"M20,0 80,0 100,20 100,80 80,100 20,100 0,80 0,20 20,0 Z"</string> <!-- Flag indicating whether round icons should be parsed from the application manifest. --> <bool name="config_useRoundIcon">false</bool> <!-- Corner radius of system dialogs --> <dimen name="config_dialogCornerRadius">0dp</dimen> <!-- Corner radius for bottom sheet system dialogs --> <dimen name="config_bottomDialogCornerRadius">0dp</dimen> + <!-- Tile stroke width --> + <dimen name="config_qsTileStrokeWidthInactive">10dp</dimen> </resources> diff --git a/packages/overlays/IconShapeHexagonOverlay/res/values/strings.xml b/packages/overlays/IconShapeTaperedRectOverlay/res/values/strings.xml index e00dc9d938ec..3f36598a89bc 100644 --- a/packages/overlays/IconShapeHexagonOverlay/res/values/strings.xml +++ b/packages/overlays/IconShapeTaperedRectOverlay/res/values/strings.xml @@ -14,7 +14,7 @@ ~ limitations under the License. --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- Hexagon icon overlay --> - <string name="icon_shape_hexagon_overlay" translatable="false">Hexagon</string> + <!-- Tapered rect icon overlay --> + <string name="icon_shape_tapered_rect_overlay" translatable="false">Tapered Rect</string> </resources> diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 552331ede99b..e4eb585e989d 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -18,6 +18,14 @@ package com.android.server; import static android.Manifest.permission.RECEIVE_DATA_ACTIVITY_CHANGE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_PROBES_ATTEMPTED_BITMASK; +import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_PROBES_SUCCEEDED_BITMASK; +import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_VALIDATION_RESULT; +import static android.net.ConnectivityDiagnosticsManager.DataStallReport.DETECTION_METHOD_DNS_EVENTS; +import static android.net.ConnectivityDiagnosticsManager.DataStallReport.DETECTION_METHOD_TCP_METRICS; +import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_DNS_CONSECUTIVE_TIMEOUTS; +import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS; +import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_PACKET_FAIL_RATE; import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; import static android.net.ConnectivityManager.NETID_UNSET; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; @@ -72,6 +80,7 @@ import android.net.ConnectionInfo; import android.net.ConnectivityDiagnosticsManager.ConnectivityReport; import android.net.ConnectivityDiagnosticsManager.DataStallReport; import android.net.ConnectivityManager; +import android.net.DataStallReportParcelable; import android.net.ICaptivePortal; import android.net.IConnectivityDiagnosticsCallback; import android.net.IConnectivityManager; @@ -108,6 +117,7 @@ import android.net.NetworkSpecifier; import android.net.NetworkStack; import android.net.NetworkStackClient; import android.net.NetworkState; +import android.net.NetworkTestResultParcelable; import android.net.NetworkUtils; import android.net.NetworkWatchlistManager; import android.net.PrivateDnsConfigParcel; @@ -2820,14 +2830,6 @@ public class ConnectivityService extends IConnectivityManager.Stub handleNetworkTested(nai, results.mTestResult, (results.mRedirectUrl == null) ? "" : results.mRedirectUrl); - - // Invoke ConnectivityReport generation for this Network test event. - final Message m = - mConnectivityDiagnosticsHandler.obtainMessage( - ConnectivityDiagnosticsHandler.EVENT_NETWORK_TESTED, - new ConnectivityReportEvent(results.mTimestampMillis, nai)); - m.setData(msg.getData()); - mConnectivityDiagnosticsHandler.sendMessage(m); break; } case EVENT_PROVISIONING_NOTIFICATION: { @@ -3006,23 +3008,33 @@ public class ConnectivityService extends IConnectivityManager.Stub @Override public void notifyNetworkTested(int testResult, @Nullable String redirectUrl) { - notifyNetworkTestedWithExtras(testResult, redirectUrl, SystemClock.elapsedRealtime(), - PersistableBundle.EMPTY); + // Legacy version of notifyNetworkTestedWithExtras. + // Would only be called if the system has a NetworkStack module older than the + // framework, which does not happen in practice. } @Override - public void notifyNetworkTestedWithExtras( - int testResult, - @Nullable String redirectUrl, - long timestampMillis, - @NonNull PersistableBundle extras) { - final Message msg = - mTrackerHandler.obtainMessage( - EVENT_NETWORK_TESTED, - new NetworkTestedResults( - mNetId, testResult, timestampMillis, redirectUrl)); - msg.setData(new Bundle(extras)); + public void notifyNetworkTestedWithExtras(NetworkTestResultParcelable p) { + final Message msg = mTrackerHandler.obtainMessage( + EVENT_NETWORK_TESTED, + new NetworkTestedResults( + mNetId, p.result, p.timestampMillis, p.redirectUrl)); mTrackerHandler.sendMessage(msg); + + // Invoke ConnectivityReport generation for this Network test event. + final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(mNetId); + if (nai == null) return; + final Message m = mConnectivityDiagnosticsHandler.obtainMessage( + ConnectivityDiagnosticsHandler.EVENT_NETWORK_TESTED, + new ConnectivityReportEvent(p.timestampMillis, nai)); + + final PersistableBundle extras = new PersistableBundle(); + extras.putInt(KEY_NETWORK_VALIDATION_RESULT, p.result); + extras.putInt(KEY_NETWORK_PROBES_SUCCEEDED_BITMASK, p.probesSucceeded); + extras.putInt(KEY_NETWORK_PROBES_ATTEMPTED_BITMASK, p.probesAttempted); + + m.setData(new Bundle(extras)); + mConnectivityDiagnosticsHandler.sendMessage(m); } @Override @@ -3071,12 +3083,25 @@ public class ConnectivityService extends IConnectivityManager.Stub } @Override - public void notifyDataStallSuspected( - long timestampMillis, int detectionMethod, PersistableBundle extras) { - final Message msg = - mConnectivityDiagnosticsHandler.obtainMessage( - ConnectivityDiagnosticsHandler.EVENT_DATA_STALL_SUSPECTED, - detectionMethod, mNetId, timestampMillis); + public void notifyDataStallSuspected(DataStallReportParcelable p) { + final Message msg = mConnectivityDiagnosticsHandler.obtainMessage( + ConnectivityDiagnosticsHandler.EVENT_DATA_STALL_SUSPECTED, + p.detectionMethod, mNetId, p.timestampMillis); + + final PersistableBundle extras = new PersistableBundle(); + switch (p.detectionMethod) { + case DETECTION_METHOD_DNS_EVENTS: + extras.putInt(KEY_DNS_CONSECUTIVE_TIMEOUTS, p.dnsConsecutiveTimeouts); + break; + case DETECTION_METHOD_TCP_METRICS: + extras.putInt(KEY_TCP_PACKET_FAIL_RATE, p.tcpPacketFailRate); + extras.putInt(KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS, + p.tcpMetricsCollectionPeriodMillis); + break; + default: + log("Unknown data stall detection method, ignoring: " + p.detectionMethod); + return; + } msg.setData(new Bundle(extras)); // NetworkStateTrackerHandler currently doesn't take any actions based on data diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index bb0c0cf79885..0bd134c8dfac 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5364,7 +5364,7 @@ public class ActivityManagerService extends IActivityManager.Stub return false; } - if (didSomething) { + if (!didSomething) { updateOomAdjLocked(app, OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN); checkTime(startTime, "attachApplicationLocked: after updateOomAdjLocked"); } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index c9ee47278796..e869e5799273 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -3639,17 +3639,22 @@ public final class ProcessList { final int packageCount = app.pkgList.size(); for (int j = 0; j < packageCount; j++) { final String packageName = app.pkgList.keyAt(j); - if (updateFrameworkRes || packagesToUpdate.contains(packageName)) { - try { - final ApplicationInfo ai = AppGlobals.getPackageManager() - .getApplicationInfo(packageName, STOCK_PM_FLAGS, app.userId); - if (ai != null) { - app.thread.scheduleApplicationInfoChanged(ai); - } - } catch (RemoteException e) { - Slog.w(TAG, String.format("Failed to update %s ApplicationInfo for %s", - packageName, app)); + if (!updateFrameworkRes && !packagesToUpdate.contains(packageName)) { + continue; + } + try { + final ApplicationInfo ai = AppGlobals.getPackageManager() + .getApplicationInfo(packageName, STOCK_PM_FLAGS, app.userId); + if (ai == null) { + continue; } + app.thread.scheduleApplicationInfoChanged(ai); + if (ai.packageName.equals(app.info.packageName)) { + app.info = ai; + } + } catch (RemoteException e) { + Slog.w(TAG, String.format("Failed to update %s ApplicationInfo for %s", + packageName, app)); } } } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index a1ec07cda8a8..fc6931d6ede2 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -86,7 +86,7 @@ class ProcessRecord implements WindowProcessListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "ProcessRecord" : TAG_AM; private final ActivityManagerService mService; // where we came from - final ApplicationInfo info; // all about the first app in the process + volatile ApplicationInfo info; // all about the first app in the process final ProcessInfo processInfo; // if non-null, process-specific manifest info final boolean isolated; // true if this is a special isolated process final boolean appZygote; // true if this is forked from the app zygote diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index 5ecaf6a148aa..093e906da65e 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -1955,6 +1955,7 @@ public class Vpn { profile.ipsecCaCert = caCert; // Start VPN profile + profile.setAllowedAlgorithms(Ikev2VpnProfile.DEFAULT_ALGORITHMS); startVpnProfilePrivileged(profile, VpnConfig.LEGACY_VPN, keyStore); return; case VpnProfile.TYPE_IKEV2_IPSEC_PSK: @@ -1963,6 +1964,7 @@ public class Vpn { Ikev2VpnProfile.encodeForIpsecSecret(profile.ipsecSecret.getBytes()); // Start VPN profile + profile.setAllowedAlgorithms(Ikev2VpnProfile.DEFAULT_ALGORITHMS); startVpnProfilePrivileged(profile, VpnConfig.LEGACY_VPN, keyStore); return; case VpnProfile.TYPE_L2TP_IPSEC_PSK: @@ -2359,7 +2361,7 @@ public class Vpn { final IkeSessionParams ikeSessionParams = VpnIkev2Utils.buildIkeSessionParams(mContext, mProfile, network); final ChildSessionParams childSessionParams = - VpnIkev2Utils.buildChildSessionParams(); + VpnIkev2Utils.buildChildSessionParams(mProfile.getAllowedAlgorithms()); // TODO: Remove the need for adding two unused addresses with // IPsec tunnels. diff --git a/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java index 3da304c07910..228966cbee5b 100644 --- a/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java +++ b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java @@ -24,7 +24,6 @@ import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_12; import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_16; import static android.net.ipsec.ike.SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_8; import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_AES_XCBC_96; -import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA1_96; import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_256_128; import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_384_192; import static android.net.ipsec.ike.SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA2_512_256; @@ -39,6 +38,7 @@ import android.content.Context; import android.net.Ikev2VpnProfile; import android.net.InetAddresses; import android.net.IpPrefix; +import android.net.IpSecAlgorithm; import android.net.IpSecTransform; import android.net.Network; import android.net.RouteInfo; @@ -83,6 +83,8 @@ import java.util.List; * @hide */ public class VpnIkev2Utils { + private static final String TAG = VpnIkev2Utils.class.getSimpleName(); + static IkeSessionParams buildIkeSessionParams( @NonNull Context context, @NonNull Ikev2VpnProfile profile, @NonNull Network network) { final IkeIdentification localId = parseIkeIdentification(profile.getUserIdentity()); @@ -103,11 +105,11 @@ public class VpnIkev2Utils { return ikeOptionsBuilder.build(); } - static ChildSessionParams buildChildSessionParams() { + static ChildSessionParams buildChildSessionParams(List<String> allowedAlgorithms) { final TunnelModeChildSessionParams.Builder childOptionsBuilder = new TunnelModeChildSessionParams.Builder(); - for (final ChildSaProposal childProposal : getChildSaProposals()) { + for (final ChildSaProposal childProposal : getChildSaProposals(allowedAlgorithms)) { childOptionsBuilder.addSaProposal(childProposal); } @@ -144,7 +146,7 @@ public class VpnIkev2Utils { } private static List<IkeSaProposal> getIkeSaProposals() { - // TODO: filter this based on allowedAlgorithms + // TODO: Add ability to filter this when IKEv2 API is made Public API final List<IkeSaProposal> proposals = new ArrayList<>(); // Encryption Algorithms: Currently only AES_CBC is supported. @@ -160,7 +162,6 @@ public class VpnIkev2Utils { normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_384_192); normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_256_128); normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_AES_XCBC_96); - normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA1_96); // Add AEAD options final IkeSaProposal.Builder aeadBuilder = new IkeSaProposal.Builder(); @@ -187,38 +188,59 @@ public class VpnIkev2Utils { return proposals; } - private static List<ChildSaProposal> getChildSaProposals() { - // TODO: filter this based on allowedAlgorithms + /** Builds a child SA proposal based on the allowed IPsec algorithms */ + private static List<ChildSaProposal> getChildSaProposals(List<String> allowedAlgorithms) { final List<ChildSaProposal> proposals = new ArrayList<>(); // Add non-AEAD options - final ChildSaProposal.Builder normalModeBuilder = new ChildSaProposal.Builder(); - - // Encryption Algorithms: Currently only AES_CBC is supported. - normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_256); - normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_192); - normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_128); + if (Ikev2VpnProfile.hasNormalModeAlgorithms(allowedAlgorithms)) { + final ChildSaProposal.Builder normalModeBuilder = new ChildSaProposal.Builder(); + + // Encryption Algorithms: + // AES-CBC is currently the only supported encryption algorithm. + normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_256); + normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_192); + normalModeBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_CBC, KEY_LEN_AES_128); + + // Authentication/Integrity Algorithms: + // Guaranteed by Ikev2VpnProfile constructor to contain at least one of these. + if (allowedAlgorithms.contains(IpSecAlgorithm.AUTH_HMAC_SHA512)) { + normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_512_256); + } + if (allowedAlgorithms.contains(IpSecAlgorithm.AUTH_HMAC_SHA384)) { + normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_384_192); + } + if (allowedAlgorithms.contains(IpSecAlgorithm.AUTH_HMAC_SHA256)) { + normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_256_128); + } - // Authentication/Integrity Algorithms - normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_512_256); - normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_384_192); - normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA2_256_128); - normalModeBuilder.addIntegrityAlgorithm(INTEGRITY_ALGORITHM_HMAC_SHA1_96); + ChildSaProposal proposal = normalModeBuilder.build(); + if (proposal.getIntegrityAlgorithms().isEmpty()) { + // Should be impossible; Verified in Ikev2VpnProfile. + Log.wtf(TAG, "Missing integrity algorithm when buildling Child SA proposal"); + } else { + proposals.add(normalModeBuilder.build()); + } + } // Add AEAD options - final ChildSaProposal.Builder aeadBuilder = new ChildSaProposal.Builder(); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_256); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_256); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_256); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_192); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_192); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_192); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_128); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_128); - aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_128); + if (Ikev2VpnProfile.hasAeadAlgorithms(allowedAlgorithms)) { + final ChildSaProposal.Builder aeadBuilder = new ChildSaProposal.Builder(); + + // AES-GCM is currently the only supported AEAD algorithm + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_256); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_256); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_256); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_192); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_192); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_192); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_16, KEY_LEN_AES_128); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_12, KEY_LEN_AES_128); + aeadBuilder.addEncryptionAlgorithm(ENCRYPTION_ALGORITHM_AES_GCM_8, KEY_LEN_AES_128); + + proposals.add(aeadBuilder.build()); + } - proposals.add(normalModeBuilder.build()); - proposals.add(aeadBuilder.build()); return proposals; } diff --git a/services/core/java/com/android/server/display/OverlayDisplayAdapter.java b/services/core/java/com/android/server/display/OverlayDisplayAdapter.java index c8e5f6c8f53b..8fb384070e25 100644 --- a/services/core/java/com/android/server/display/OverlayDisplayAdapter.java +++ b/services/core/java/com/android/server/display/OverlayDisplayAdapter.java @@ -16,12 +16,14 @@ package com.android.server.display; +import android.annotation.Nullable; import android.content.Context; import android.database.ContentObserver; import android.graphics.SurfaceTexture; import android.os.Handler; import android.os.IBinder; import android.provider.Settings; +import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Slog; import android.view.Display; @@ -54,6 +56,10 @@ import java.util.regex.Pattern; * {@link android.provider.Settings.Global#OVERLAY_DISPLAY_DEVICES} setting. This setting should be * formatted as follows: * <pre> + * [display1];[display2];... + * </pre> + * with each display specified as: + * <pre> * [mode1]|[mode2]|...,[flag1],[flag2],... * </pre> * with each mode specified as: @@ -63,22 +69,56 @@ import java.util.regex.Pattern; * Supported flags: * <ul> * <li><pre>secure</pre>: creates a secure display</li> + * <li><pre>own_content_only</pre>: only shows this display's own content</li> + * <li><pre>should_show_system_decorations</pre>: supports system decorations</li> * </ul> - * </p> + * </p><p> + * Example: + * <ul> + * <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li> + * <li><code>1920x1080/320,secure;1280x720/213</code>: make two overlays, the first at 1080p and + * secure; the second at 720p.</li> + * <li><code>1920x1080/320|3840x2160/640</code>: make one overlay that is 1920x1080 at + * 213dpi by default, but can also be upscaled to 3840x2160 at 640dpi by the system if the + * display device allows.</li> + * <li>If the value is empty, then no overlay display devices are created.</li> + * </ul></p> */ final class OverlayDisplayAdapter extends DisplayAdapter { static final String TAG = "OverlayDisplayAdapter"; static final boolean DEBUG = false; + /** + * When this flag is set, the overlay display is considered secure. + * @see DisplayDeviceInfo#FLAG_SECURE + */ + private static final String OVERLAY_DISPLAY_FLAG_SECURE = "secure"; + + /** + * When this flag is set, only show this display's own content; do not mirror the content of + * another display. + * @see DisplayDeviceInfo#FLAG_OWN_CONTENT_ONLY + */ + private static final String OVERLAY_DISPLAY_FLAG_OWN_CONTENT_ONLY = "own_content_only"; + + /** + * When this flag is set, the overlay display should support system decorations. + * @see DisplayDeviceInfo#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS + */ + private static final String OVERLAY_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS = + "should_show_system_decorations"; + private static final int MIN_WIDTH = 100; private static final int MIN_HEIGHT = 100; private static final int MAX_WIDTH = 4096; private static final int MAX_HEIGHT = 4096; - private static final Pattern DISPLAY_PATTERN = - Pattern.compile("([^,]+)(,[a-z]+)*"); - private static final Pattern MODE_PATTERN = - Pattern.compile("(\\d+)x(\\d+)/(\\d+)"); + private static final String DISPLAY_SPLITTER = ";"; + private static final String MODE_SPLITTER = "\\|"; + private static final String FLAG_SPLITTER = ","; + + private static final Pattern DISPLAY_PATTERN = Pattern.compile("([^,]+)(,[,_a-z]+)*"); + private static final Pattern MODE_PATTERN = Pattern.compile("(\\d+)x(\\d+)/(\\d+)"); // Unique id prefix for overlay displays. private static final String UNIQUE_ID_PREFIX = "overlay:"; @@ -154,7 +194,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { } int count = 0; - for (String part : value.split(";")) { + for (String part : value.split(DISPLAY_SPLITTER)) { Matcher displayMatcher = DISPLAY_PATTERN.matcher(part); if (displayMatcher.matches()) { if (count >= 4) { @@ -164,7 +204,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { String modeString = displayMatcher.group(1); String flagString = displayMatcher.group(2); ArrayList<OverlayMode> modes = new ArrayList<>(); - for (String mode : modeString.split("\\|")) { + for (String mode : modeString.split(MODE_SPLITTER)) { Matcher modeMatcher = MODE_PATTERN.matcher(mode); if (modeMatcher.matches()) { try { @@ -192,12 +232,13 @@ final class OverlayDisplayAdapter extends DisplayAdapter { com.android.internal.R.string.display_manager_overlay_display_name, number); int gravity = chooseOverlayGravity(number); - boolean secure = flagString != null && flagString.contains(",secure"); + OverlayFlags flags = OverlayFlags.parseFlags(flagString); Slog.i(TAG, "Showing overlay display device #" + number - + ": name=" + name + ", modes=" + Arrays.toString(modes.toArray())); + + ": name=" + name + ", modes=" + Arrays.toString(modes.toArray()) + + ", flags=" + flags); - mOverlays.add(new OverlayDisplayHandle(name, modes, gravity, secure, number)); + mOverlays.add(new OverlayDisplayHandle(name, modes, gravity, flags, number)); continue; } } @@ -223,7 +264,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private final String mName; private final float mRefreshRate; private final long mDisplayPresentationDeadlineNanos; - private final boolean mSecure; + private final OverlayFlags mFlags; private final List<OverlayMode> mRawModes; private final Display.Mode[] mModes; private final int mDefaultMode; @@ -234,16 +275,15 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private DisplayDeviceInfo mInfo; private int mActiveMode; - public OverlayDisplayDevice(IBinder displayToken, String name, + OverlayDisplayDevice(IBinder displayToken, String name, List<OverlayMode> modes, int activeMode, int defaultMode, float refreshRate, long presentationDeadlineNanos, - boolean secure, int state, - SurfaceTexture surfaceTexture, int number) { + OverlayFlags flags, int state, SurfaceTexture surfaceTexture, int number) { super(OverlayDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + number); mName = name; mRefreshRate = refreshRate; mDisplayPresentationDeadlineNanos = presentationDeadlineNanos; - mSecure = secure; + mFlags = flags; mState = state; mSurfaceTexture = surfaceTexture; mRawModes = modes; @@ -304,9 +344,15 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mInfo.presentationDeadlineNanos = mDisplayPresentationDeadlineNanos + 1000000000L / (int) mRefreshRate; // display's deadline + 1 frame mInfo.flags = DisplayDeviceInfo.FLAG_PRESENTATION; - if (mSecure) { + if (mFlags.mSecure) { mInfo.flags |= DisplayDeviceInfo.FLAG_SECURE; } + if (mFlags.mOwnContentOnly) { + mInfo.flags |= DisplayDeviceInfo.FLAG_OWN_CONTENT_ONLY; + } + if (mFlags.mShouldShowSystemDecorations) { + mInfo.flags |= DisplayDeviceInfo.FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS; + } mInfo.type = Display.TYPE_OVERLAY; mInfo.touch = DisplayDeviceInfo.TOUCH_VIRTUAL; mInfo.state = mState; @@ -363,19 +409,23 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private final String mName; private final List<OverlayMode> mModes; private final int mGravity; - private final boolean mSecure; + private final OverlayFlags mFlags; private final int mNumber; private OverlayDisplayWindow mWindow; private OverlayDisplayDevice mDevice; private int mActiveMode; - public OverlayDisplayHandle(String name, List<OverlayMode> modes, int gravity, - boolean secure, int number) { + OverlayDisplayHandle( + String name, + List<OverlayMode> modes, + int gravity, + OverlayFlags flags, + int number) { mName = name; mModes = modes; mGravity = gravity; - mSecure = secure; + mFlags = flags; mNumber = number; mActiveMode = 0; @@ -405,10 +455,10 @@ final class OverlayDisplayAdapter extends DisplayAdapter { public void onWindowCreated(SurfaceTexture surfaceTexture, float refreshRate, long presentationDeadlineNanos, int state) { synchronized (getSyncRoot()) { - IBinder displayToken = SurfaceControl.createDisplay(mName, mSecure); + IBinder displayToken = SurfaceControl.createDisplay(mName, mFlags.mSecure); mDevice = new OverlayDisplayDevice(displayToken, mName, mModes, mActiveMode, DEFAULT_MODE_INDEX, refreshRate, presentationDeadlineNanos, - mSecure, state, surfaceTexture, mNumber) { + mFlags, state, surfaceTexture, mNumber) { @Override public void onModeChangedLocked(int index) { onActiveModeChangedLocked(index); @@ -446,7 +496,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { pw.println(" mModes=" + Arrays.toString(mModes.toArray())); pw.println(" mActiveMode=" + mActiveMode); pw.println(" mGravity=" + mGravity); - pw.println(" mSecure=" + mSecure); + pw.println(" mFlags=" + mFlags); pw.println(" mNumber=" + mNumber); // Try to dump the window state. @@ -463,8 +513,8 @@ final class OverlayDisplayAdapter extends DisplayAdapter { public void run() { OverlayMode mode = mModes.get(mActiveMode); OverlayDisplayWindow window = new OverlayDisplayWindow(getContext(), - mName, mode.mWidth, mode.mHeight, mode.mDensityDpi, mGravity, mSecure, - OverlayDisplayHandle.this); + mName, mode.mWidth, mode.mHeight, mode.mDensityDpi, mGravity, + mFlags.mSecure, OverlayDisplayHandle.this); window.show(); synchronized (getSyncRoot()) { @@ -531,4 +581,60 @@ final class OverlayDisplayAdapter extends DisplayAdapter { .toString(); } } + + /** Represents the flags of the overlay display. */ + private static final class OverlayFlags { + /** See {@link #OVERLAY_DISPLAY_FLAG_SECURE}. */ + final boolean mSecure; + + /** See {@link #OVERLAY_DISPLAY_FLAG_OWN_CONTENT_ONLY}. */ + final boolean mOwnContentOnly; + + /** See {@link #OVERLAY_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS}. */ + final boolean mShouldShowSystemDecorations; + + OverlayFlags( + boolean secure, + boolean ownContentOnly, + boolean shouldShowSystemDecorations) { + mSecure = secure; + mOwnContentOnly = ownContentOnly; + mShouldShowSystemDecorations = shouldShowSystemDecorations; + } + + static OverlayFlags parseFlags(@Nullable String flagString) { + if (TextUtils.isEmpty(flagString)) { + return new OverlayFlags( + false /* secure */, + false /* ownContentOnly */, + false /* shouldShowSystemDecorations */); + } + + boolean secure = false; + boolean ownContentOnly = false; + boolean shouldShowSystemDecorations = false; + for (String flag: flagString.split(FLAG_SPLITTER)) { + if (OVERLAY_DISPLAY_FLAG_SECURE.equals(flag)) { + secure = true; + } + if (OVERLAY_DISPLAY_FLAG_OWN_CONTENT_ONLY.equals(flag)) { + ownContentOnly = true; + } + if (OVERLAY_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS.equals(flag)) { + shouldShowSystemDecorations = true; + } + } + return new OverlayFlags(secure, ownContentOnly, shouldShowSystemDecorations); + } + + @Override + public String toString() { + return new StringBuilder("{") + .append("secure=").append(mSecure) + .append(", ownContentOnly=").append(mOwnContentOnly) + .append(", shouldShowSystemDecorations=").append(mShouldShowSystemDecorations) + .append("}") + .toString(); + } + } } diff --git a/services/core/java/com/android/server/net/NetworkStatsFactory.java b/services/core/java/com/android/server/net/NetworkStatsFactory.java index 75ffe35674d1..3dac106418c5 100644 --- a/services/core/java/com/android/server/net/NetworkStatsFactory.java +++ b/services/core/java/com/android/server/net/NetworkStatsFactory.java @@ -385,11 +385,10 @@ public class NetworkStatsFactory { // Migrate data usage over a VPN to the TUN network. for (VpnInfo info : vpnArray) { delta.migrateTun(info.ownerUid, info.vpnIface, info.underlyingIfaces); + // Filter out debug entries as that may lead to over counting. + delta.filterDebugEntries(); } - // Filter out debug entries as that may lead to over counting. - delta.filterDebugEntries(); - // Update mTunAnd464xlatAdjustedStats with migrated delta. mTunAnd464xlatAdjustedStats.combineAllValues(delta); mTunAnd464xlatAdjustedStats.setElapsedRealtime(uidDetailStats.getElapsedRealtime()); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 2f76a1f9e246..76acf57db408 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -512,7 +512,7 @@ public class NotificationManagerService extends SystemService { private float mMaxPackageEnqueueRate = DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE; private NotificationHistoryManager mHistoryManager; - private SnoozeHelper mSnoozeHelper; + protected SnoozeHelper mSnoozeHelper; private GroupHelper mGroupHelper; private int mAutoGroupAtCount; private boolean mIsTelevision; @@ -7913,7 +7913,7 @@ public class NotificationManagerService extends SystemService { void snoozeNotificationInt(String key, long duration, String snoozeCriterionId, ManagedServiceInfo listener) { String listenerName = listener == null ? null : listener.component.toShortString(); - if (duration <= 0 && snoozeCriterionId == null || key == null) { + if ((duration <= 0 && snoozeCriterionId == null) || key == null) { return; } diff --git a/services/core/java/com/android/server/notification/NotificationShellCmd.java b/services/core/java/com/android/server/notification/NotificationShellCmd.java index e4a17740b0b7..da7864ba32c4 100644 --- a/services/core/java/com/android/server/notification/NotificationShellCmd.java +++ b/services/core/java/com/android/server/notification/NotificationShellCmd.java @@ -50,6 +50,7 @@ import android.util.Slog; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.Collections; +import java.util.Date; /** * Implementation of `cmd notification` in NotificationManagerService. @@ -73,7 +74,12 @@ public class NotificationShellCmd extends ShellCommand { + " set_bubbles PACKAGE PREFERENCE (0=none 1=all 2=selected) " + "[user_id (current user if not specified)]\n" + " set_bubbles_channel PACKAGE CHANNEL_ID ALLOW " - + "[user_id (current user if not specified)]\n"; + + "[user_id (current user if not specified)]\n" + + " list\n" + + " get <notification-key>\n" + + " snooze --for <msec> <notification-key>\n" + + " unsnooze <notification-key>\n" + ; private static final String NOTIFY_USAGE = "usage: cmd notification post [flags] <tag> <text>\n\n" @@ -118,6 +124,10 @@ public class NotificationShellCmd extends ShellCommand { mPm = mDirectService.getContext().getPackageManager(); } + protected boolean checkShellCommandPermission(int callingUid) { + return (callingUid == Process.ROOT_UID || callingUid == Process.SHELL_UID); + } + @Override public int onCommand(String cmd) { if (cmd == null) { @@ -140,7 +150,17 @@ public class NotificationShellCmd extends ShellCommand { } finally { Binder.restoreCallingIdentity(identity); } + final PrintWriter pw = getOutPrintWriter(); + + if (!checkShellCommandPermission(callingUid)) { + Slog.e(TAG, "error: permission denied: callingUid=" + + callingUid + " callingPackage=" + callingPackage); + pw.println("error: permission denied: callingUid=" + + callingUid + " callingPackage=" + callingPackage); + return 255; + } + try { switch (cmd.replace('-', '_')) { case "set_dnd": { @@ -316,6 +336,100 @@ public class NotificationShellCmd extends ShellCommand { case "notify": doNotify(pw, callingPackage, callingUid); break; + case "list": + for (String key : mDirectService.mNotificationsByKey.keySet()) { + pw.println(key); + } + break; + case "get": { + final String key = getNextArgRequired(); + final NotificationRecord nr = mDirectService.getNotificationRecord(key); + if (nr != null) { + nr.dump(pw, "", mDirectService.getContext(), false); + } else { + pw.println("error: no active notification matching key: " + key); + return 1; + } + break; + } + case "snoozed": { + final StringBuilder sb = new StringBuilder(); + final SnoozeHelper sh = mDirectService.mSnoozeHelper; + for (NotificationRecord nr : sh.getSnoozed()) { + final String pkg = nr.getSbn().getPackageName(); + final String key = nr.getKey(); + pw.println(key + " snoozed, time=" + + sh.getSnoozeTimeForUnpostedNotification( + nr.getUserId(), pkg, key) + + " context=" + + sh.getSnoozeContextForUnpostedNotification( + nr.getUserId(), pkg, key)); + } + break; + } + case "unsnooze": { + boolean mute = false; + String key = getNextArgRequired(); + if ("--mute".equals(key)) { + mute = true; + key = getNextArgRequired(); + } + if (null != mDirectService.mSnoozeHelper.getNotification(key)) { + pw.println("unsnoozing: " + key); + mDirectService.unsnoozeNotificationInt(key, null, mute); + } else { + pw.println("error: no snoozed otification matching key: " + key); + return 1; + } + break; + } + case "snooze": { + String subflag = getNextArg(); + if (subflag == null) { + subflag = "help"; + } else if (subflag.startsWith("--")) { + subflag = subflag.substring(2); + } + String flagarg = getNextArg(); + String key = getNextArg(); + if (key == null) subflag = "help"; + String criterion = null; + long duration = 0; + switch (subflag) { + case "context": + case "condition": + case "criterion": + criterion = flagarg; + break; + case "until": + case "for": + case "duration": + duration = Long.parseLong(flagarg); + break; + default: + pw.println("usage: cmd notification snooze (--for <msec> | " + + "--context <snooze-criterion-id>) <key>"); + return 1; + } + if (null == mDirectService.getNotificationRecord(key)) { + pw.println("error: no notification matching key: " + key); + return 1; + } + if (duration > 0 || criterion != null) { + if (duration > 0) { + pw.println(String.format("snoozing <%s> until time: %s", key, + new Date(System.currentTimeMillis() + duration))); + } else { + pw.println(String.format("snoozing <%s> until criterion: %s", key, + criterion)); + } + mDirectService.snoozeNotificationInt(key, duration, criterion, null); + } else { + pw.println("error: invalid value for --" + subflag + ": " + flagarg); + return 1; + } + break; + } default: return handleDefaultCommands(cmd); } diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java index a4b99b376b30..ec0fc4a34387 100644 --- a/services/core/java/com/android/server/notification/PreferencesHelper.java +++ b/services/core/java/com/android/server/notification/PreferencesHelper.java @@ -166,13 +166,6 @@ public class PreferencesHelper implements RankingConfig { private boolean mAllowInvalidShortcuts = false; - private static final String BADGING_FORCED_TRUE = "force_badging_true_for_bug"; - - // STOPSHIP (b/142218092) this should be removed before ship - static boolean wasBadgingForcedTrue(Context context) { - return Settings.Secure.getInt(context.getContentResolver(), BADGING_FORCED_TRUE, 0) != 0; - } - public PreferencesHelper(Context context, PackageManager pm, RankingHandler rankingHandler, ZenModeHelper zenHelper, NotificationChannelLogger notificationChannelLogger, AppOpsManager appOpsManager) { @@ -183,14 +176,6 @@ public class PreferencesHelper implements RankingConfig { mNotificationChannelLogger = notificationChannelLogger; mAppOps = appOpsManager; - // STOPSHIP (b/142218092) this should be removed before ship - if (!wasBadgingForcedTrue(context)) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.NOTIFICATION_BADGING, - DEFAULT_SHOW_BADGE ? 1 : 0); - Settings.Secure.putInt(context.getContentResolver(), BADGING_FORCED_TRUE, 1); - } - updateBadgingEnabled(); updateBubblesEnabled(); syncChannelsBypassingDnd(mContext.getUserId()); diff --git a/services/core/java/com/android/server/notification/ShortcutHelper.java b/services/core/java/com/android/server/notification/ShortcutHelper.java index 94f69e9c73b3..e79d33fa5f7a 100644 --- a/services/core/java/com/android/server/notification/ShortcutHelper.java +++ b/services/core/java/com/android/server/notification/ShortcutHelper.java @@ -18,7 +18,7 @@ package com.android.server.notification; import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_CACHED; import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC; -import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED; +import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED_BY_ANY_LAUNCHER; import android.annotation.NonNull; import android.content.IntentFilter; @@ -176,7 +176,8 @@ public class ShortcutHelper { LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery(); query.setPackage(packageName); query.setShortcutIds(Arrays.asList(shortcutId)); - query.setQueryFlags(FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED | FLAG_MATCH_CACHED); + query.setQueryFlags( + FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED_BY_ANY_LAUNCHER | FLAG_MATCH_CACHED); List<ShortcutInfo> shortcuts = mLauncherAppsService.getShortcuts(query, user); ShortcutInfo info = shortcuts != null && shortcuts.size() > 0 ? shortcuts.get(0) diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index 1c41c2eb4702..4872b66ff1b4 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -60,7 +60,6 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.Set; @@ -290,6 +289,21 @@ public abstract class ApexManager { abstract void registerApkInApex(AndroidPackage pkg); /** + * Reports error raised during installation of apk-in-apex. + * + * @param scanDir the directory of the apex inside which apk-in-apex resides. + */ + abstract void reportErrorWithApkInApex(String scanDirPath); + + /** + * Returns true if there were no errors when installing apk-in-apex inside + * {@param apexPackageName}, otherwise false. + * + * @param apexPackageName Package name of the apk container of apex + */ + abstract boolean isApkInApexInstallSuccess(String apexPackageName); + + /** * Returns list of {@code packageName} of apks inside the given apex. * @param apexPackageName Package name of the apk container of apex */ @@ -368,6 +382,13 @@ public abstract class ApexManager { @GuardedBy("mLock") private ArrayMap<String, List<String>> mApksInApex = new ArrayMap<>(); + /** + * Contains the list of {@code Exception}s that were raised when installing apk-in-apex + * inside {@code apexModuleName}. + */ + @GuardedBy("mLock") + private Set<String> mErrorWithApkInApex = new ArraySet<>(); + @GuardedBy("mLock") private List<PackageInfo> mAllPackagesCache; @@ -733,9 +754,7 @@ public abstract class ApexManager { @Override void registerApkInApex(AndroidPackage pkg) { synchronized (mLock) { - final Iterator<ActiveApexInfo> it = mActiveApexInfosCache.iterator(); - while (it.hasNext()) { - final ActiveApexInfo aai = it.next(); + for (ActiveApexInfo aai : mActiveApexInfosCache) { if (pkg.getBaseCodePath().startsWith(aai.apexDirectory.getAbsolutePath())) { List<String> apks = mApksInApex.get(aai.apexModuleName); if (apks == null) { @@ -749,6 +768,30 @@ public abstract class ApexManager { } @Override + void reportErrorWithApkInApex(String scanDirPath) { + synchronized (mLock) { + for (ActiveApexInfo aai : mActiveApexInfosCache) { + if (scanDirPath.startsWith(aai.apexDirectory.getAbsolutePath())) { + mErrorWithApkInApex.add(aai.apexModuleName); + } + } + } + } + + @Override + boolean isApkInApexInstallSuccess(String apexPackageName) { + synchronized (mLock) { + Preconditions.checkState(mPackageNameToApexModuleName != null, + "APEX packages have not been scanned"); + String moduleName = mPackageNameToApexModuleName.get(apexPackageName); + if (moduleName == null) { + return false; + } + return !mErrorWithApkInApex.contains(moduleName); + } + } + + @Override List<String> getApksInApex(String apexPackageName) { synchronized (mLock) { Preconditions.checkState(mPackageNameToApexModuleName != null, @@ -1040,6 +1083,16 @@ public abstract class ApexManager { } @Override + void reportErrorWithApkInApex(String scanDirPath) { + // No-op + } + + @Override + boolean isApkInApexInstallSuccess(String apexPackageName) { + return true; + } + + @Override List<String> getApksInApex(String apexPackageName) { return Collections.emptyList(); } diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java index f1e14331e33f..3f6b8e92ef74 100644 --- a/services/core/java/com/android/server/pm/ComponentResolver.java +++ b/services/core/java/com/android/server/pm/ComponentResolver.java @@ -33,7 +33,6 @@ import android.content.pm.AuxiliaryResolveInfo; import android.content.pm.InstantAppResolveInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; -import android.content.pm.PackageManagerInternal.PrivateResolveFlags; import android.content.pm.PackageUserState; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; @@ -261,10 +260,9 @@ public class ComponentResolver { @Nullable List<ResolveInfo> queryActivities(Intent intent, String resolvedType, int flags, - @PrivateResolveFlags int privateResolveFlags, int userId) { + int userId) { synchronized (mLock) { - return mActivities.queryIntent( - intent, resolvedType, flags, privateResolveFlags, userId); + return mActivities.queryIntent(intent, resolvedType, flags, userId); } } @@ -427,7 +425,7 @@ public class ComponentResolver { @Nullable List<ResolveInfo> queryReceivers(Intent intent, String resolvedType, int flags, int userId) { synchronized (mLock) { - return mReceivers.queryIntent(intent, resolvedType, flags, 0, userId); + return mReceivers.queryIntent(intent, resolvedType, flags, userId); } } @@ -1293,12 +1291,11 @@ public class ComponentResolver { } List<ResolveInfo> queryIntent(Intent intent, String resolvedType, int flags, - int privateResolveFlags, int userId) { + int userId) { if (!sUserManager.exists(userId)) { return null; } mFlags = flags; - mPrivateResolveFlags = privateResolveFlags; return super.queryIntent(intent, resolvedType, (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId); @@ -1495,11 +1492,6 @@ public class ComponentResolver { } return null; } - final boolean matchNonBrowserOnly = - (mPrivateResolveFlags & PackageManagerInternal.RESOLVE_NON_BROWSER_ONLY) != 0; - if (matchNonBrowserOnly && info.handleAllWebDataURI()) { - return null; - } final ResolveInfo res = new ResolveInfo(); res.activityInfo = ai; if ((mFlags & PackageManager.GET_RESOLVED_FILTER) != 0) { @@ -1579,7 +1571,6 @@ public class ComponentResolver { private final ArrayMap<ComponentName, ParsedActivity> mActivities = new ArrayMap<>(); private int mFlags; - private int mPrivateResolveFlags; } // Both receivers and activities share a class, but point to different get methods diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index 385ace8a511b..c6d08c36631a 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -16,11 +16,15 @@ package com.android.server.pm; +import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT; + import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerInternal; +import android.app.ActivityOptions; import android.app.AppGlobals; import android.app.IApplicationThread; import android.app.PendingIntent; @@ -864,6 +868,14 @@ public class LauncherAppsService extends SystemService { } // Note the target activity doesn't have to be exported. + // Flag for bubble + ActivityOptions options = ActivityOptions.fromBundle(startActivityOptions); + if (options != null && options.isApplyActivityFlagsForBubbles()) { + // Flag for bubble to make behaviour match documentLaunchMode=always. + intents[0].addFlags(FLAG_ACTIVITY_NEW_DOCUMENT); + intents[0].addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); + } + intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intents[0].setSourceBounds(sourceBounds); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index d9275f59cbda..33a11166d832 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1122,21 +1122,52 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void handleStreamValidateAndCommit() { - boolean success = streamValidateAndCommit(); + PackageManagerException unrecoverableFailure = null; + // This will track whether the session and any children were validated and are ready to + // progress to the next phase of install + boolean allSessionsReady = false; + try { + allSessionsReady = streamValidateAndCommit(); + } catch (PackageManagerException e) { + unrecoverableFailure = e; + } if (isMultiPackage()) { - for (int i = mChildSessionIds.size() - 1; i >= 0; --i) { + int childCount = mChildSessionIds.size(); + + // This will contain all child sessions that do not encounter an unrecoverable failure + ArrayList<PackageInstallerSession> nonFailingSessions = new ArrayList<>(childCount); + + for (int i = childCount - 1; i >= 0; --i) { final int childSessionId = mChildSessionIds.keyAt(i); // commit all children, regardless if any of them fail; we'll throw/return // as appropriate once all children have been processed - if (!mSessionProvider.getSession(childSessionId) - .streamValidateAndCommit()) { - success = false; + try { + PackageInstallerSession session = mSessionProvider.getSession(childSessionId); + if (!session.streamValidateAndCommit()) { + allSessionsReady = false; + } + nonFailingSessions.add(session); + } catch (PackageManagerException e) { + allSessionsReady = false; + if (unrecoverableFailure == null) { + unrecoverableFailure = e; + } + } + } + // If we encountered any unrecoverable failures, destroy all + // other impacted sessions besides the parent; that will be cleaned up by the + // ChildStatusIntentReceiver. + if (unrecoverableFailure != null) { + // fail other child sessions that did not already fail + for (int i = nonFailingSessions.size() - 1; i >= 0; --i) { + PackageInstallerSession session = nonFailingSessions.get(i); + session.onSessionVerificationFailure(unrecoverableFailure); } } } - if (!success) { + if (!allSessionsReady) { return; } @@ -1216,14 +1247,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mStatusReceiver.sendIntent(mContext, 0, intent, null, null); } catch (IntentSender.SendIntentException ignore) { } - } else { + } else { // failure, let's forward and clean up this session. intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, PackageInstallerSession.this.sessionId); mChildSessionsRemaining.clear(); // we're done. Don't send any more. - try { - mStatusReceiver.sendIntent(mContext, 0, intent, null, null); - } catch (IntentSender.SendIntentException ignore) { - } + onSessionVerificationFailure(status, + intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)); } }); } @@ -1329,7 +1358,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { return true; } - private boolean streamValidateAndCommit() { + /** + * Returns true if the session is successfully validated and committed. Returns false if the + * dataloader could not be prepared. This can be called multiple times so long as no + * exception is thrown. + * @throws PackageManagerException on an unrecoverable error. + */ + private boolean streamValidateAndCommit() throws PackageManagerException { synchronized (mLock) { if (mCommitted) { return true; @@ -1349,7 +1384,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mCommitted = true; } - return true; } @@ -1449,10 +1483,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * Prepare DataLoader and stream content for DataLoader sessions. * Validate the contents of all session. * - * @return false if validation failed. + * @return false if the data loader could not be prepared. + * @throws PackageManagerException when an unrecoverable exception is encountered */ @GuardedBy("mLock") - private boolean streamAndValidateLocked() { + private boolean streamAndValidateLocked() throws PackageManagerException { try { // Read transfers from the original owner stay open, but as the session's data cannot // be modified anymore, there is no leak of information. For staged sessions, further @@ -1472,16 +1507,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (params.isStaged) { mStagingManager.checkNonOverlappingWithStagedSessions(this); } - return true; } catch (PackageManagerException e) { - onSessionVerificationFailure(e); + throw onSessionVerificationFailure(e); } catch (Throwable e) { // Convert all exceptions into package manager exceptions as only those are handled // in the code above. - onSessionVerificationFailure(new PackageManagerException(e)); + throw onSessionVerificationFailure(new PackageManagerException(e)); } - return false; } private PackageManagerException onSessionVerificationFailure(PackageManagerException e) { @@ -2691,17 +2724,23 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } break; } + case IDataLoaderStatusListener.DATA_LOADER_UNAVAILABLE: { + // Don't fail or commit the session. Allow caller to commit again. + sendPendingStreaming(mContext, mRemoteStatusReceiver, sessionId, + "DataLoader unavailable"); + break; + } case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: mDataLoaderFinished = true; dispatchSessionVerificationFailure(INSTALL_FAILED_MEDIA_UNAVAILABLE, "DataLoader reported unrecoverable failure."); - return; + break; } } catch (RemoteException e) { // In case of streaming failure we don't want to fail or commit the session. // Just return from this method and allow caller to commit again. sendPendingStreaming(mContext, mRemoteStatusReceiver, sessionId, - new StreamingException(e)); + e.getMessage()); } } }; @@ -3059,13 +3098,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private static void sendPendingStreaming(Context context, IntentSender target, int sessionId, - Throwable cause) { + @Nullable String cause) { final Intent intent = new Intent(); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); intent.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_STREAMING); - if (cause != null && !TextUtils.isEmpty(cause.getMessage())) { + if (!TextUtils.isEmpty(cause)) { intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, - "Staging Image Not Ready [" + cause.getMessage() + "]"); + "Staging Image Not Ready [" + cause + "]"); } else { intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, "Staging Image Not Ready"); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 90ca83e0770f..a4d74f0d7fc3 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4420,6 +4420,11 @@ public class PackageManagerService extends IPackageManager.Stub if (getInstantAppPackageName(callingUid) != null) { throw new SecurityException("Instant applications don't have access to this method"); } + if (!mUserManager.exists(userId)) { + throw new SecurityException("User doesn't exist"); + } + mPermissionManager.enforceCrossUserPermission( + callingUid, userId, false, false, "checkPackageStartable"); final boolean userKeyUnlocked = StorageManager.isUserKeyUnlocked(userId); synchronized (mLock) { final PackageSetting ps = mSettings.mPackages.get(packageName); @@ -4944,6 +4949,21 @@ public class PackageManagerService extends IPackageManager.Stub } return ai; } + if ((flags & PackageManager.MATCH_APEX) != 0) { + // For APKs, PackageInfo.applicationInfo is not exactly the same as ApplicationInfo + // returned from getApplicationInfo, but for APEX packages difference shouldn't be + // very big. + // TODO(b/155328545): generate proper application info for APEXes as well. + int apexFlags = ApexManager.MATCH_ACTIVE_PACKAGE; + if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) { + apexFlags = ApexManager.MATCH_FACTORY_PACKAGE; + } + final PackageInfo pi = mApexManager.getPackageInfo(packageName, apexFlags); + if (pi == null) { + return null; + } + return pi.applicationInfo; + } if ("android".equals(packageName)||"system".equals(packageName)) { return mAndroidApplication; } @@ -5777,9 +5797,15 @@ public class PackageManagerService extends IPackageManager.Stub @Override public ChangedPackages getChangedPackages(int sequenceNumber, int userId) { - if (getInstantAppPackageName(Binder.getCallingUid()) != null) { + final int callingUid = Binder.getCallingUid(); + if (getInstantAppPackageName(callingUid) != null) { + return null; + } + if (!mUserManager.exists(userId)) { return null; } + mPermissionManager.enforceCrossUserPermission( + callingUid, userId, false, false, "getChangedPackages"); synchronized (mLock) { if (sequenceNumber >= mChangedPackagesSequenceNumber) { return null; @@ -6388,6 +6414,11 @@ public class PackageManagerService extends IPackageManager.Stub final ResolveInfo bestChoice = chooseBestActivity( intent, resolvedType, flags, privateResolveFlags, query, userId); + final boolean nonBrowserOnly = + (privateResolveFlags & PackageManagerInternal.RESOLVE_NON_BROWSER_ONLY) != 0; + if (nonBrowserOnly && bestChoice != null && bestChoice.handleAllWebDataURI) { + return null; + } return bestChoice; } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); @@ -6575,9 +6606,13 @@ public class PackageManagerService extends IPackageManager.Stub if (ri != null) { return ri; } - // If we have an ephemeral app, use it + int browserCount = 0; for (int i = 0; i < N; i++) { ri = query.get(i); + if (ri.handleAllWebDataURI) { + browserCount++; + } + // If we have an ephemeral app, use it if (ri.activityInfo.applicationInfo.isInstantApp()) { final String packageName = ri.activityInfo.packageName; final PackageSetting ps = mSettings.mPackages.get(packageName); @@ -6593,6 +6628,9 @@ public class PackageManagerService extends IPackageManager.Stub return null; } ri = new ResolveInfo(mResolveInfo); + // if all resolve options are browsers, mark the resolver's info as if it were + // also a browser. + ri.handleAllWebDataURI = browserCount == N; ri.activityInfo = new ActivityInfo(ri.activityInfo); ri.activityInfo.labelRes = ResolverActivity.getLabelRes(intent.getAction()); // If all of the options come from the same package, show the application's @@ -7103,7 +7141,7 @@ public class PackageManagerService extends IPackageManager.Stub // Check for results in the current profile. result = filterIfNotSystemUser(mComponentResolver.queryActivities( - intent, resolvedType, flags, privateResolveFlags, userId), userId); + intent, resolvedType, flags, userId), userId); addInstant = isInstantAppResolutionAllowed(intent, result, userId, false /*skipPackageCheck*/); // Check for cross profile results. @@ -7202,7 +7240,7 @@ public class PackageManagerService extends IPackageManager.Stub | PackageManager.GET_RESOLVED_FILTER | PackageManager.MATCH_INSTANT | PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY, - 0, userId); + userId); for (int i = instantApps.size() - 1; i >= 0; --i) { final ResolveInfo info = instantApps.get(i); final String packageName = info.activityInfo.packageName; @@ -7306,7 +7344,7 @@ public class PackageManagerService extends IPackageManager.Stub return null; } List<ResolveInfo> resultTargetUser = mComponentResolver.queryActivities(intent, - resolvedType, flags, 0, parentUserId); + resolvedType, flags, parentUserId); if (resultTargetUser == null || resultTargetUser.isEmpty()) { return null; @@ -7754,7 +7792,7 @@ public class PackageManagerService extends IPackageManager.Stub String resolvedType, int flags, int sourceUserId) { int targetUserId = filter.getTargetUserId(); List<ResolveInfo> resultTargetUser = mComponentResolver.queryActivities(intent, - resolvedType, flags, 0, targetUserId); + resolvedType, flags, targetUserId); if (resultTargetUser != null && isUserEnabled(targetUserId)) { // If all the matches in the target profile are suspended, return null. for (int i = resultTargetUser.size() - 1; i >= 0; i--) { @@ -8772,8 +8810,10 @@ public class PackageManagerService extends IPackageManager.Stub private ProviderInfo resolveContentProviderInternal(String name, int flags, int userId) { if (!mUserManager.exists(userId)) return null; - flags = updateFlagsForComponent(flags, userId); final int callingUid = Binder.getCallingUid(); + mPermissionManager.enforceCrossUserPermission( + callingUid, userId, false, false, "resolveContentProvider"); + flags = updateFlagsForComponent(flags, userId); final ProviderInfo providerInfo = mComponentResolver.queryProvider(name, flags, userId); if (providerInfo == null) { return null; @@ -8972,6 +9012,10 @@ public class PackageManagerService extends IPackageManager.Stub + parseResult.scanFile, throwable); } + if ((scanFlags & SCAN_AS_APK_IN_APEX) != 0 && errorCode != INSTALL_SUCCEEDED) { + mApexManager.reportErrorWithApkInApex(scanDir.getAbsolutePath()); + } + // Delete invalid userdata apps if ((scanFlags & SCAN_AS_SYSTEM) == 0 && errorCode != PackageManager.INSTALL_SUCCEEDED) { @@ -9369,7 +9413,8 @@ public class PackageManagerService extends IPackageManager.Stub getSharedLibLatestVersionSetting(scanResult))), mSettings.mKeySetManagerService); appIdCreated = optimisticallyRegisterAppId(scanResult); - commitReconciledScanResultLocked(reconcileResult.get(pkgName)); + commitReconciledScanResultLocked( + reconcileResult.get(pkgName), mUserManager.getUserIds()); } catch (PackageManagerException e) { if (appIdCreated) { cleanUpAppIdCreation(scanResult); @@ -9390,8 +9435,13 @@ public class PackageManagerService extends IPackageManager.Stub // TODO:(b/135203078): Move to parsing private static void renameStaticSharedLibraryPackage(ParsedPackage parsedPackage) { // Derive the new package synthetic package name - parsedPackage.setPackageName(parsedPackage.getPackageName() + STATIC_SHARED_LIB_DELIMITER - + parsedPackage.getStaticSharedLibVersion()); + parsedPackage.setPackageName(toStaticSharedLibraryPackageName( + parsedPackage.getPackageName(), parsedPackage.getStaticSharedLibVersion())); + } + + private static String toStaticSharedLibraryPackageName( + String packageName, long libraryVersion) { + return packageName + STATIC_SHARED_LIB_DELIMITER + libraryVersion; } static String fixProcessName(String defProcessName, String processName) { @@ -10332,7 +10382,7 @@ public class PackageManagerService extends IPackageManager.Stub final ArrayList<SharedLibraryInfo> sharedLibraryInfos = collectSharedLibraryInfos( pkgSetting.pkg, availablePackages, mSharedLibraries, null); executeSharedLibrariesUpdateLPr(pkg, pkgSetting, changingLib, changingLibSetting, - sharedLibraryInfos); + sharedLibraryInfos, mUserManager.getUserIds()); } private static ArrayList<SharedLibraryInfo> collectSharedLibraryInfos(AndroidPackage pkg, @@ -10369,7 +10419,7 @@ public class PackageManagerService extends IPackageManager.Stub private void executeSharedLibrariesUpdateLPr(AndroidPackage pkg, @NonNull PackageSetting pkgSetting, @Nullable AndroidPackage changingLib, @Nullable PackageSetting changingLibSetting, - ArrayList<SharedLibraryInfo> usesLibraryInfos) { + ArrayList<SharedLibraryInfo> usesLibraryInfos, int[] allUsers) { // If the package provides libraries, clear their old dependencies. // This method will set them up again. applyDefiningSharedLibraryUpdateLocked(pkg, null, (definingLibrary, dependency) -> { @@ -10385,6 +10435,30 @@ public class PackageManagerService extends IPackageManager.Stub changingLibSetting); } pkgSetting.getPkgState().setUsesLibraryFiles(new ArrayList<>(usesLibraryFiles)); + // let's make sure we mark all static shared libraries as installed for the same users + // that its dependent packages are installed for. + int[] installedUsers = new int[allUsers.length]; + int installedUserCount = 0; + for (int u = 0; u < allUsers.length; u++) { + if (pkgSetting.getInstalled(allUsers[u])) { + installedUsers[installedUserCount++] = allUsers[u]; + } + } + for (SharedLibraryInfo sharedLibraryInfo : usesLibraryInfos) { + if (!sharedLibraryInfo.isStatic()) { + continue; + } + final PackageSetting staticLibPkgSetting = getPackageSetting( + toStaticSharedLibraryPackageName(sharedLibraryInfo.getPackageName(), + sharedLibraryInfo.getLongVersion())); + if (staticLibPkgSetting == null) { + Slog.wtf(TAG, "Shared lib without setting: " + sharedLibraryInfo); + continue; + } + for (int u = 0; u < installedUserCount; u++) { + staticLibPkgSetting.setInstalled(true, installedUsers[u]); + } + } } else { pkgSetting.getPkgState().setUsesLibraryInfos(Collections.emptyList()) .setUsesLibraryFiles(Collections.emptyList()); @@ -10878,7 +10952,7 @@ public class PackageManagerService extends IPackageManager.Stub */ @GuardedBy({"mLock", "mInstallLock"}) private AndroidPackage commitReconciledScanResultLocked( - @NonNull ReconciledPackage reconciledPkg) { + @NonNull ReconciledPackage reconciledPkg, int[] allUsers) { final ScanResult result = reconciledPkg.scanResult; final ScanRequest request = result.request; // TODO(b/135203078): Move this even further away @@ -10937,7 +11011,7 @@ public class PackageManagerService extends IPackageManager.Stub if (reconciledPkg.collectedSharedLibraryInfos != null) { executeSharedLibrariesUpdateLPr(pkg, pkgSetting, null, null, - reconciledPkg.collectedSharedLibraryInfos); + reconciledPkg.collectedSharedLibraryInfos, allUsers); } final KeySetManagerService ksms = mSettings.mKeySetManagerService; @@ -16482,7 +16556,7 @@ public class PackageManagerService extends IPackageManager.Stub } } - AndroidPackage pkg = commitReconciledScanResultLocked(reconciledPkg); + AndroidPackage pkg = commitReconciledScanResultLocked(reconciledPkg, request.mAllUsers); updateSettingsLI(pkg, reconciledPkg.installArgs, request.mAllUsers, res); final PackageSetting ps = mSettings.mPackages.get(packageName); diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 1c1e64d70bbd..9a297d601a6b 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -370,24 +370,9 @@ public class StagingManager { } /** - * Perform snapshot and restore as required both for APEXes themselves and for apks in APEX. - * Apks inside apex are not installed using apk-install flow. They are scanned from the system - * directory directly by PackageManager, as such, RollbackManager need to handle their data - * separately here. + * Utility function for extracting apex sessions out of multi-package/single session. */ - private void snapshotAndRestoreForApexSession(PackageInstallerSession session) { - if (!sessionContainsApex(session)) { - return; - } - - boolean doSnapshotOrRestore = - (session.params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0 - || session.params.installReason == PackageManager.INSTALL_REASON_ROLLBACK; - if (!doSnapshotOrRestore) { - return; - } - - // Find all the apex sessions that needs processing + private List<PackageInstallerSession> extractApexSessions(PackageInstallerSession session) { List<PackageInstallerSession> apexSessions = new ArrayList<>(); if (session.isMultiPackage()) { List<PackageInstallerSession> childrenSessions = new ArrayList<>(); @@ -408,6 +393,50 @@ public class StagingManager { } else { apexSessions.add(session); } + return apexSessions; + } + + /** + * Checks if all apk-in-apex were installed without errors for all of the apex sessions. Throws + * error for any apk-in-apex failed to install. + * + * @throws PackageManagerException if any apk-in-apex failed to install + */ + private void checkInstallationOfApkInApexSuccessful(PackageInstallerSession session) + throws PackageManagerException { + final List<PackageInstallerSession> apexSessions = extractApexSessions(session); + if (apexSessions.isEmpty()) { + return; + } + + for (PackageInstallerSession apexSession : apexSessions) { + String packageName = apexSession.getPackageName(); + if (!mApexManager.isApkInApexInstallSuccess(packageName)) { + throw new PackageManagerException(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, + "Failed to install apk-in-apex of " + packageName); + } + } + } + + /** + * Perform snapshot and restore as required both for APEXes themselves and for apks in APEX. + * Apks inside apex are not installed using apk-install flow. They are scanned from the system + * directory directly by PackageManager, as such, RollbackManager need to handle their data + * separately here. + */ + private void snapshotAndRestoreForApexSession(PackageInstallerSession session) { + boolean doSnapshotOrRestore = + (session.params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0 + || session.params.installReason == PackageManager.INSTALL_REASON_ROLLBACK; + if (!doSnapshotOrRestore) { + return; + } + + // Find all the apex sessions that needs processing + final List<PackageInstallerSession> apexSessions = extractApexSessions(session); + if (apexSessions.isEmpty()) { + return; + } final UserManagerInternal um = LocalServices.getService(UserManagerInternal.class); final int[] allUsers = um.getUserIds(); @@ -545,18 +574,19 @@ public class StagingManager { return; } + // Check if apex packages in the session failed to activate if (hasApex) { if (apexSessionInfo == null) { - String errorMsg = "apexd did not know anything about a staged session supposed to" - + " be activated"; + final String errorMsg = "apexd did not know anything about a staged session " + + "supposed to be activated"; session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, errorMsg); abortCheckpoint(errorMsg); return; } if (isApexSessionFailed(apexSessionInfo)) { - String errorMsg = "APEX activation failed. Check logcat messages from apexd for " - + "more information."; + String errorMsg = "APEX activation failed. Check logcat messages from apexd " + + "for more information."; if (!TextUtils.isEmpty(mNativeFailureReason)) { errorMsg = "Session reverted due to crashing native process: " + mNativeFailureReason; @@ -567,21 +597,26 @@ public class StagingManager { return; } if (!apexSessionInfo.isActivated && !apexSessionInfo.isSuccess) { - // Apexd did not apply the session for some unknown reason. There is no guarantee - // that apexd will install it next time. Safer to proactively mark as failed. - String errorMsg = "Staged session " + session.sessionId + "at boot didn't " - + "activate nor fail. Marking it as failed anyway."; + // Apexd did not apply the session for some unknown reason. There is no + // guarantee that apexd will install it next time. Safer to proactively mark + // it as failed. + final String errorMsg = "Staged session " + session.sessionId + "at boot " + + "didn't activate nor fail. Marking it as failed anyway."; session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, errorMsg); abortCheckpoint(errorMsg); return; } - snapshotAndRestoreForApexSession(session); - Slog.i(TAG, "APEX packages in session " + session.sessionId - + " were successfully activated. Proceeding with APK packages, if any"); } - // The APEX part of the session is activated, proceed with the installation of APKs. + // Handle apk and apk-in-apex installation try { + if (hasApex) { + checkInstallationOfApkInApexSuccessful(session); + snapshotAndRestoreForApexSession(session); + Slog.i(TAG, "APEX packages in session " + session.sessionId + + " were successfully activated. Proceeding with APK packages, if any"); + } + // The APEX part of the session is activated, proceed with the installation of APKs. Slog.d(TAG, "Installing APK packages in session " + session.sessionId); installApksInSession(session); } catch (PackageManagerException e) { diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java index 95a81f099e2d..3074250950f7 100644 --- a/services/core/java/com/android/server/pm/dex/DexManager.java +++ b/services/core/java/com/android/server/pm/dex/DexManager.java @@ -711,7 +711,7 @@ public class DexManager { for (String isa : getAppDexInstructionSets(info.primaryCpuAbi, info.secondaryCpuAbi)) { boolean newUpdate = mPackageDexUsage.record(searchResult.mOwningPackageName, dexPath, userId, isa, /*primaryOrSplit*/ false, - searchResult.mOwningPackageName, + loadingPackage, PackageDexUsage.VARIABLE_CLASS_LOADER_CONTEXT); update |= newUpdate; } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index c425307d3fe9..a18f90b9913f 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -3994,7 +3994,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { * @param replaceVolumeUuid The volume of the packages to be updated are on, {@code null} for * all volumes * @param flags Control permission for which apps should be updated - * @param allPackages All currently known packages * @param callback Callback to call after permission changes */ private void updatePermissions(final @Nullable String changingPkgName, @@ -4108,7 +4107,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int userId = userIds[userIdNum]; mPackageManagerInt.forEachPackage((AndroidPackage p) -> revokePermissionFromPackageForUser(p.getPackageName(), - bp.getName(), userId, callback)); + bp.getName(), true, userId, callback)); } } it.remove(); @@ -4143,7 +4142,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { * Revoke a runtime permission from a package for a given user ID. */ private void revokePermissionFromPackageForUser(@NonNull String pName, - @NonNull String permissionName, int userId, @Nullable PermissionCallback callback) { + @NonNull String permissionName, boolean overridePolicy, int userId, + @Nullable PermissionCallback callback) { final ApplicationInfo appInfo = mPackageManagerInt.getApplicationInfo(pName, 0, Process.SYSTEM_UID, UserHandle.USER_SYSTEM); @@ -4158,7 +4158,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { revokeRuntimePermissionInternal( permissionName, pName, - false, + overridePolicy, Process.SYSTEM_UID, userId, callback); diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java index edb6d65bd96f..05879ec9545e 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java @@ -21,7 +21,6 @@ import static java.util.Collections.emptyList; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackageManager; -import android.content.pm.PackageParser; import android.content.pm.SharedLibraryInfo; import com.android.internal.util.DataClass; @@ -64,6 +63,12 @@ public class PackageStateUnserialized { } public PackageStateUnserialized setLastPackageUsageTimeInMills(int reason, long time) { + if (reason < 0) { + return this; + } + if (reason >= PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT) { + return this; + } getLastPackageUsageTimeInMills()[reason] = time; return this; } diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index fdf7023074be..92184e87a357 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -323,7 +323,7 @@ public final class PermissionPolicyService extends SystemService { // Force synchronization as permissions might have changed synchronizePermissionsAndAppOpsForUser(userId); - restoreReadPhoneStatePermissions(userId); + //restoreReadPhoneStatePermissions(userId); // Tell observers we are initialized for this user. if (callback != null) { diff --git a/services/core/java/com/android/server/storage/StorageUserConnection.java b/services/core/java/com/android/server/storage/StorageUserConnection.java index c207a7b4039b..c18a6ebc32ef 100644 --- a/services/core/java/com/android/server/storage/StorageUserConnection.java +++ b/services/core/java/com/android/server/storage/StorageUserConnection.java @@ -242,7 +242,13 @@ public final class StorageUserConnection { } if (oldConnection != null) { - mContext.unbindService(oldConnection); + try { + mContext.unbindService(oldConnection); + } catch (Exception e) { + // Handle IllegalArgumentException that may be thrown if the user is already + // stopped when we try to unbind + Slog.w(TAG, "Failed to unbind service", e); + } } } diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index dcdbfdedb0c8..0474af268b8e 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4620,7 +4620,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // the current contract for "auto-Pip" is that the app should enter it before onPause // returns. Just need to confirm this reasoning makes sense. final boolean deferHidingClient = canEnterPictureInPicture - && !isState(STOPPING, STOPPED, PAUSED); + && !isState(STARTED, STOPPING, STOPPED, PAUSED); setDeferHidingClient(deferHidingClient); setVisibility(false); @@ -4631,9 +4631,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // activity is hidden supportsEnterPipOnTaskSwitch = false; break; - - case INITIALIZING: case RESUMED: + // If the app is capable of entering PIP, we should try pausing it now + // so it can PIP correctly. + if (deferHidingClient) { + getRootTask().startPausingLocked( + mStackSupervisor.mUserLeaving /* userLeaving */, + false /* uiSleeping */, null /* resuming */); + break; + } + case INITIALIZING: case PAUSING: case PAUSED: case STARTED: diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 2ab03ce058b2..1340b04148fa 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -2676,9 +2676,9 @@ class ActivityStack extends Task { mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */, getDisplay().mDisplayId, false /* markFrozenIfConfigChanged */, false /* deferResume */); + } else { + mRootWindowContainer.resumeFocusedStacksTopActivities(); } - - mRootWindowContainer.resumeFocusedStacksTopActivities(); return true; } diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index df53227e27fd..4ea990285269 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -61,6 +61,7 @@ import static com.android.server.wm.ActivityStackSupervisor.DEFER_RESUME; import static com.android.server.wm.ActivityStackSupervisor.ON_TOP; import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS; import static com.android.server.wm.ActivityStackSupervisor.TAG_TASKS; +import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ACTIVITY_STARTS; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_CONFIGURATION; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_PERMISSIONS_REVIEW; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RESULTS; @@ -108,6 +109,7 @@ import android.os.UserManager; import android.service.voice.IVoiceInteractionSession; import android.text.TextUtils; import android.util.ArraySet; +import android.util.DebugUtils; import android.util.Pools.SynchronizedPool; import android.util.Slog; @@ -1195,6 +1197,9 @@ class ActivityStarter { final int callingAppId = UserHandle.getAppId(callingUid); if (callingUid == Process.ROOT_UID || callingAppId == Process.SYSTEM_UID || callingAppId == Process.NFC_UID) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Activity start allowed for important callingUid (" + callingUid + ")"); + } return false; } @@ -1208,6 +1213,11 @@ class ActivityStarter { final boolean isCallingUidPersistentSystemProcess = callingUidProcState <= ActivityManager.PROCESS_STATE_PERSISTENT_UI; if (callingUidHasAnyVisibleWindow || isCallingUidPersistentSystemProcess) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Activity start allowed: callingUidHasAnyVisibleWindow = " + callingUid + + ", isCallingUidPersistentSystemProcess = " + + isCallingUidPersistentSystemProcess); + } return false; } // take realCallingUid into consideration @@ -1229,35 +1239,66 @@ class ActivityStarter { if (realCallingUid != callingUid) { // don't abort if the realCallingUid has a visible window if (realCallingUidHasAnyVisibleWindow) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Activity start allowed: realCallingUid (" + realCallingUid + + ") has visible (non-toast) window"); + } return false; } // if the realCallingUid is a persistent system process, abort if the IntentSender // wasn't whitelisted to start an activity if (isRealCallingUidPersistentSystemProcess && allowBackgroundActivityStart) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Activity start allowed: realCallingUid (" + realCallingUid + + ") is persistent system process AND intent sender whitelisted " + + "(allowBackgroundActivityStart = true)"); + } return false; } // don't abort if the realCallingUid is an associated companion app if (mService.isAssociatedCompanionApp(UserHandle.getUserId(realCallingUid), realCallingUid)) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Activity start allowed: realCallingUid (" + realCallingUid + + ") is companion app"); + } return false; } } // don't abort if the callingUid has START_ACTIVITIES_FROM_BACKGROUND permission if (mService.checkPermission(START_ACTIVITIES_FROM_BACKGROUND, callingPid, callingUid) == PERMISSION_GRANTED) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, + "Background activity start allowed: START_ACTIVITIES_FROM_BACKGROUND " + + "permission granted for uid " + + callingUid); + } return false; } // don't abort if the caller has the same uid as the recents component if (mSupervisor.mRecentTasks.isCallerRecents(callingUid)) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Background activity start allowed: callingUid (" + callingUid + + ") is recents"); + } return false; } // don't abort if the callingUid is the device owner if (mService.isDeviceOwner(callingUid)) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Background activity start allowed: callingUid (" + callingUid + + ") is device owner"); + } return false; } // don't abort if the callingUid has companion device final int callingUserId = UserHandle.getUserId(callingUid); if (mService.isAssociatedCompanionApp(callingUserId, callingUid)) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Background activity start allowed: callingUid (" + callingUid + + ") is companion app"); + } return false; } // If we don't have callerApp at this point, no caller was provided to startActivity(). @@ -1273,6 +1314,10 @@ class ActivityStarter { if (callerApp != null) { // first check the original calling process if (callerApp.areBackgroundActivityStartsAllowed()) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "Background activity start allowed: callerApp process (pid = " + + callerApp.getPid() + ", uid = " + callerAppUid + ") is whitelisted"); + } return false; } // only if that one wasn't whitelisted, check the other ones @@ -1282,6 +1327,11 @@ class ActivityStarter { for (int i = uidProcesses.size() - 1; i >= 0; i--) { final WindowProcessController proc = uidProcesses.valueAt(i); if (proc != callerApp && proc.areBackgroundActivityStartsAllowed()) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, + "Background activity start allowed: process " + proc.getPid() + + " from uid " + callerAppUid + " is whitelisted"); + } return false; } } @@ -1297,9 +1347,15 @@ class ActivityStarter { Slog.w(TAG, "Background activity start [callingPackage: " + callingPackage + "; callingUid: " + callingUid + "; isCallingUidForeground: " + isCallingUidForeground + + "; callingUidHasAnyVisibleWindow: " + callingUidHasAnyVisibleWindow + + "; callingUidProcState: " + DebugUtils.valueToString(ActivityManager.class, + "PROCESS_STATE_", callingUidProcState) + "; isCallingUidPersistentSystemProcess: " + isCallingUidPersistentSystemProcess + "; realCallingUid: " + realCallingUid + "; isRealCallingUidForeground: " + isRealCallingUidForeground + + "; realCallingUidHasAnyVisibleWindow: " + realCallingUidHasAnyVisibleWindow + + "; realCallingUidProcState: " + DebugUtils.valueToString(ActivityManager.class, + "PROCESS_STATE_", realCallingUidProcState) + "; isRealCallingUidPersistentSystemProcess: " + isRealCallingUidPersistentSystemProcess + "; originatingPendingIntent: " + originatingPendingIntent diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerDebugConfig.java b/services/core/java/com/android/server/wm/ActivityTaskManagerDebugConfig.java index 7f09a071308a..da0bfd67e353 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerDebugConfig.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerDebugConfig.java @@ -65,6 +65,7 @@ public class ActivityTaskManagerDebugConfig { static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false; static final boolean DEBUG_PERMISSIONS_REVIEW = DEBUG_ALL || false; static final boolean DEBUG_RESULTS = DEBUG_ALL || false; + static final boolean DEBUG_ACTIVITY_STARTS = DEBUG_ALL || false; public static final boolean DEBUG_CLEANUP = DEBUG_ALL || false; public static final boolean DEBUG_METRICS = DEBUG_ALL || false; diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java index 9b34bd17d042..345cfb0aad71 100644 --- a/services/core/java/com/android/server/wm/DisplayArea.java +++ b/services/core/java/com/android/server/wm/DisplayArea.java @@ -140,8 +140,12 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { void setOrganizer(IDisplayAreaOrganizer organizer) { if (mOrganizer == organizer) return; - sendDisplayAreaVanished(); + IDisplayAreaOrganizer lastOrganizer = mOrganizer; + // Update the new display area organizer before calling sendDisplayAreaVanished since it + // could result in a new SurfaceControl getting created that would notify the old organizer + // about it. mOrganizer = organizer; + sendDisplayAreaVanished(lastOrganizer); sendDisplayAreaAppeared(); } @@ -150,9 +154,10 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { mOrganizerController.onDisplayAreaAppeared(mOrganizer, this); } - void sendDisplayAreaVanished() { - if (mOrganizer == null) return; - mOrganizerController.onDisplayAreaVanished(mOrganizer, this); + void sendDisplayAreaVanished(IDisplayAreaOrganizer organizer) { + if (organizer == null) return; + migrateToNewSurfaceControl(); + mOrganizerController.onDisplayAreaVanished(organizer, this); } @Override @@ -171,7 +176,7 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { DisplayAreaInfo getDisplayAreaInfo() { DisplayAreaInfo info = new DisplayAreaInfo(mRemoteToken.toWindowContainerToken(), - getDisplayContent().getDisplayId()); + getDisplayContent().getDisplayId(), mFeatureId); info.configuration.setTo(getConfiguration()); return info; } diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java index 2c8c8201c534..b6c71bb17631 100644 --- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java @@ -21,6 +21,7 @@ import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; +import android.view.SurfaceControl; import android.window.IDisplayAreaOrganizer; import android.window.IDisplayAreaOrganizerController; @@ -113,7 +114,8 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl void onDisplayAreaAppeared(IDisplayAreaOrganizer organizer, DisplayArea da) { try { - organizer.onDisplayAreaAppeared(da.getDisplayAreaInfo()); + SurfaceControl outSurfaceControl = new SurfaceControl(da.getSurfaceControl()); + organizer.onDisplayAreaAppeared(da.getDisplayAreaInfo(), outSurfaceControl); } catch (RemoteException e) { // Oh well... } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 50a5d8969310..8f8ca7707eb5 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -2006,6 +2006,14 @@ class Task extends WindowContainer<WindowContainer> { return (prevWinMode == WINDOWING_MODE_FREEFORM) != (newWinMode == WINDOWING_MODE_FREEFORM); } + @Override + void migrateToNewSurfaceControl() { + super.migrateToNewSurfaceControl(); + mLastSurfaceSize.x = 0; + mLastSurfaceSize.y = 0; + updateSurfaceSize(getPendingTransaction()); + } + void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null || mCreatedByOrganizer) { return; @@ -2301,27 +2309,31 @@ class Task extends WindowContainer<WindowContainer> { insideParentBounds = parentBounds.contains(resolvedBounds); } + // Non-null compatibility insets means the activity prefers to keep its original size, so + // out bounds doesn't need to be restricted by the parent or current display + final boolean customContainerPolicy = compatInsets != null; + Rect outAppBounds = inOutConfig.windowConfiguration.getAppBounds(); if (outAppBounds == null || outAppBounds.isEmpty()) { + // App-bounds hasn't been overridden, so calculate a value for it. inOutConfig.windowConfiguration.setAppBounds(mTmpFullBounds); outAppBounds = inOutConfig.windowConfiguration.getAppBounds(); - } - // Non-null compatibility insets means the activity prefers to keep its original size, so - // the out bounds doesn't need to be restricted by the parent or current display. - final boolean customContainerPolicy = compatInsets != null; - if (!customContainerPolicy && windowingMode != WINDOWING_MODE_FREEFORM) { - final Rect containingAppBounds; - if (insideParentBounds) { - containingAppBounds = parentConfig.windowConfiguration.getAppBounds(); - } else { - // Restrict appBounds to display non-decor rather than parent because the override - // bounds are beyond the parent. Otherwise, it won't match the overridden bounds. - final TaskDisplayArea displayArea = getDisplayArea(); - containingAppBounds = displayArea != null - ? displayArea.getWindowConfiguration().getAppBounds() : null; - } - if (containingAppBounds != null && !containingAppBounds.isEmpty()) { - outAppBounds.intersect(containingAppBounds); + + if (!customContainerPolicy && windowingMode != WINDOWING_MODE_FREEFORM) { + final Rect containingAppBounds; + if (insideParentBounds) { + containingAppBounds = parentConfig.windowConfiguration.getAppBounds(); + } else { + // Restrict appBounds to display non-decor rather than parent because the + // override bounds are beyond the parent. Otherwise, it won't match the + // overridden bounds. + final TaskDisplayArea displayArea = getDisplayArea(); + containingAppBounds = displayArea != null + ? displayArea.getWindowConfiguration().getAppBounds() : null; + } + if (containingAppBounds != null && !containingAppBounds.isEmpty()) { + outAppBounds.intersect(containingAppBounds); + } } } @@ -4402,16 +4414,25 @@ class Task extends WindowContainer<WindowContainer> { return mHasBeenVisible; } - /** In the case that these three conditions are true, we want to send the Task to - * the organizer: - * 1. We have a SurfaceControl - * 2. An organizer has been set - * 3. We have finished drawing + /** In the case that these conditions are true, we want to send the Task to the organizer: + * 1. An organizer has been set + * 2. The Task was created by the organizer + * or + * 2a. We have a SurfaceControl + * 2b. We have finished drawing * Any time any of these conditions are updated, the updating code should call * sendTaskAppeared. */ boolean taskAppearedReady() { - return mSurfaceControl != null && mTaskOrganizer != null && getHasBeenVisible(); + if (mTaskOrganizer == null) { + return false; + } + + if (mCreatedByOrganizer) { + return true; + } + + return mSurfaceControl != null && getHasBeenVisible(); } private void sendTaskAppeared() { @@ -4420,9 +4441,9 @@ class Task extends WindowContainer<WindowContainer> { } } - private void sendTaskVanished() { - if (mTaskOrganizer != null) { - mAtmService.mTaskOrganizerController.onTaskVanished(mTaskOrganizer, this); + private void sendTaskVanished(ITaskOrganizer organizer) { + if (organizer != null) { + mAtmService.mTaskOrganizerController.onTaskVanished(organizer, this); } } @@ -4431,9 +4452,13 @@ class Task extends WindowContainer<WindowContainer> { if (mTaskOrganizer == organizer) { return false; } - // Let the old organizer know it has lost control. - sendTaskVanished(); + + ITaskOrganizer previousOrganizer = mTaskOrganizer; + // Update the new task organizer before calling sendTaskVanished since it could result in + // a new SurfaceControl getting created that would notify the old organizer about it. mTaskOrganizer = organizer; + // Let the old organizer know it has lost control. + sendTaskVanished(previousOrganizer); if (mTaskOrganizer != null) { sendTaskAppeared(); diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 306c100e651c..83105c2f8696 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -36,6 +36,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.util.SparseArray; +import android.view.SurfaceControl; import android.window.ITaskOrganizer; import android.window.ITaskOrganizerController; import android.window.WindowContainerToken; @@ -112,7 +113,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { final RunningTaskInfo taskInfo = task.getTaskInfo(); mDeferTaskOrgCallbacksConsumer.accept(() -> { try { - mTaskOrganizer.onTaskAppeared(taskInfo); + SurfaceControl outSurfaceControl = new SurfaceControl(task.getSurfaceControl()); + mTaskOrganizer.onTaskAppeared(taskInfo, outSurfaceControl); } catch (RemoteException e) { Slog.e(TAG, "Exception sending onTaskAppeared callback", e); } @@ -211,6 +213,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { void removeTask(Task t) { if (t.mTaskAppearedSent) { + t.migrateToNewSurfaceControl(); t.mTaskAppearedSent = false; mOrganizer.onTaskVanished(t); } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 07cf4e5c1e80..3f8d7b5710aa 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -406,6 +406,40 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } /** + * Create a new SurfaceControl for this WindowContainer and migrate all properties to the new + * SurfaceControl. Properties include: + * 1. Children + * 2. Position + * 3. Z order + * + * Remove the old SurfaceControl since it's no longer needed. + * + * This is used to revoke control of the SurfaceControl from a client process that was + * previously organizing this WindowContainer. + */ + void migrateToNewSurfaceControl() { + SurfaceControl.Transaction t = getPendingTransaction(); + t.remove(mSurfaceControl); + // Clear the last position so the new SurfaceControl will get correct position + mLastSurfacePosition.set(0, 0); + + createSurfaceControl(false /* force */); + if (mLastRelativeToLayer != null) { + t.setRelativeLayer(mSurfaceControl, mLastRelativeToLayer, mLastLayer); + } else { + t.setLayer(mSurfaceControl, mLastLayer); + } + + for (int i = 0; i < mChildren.size(); i++) { + SurfaceControl sc = mChildren.get(i).getSurfaceControl(); + if (sc != null) { + t.reparent(sc, mSurfaceControl); + } + } + scheduleAnimation(); + } + + /** * Called when the surface is shown for the first time. */ void onSurfaceShown(Transaction t) { @@ -2523,16 +2557,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return (RemoteToken) binder; } - @Override - public SurfaceControl getLeash() { - final WindowContainer wc = getContainer(); - if (wc == null) return null; - // We need to copy the SurfaceControl instead of returning the original - // because the Parcel FLAGS PARCELABLE_WRITE_RETURN_VALUE cause SurfaceControls - // to release themselves. - return new SurfaceControl(wc.getSurfaceControl()); - } - WindowContainerToken toWindowContainerToken() { if (mWindowContainerToken == null) { mWindowContainerToken = new WindowContainerToken(this); diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 41bd70726e71..fe68cd6110f2 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -29,6 +29,7 @@ import static com.android.server.wm.ActivityStack.ActivityState.PAUSING; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.STARTED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPING; +import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ACTIVITY_STARTS; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_CONFIGURATION; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RELEASE; import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_CONFIGURATION; @@ -430,6 +431,11 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio void setLastActivityLaunchTime(long launchTime) { if (launchTime <= mLastActivityLaunchTime) { + if (launchTime < mLastActivityLaunchTime) { + Slog.w(TAG, + "Tried to set launchTime (" + launchTime + ") < mLastActivityLaunchTime (" + + mLastActivityLaunchTime + ")"); + } return; } mLastActivityLaunchTime = launchTime; @@ -449,6 +455,10 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio boolean areBackgroundActivityStartsAllowed() { // allow if the whitelisting flag was explicitly set if (mAllowBackgroundActivityStarts) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: mAllowBackgroundActivityStarts = true"); + } return true; } // allow if any activity in the caller has either started or finished very recently, and @@ -460,19 +470,43 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio // let app to be able to start background activity even it's in grace period. if (mLastActivityLaunchTime > mAtm.getLastStopAppSwitchesTime() || mLastActivityFinishTime > mAtm.getLastStopAppSwitchesTime()) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: within " + + ACTIVITY_BG_START_GRACE_PERIOD_MS + "ms grace period"); + } return true; } + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + ")] Activity start within " + + ACTIVITY_BG_START_GRACE_PERIOD_MS + + "ms grace period but also within stop app switch window"); + } + } // allow if the proc is instrumenting with background activity starts privs if (mInstrumentingWithBackgroundActivityStartPrivileges) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: process instrumenting with background " + + "activity starts privileges"); + } return true; } // allow if the caller has an activity in any foreground task if (hasActivityInVisibleTask()) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: process has activity in foreground task"); + } return true; } // allow if the caller is bound by a UID that's currently foreground if (isBoundByForegroundUid()) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: process bound by foreground uid"); + } return true; } return false; diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index bfe3b2890bc1..0e83beed6b90 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -57,6 +57,7 @@ import static com.android.server.wm.WindowStateAnimatorProto.SURFACE; import static com.android.server.wm.WindowStateAnimatorProto.SYSTEM_DECOR_RECT; import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE; +import android.app.WindowConfiguration; import android.content.Context; import android.graphics.Matrix; import android.graphics.PixelFormat; @@ -787,7 +788,8 @@ class WindowStateAnimator { return false; } - if (w.getWindowConfiguration().tasksAreFloating()) { + if (w.getWindowConfiguration().tasksAreFloating() + || WindowConfiguration.isSplitScreenWindowingMode(w.getWindowingMode())) { return false; } diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp index 10368586999c..992a4ef76f04 100644 --- a/services/incremental/IncrementalService.cpp +++ b/services/incremental/IncrementalService.cpp @@ -1708,15 +1708,19 @@ bool IncrementalService::DataLoaderStub::setTargetStatus(int newStatus) { { std::unique_lock lock(mStatusMutex); oldStatus = mTargetStatus; - mTargetStatus = newStatus; - mTargetStatusTs = Clock::now(); curStatus = mCurrentStatus; + setTargetStatusLocked(newStatus); } LOG(DEBUG) << "Target status update for DataLoader " << mId << ": " << oldStatus << " -> " << newStatus << " (current " << curStatus << ")"; return fsmStep(); } +void IncrementalService::DataLoaderStub::setTargetStatusLocked(int status) { + mTargetStatus = status; + mTargetStatusTs = Clock::now(); +} + bool IncrementalService::DataLoaderStub::waitForStatus(int status, Clock::duration duration) { auto now = Clock::now(); std::unique_lock lock(mStatusMutex); @@ -1782,6 +1786,9 @@ bool IncrementalService::DataLoaderStub::fsmStep() { } switch (targetStatus) { + case IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE: + // Do nothing, this is a reset state. + break; case IDataLoaderStatusListener::DATA_LOADER_DESTROYED: { return destroy(); } @@ -1796,6 +1803,7 @@ bool IncrementalService::DataLoaderStub::fsmStep() { case IDataLoaderStatusListener::DATA_LOADER_CREATED: switch (currentStatus) { case IDataLoaderStatusListener::DATA_LOADER_DESTROYED: + case IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE: return bind(); case IDataLoaderStatusListener::DATA_LOADER_BOUND: return create(); @@ -1825,9 +1833,15 @@ binder::Status IncrementalService::DataLoaderStub::onStatusChanged(MountId mount if (mCurrentStatus == newStatus) { return binder::Status::ok(); } + oldStatus = mCurrentStatus; mCurrentStatus = newStatus; targetStatus = mTargetStatus; + + if (mCurrentStatus == IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE) { + // For unavailable, reset target status. + setTargetStatusLocked(IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE); + } } LOG(DEBUG) << "Current status update for DataLoader " << mId << ": " << oldStatus << " -> " diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h index 81fbe74be606..d5c612daee58 100644 --- a/services/incremental/IncrementalService.h +++ b/services/incremental/IncrementalService.h @@ -187,6 +187,7 @@ private: bool destroy(); bool setTargetStatus(int status); + void setTargetStatusLocked(int status); bool waitForStatus(int status, Clock::duration duration); bool fsmStep(); diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java index c8ec7b5503d1..d8874e40a760 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java @@ -291,7 +291,6 @@ public class QuotaControllerTest { private JobStatus createJobStatus(String testTag, int jobId) { JobInfo jobInfo = new JobInfo.Builder(jobId, new ComponentName(mContext, "TestQuotaJobService")) - .setMinimumLatency(Math.abs(jobId) + 1) .build(); return createJobStatus(testTag, SOURCE_PACKAGE, CALLING_UID, jobInfo); } @@ -302,6 +301,9 @@ public class QuotaControllerTest { jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag); // Make sure tests aren't passing just because the default bucket is likely ACTIVE. js.setStandbyBucket(FREQUENT_INDEX); + // Make sure Doze and background-not-restricted don't affect tests. + js.setDeviceNotDozingConstraintSatisfied(/* state */ true, /* whitelisted */false); + js.setBackgroundNotRestrictedConstraintSatisfied(true); return js; } @@ -649,6 +651,7 @@ public class QuotaControllerTest { assertEquals(expectedStats, inputStats); assertTrue(mQuotaController.isWithinQuotaLocked(SOURCE_USER_ID, SOURCE_PACKAGE, RARE_INDEX)); + assertTrue("Job not ready: " + jobStatus, jobStatus.isReady()); } // Add old session. Make sure values are combined correctly. @@ -689,6 +692,7 @@ public class QuotaControllerTest { assertEquals(expectedStats, inputStats); assertFalse( mQuotaController.isWithinQuotaLocked(SOURCE_USER_ID, SOURCE_PACKAGE, RARE_INDEX)); + assertFalse("Job unexpectedly ready: " + jobStatus, jobStatus.isReady()); } /** @@ -1325,6 +1329,7 @@ public class QuotaControllerTest { assertEquals(2, mQuotaController.getExecutionStatsLocked( SOURCE_USER_ID, SOURCE_PACKAGE, ACTIVE_INDEX).jobCountInRateLimitingWindow); assertTrue(mQuotaController.isWithinQuotaLocked(jobStatus)); + assertTrue(jobStatus.isReady()); } @Test @@ -1387,7 +1392,9 @@ public class QuotaControllerTest { mQuotaController.maybeStopTrackingJobLocked(unaffected, null, false); assertTrue(mQuotaController.isWithinQuotaLocked(unaffected)); + assertTrue(unaffected.isReady()); assertFalse(mQuotaController.isWithinQuotaLocked(fgStateChanger)); + assertFalse(fgStateChanger.isReady()); assertEquals(1, mQuotaController.getTimingSessions(SOURCE_USER_ID, unaffectedPkgName).size()); assertEquals(42, diff --git a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java index 0fbd1b64c379..72afca0300cd 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java @@ -273,6 +273,21 @@ public class ApexManagerTest { assertThat(mApexManager.uninstallApex(TEST_APEX_PKG)).isFalse(); } + @Test + public void testReportErrorWithApkInApex() throws RemoteException { + when(mApexService.getActivePackages()).thenReturn(createApexInfo(true, true)); + final ApexManager.ActiveApexInfo activeApex = mApexManager.getActiveApexInfos().get(0); + assertThat(activeApex.apexModuleName).isEqualTo(TEST_APEX_PKG); + + when(mApexService.getAllPackages()).thenReturn(createApexInfo(true, true)); + mApexManager.scanApexPackagesTraced(mPackageParser2, + ParallelPackageParser.makeExecutorService()); + + assertThat(mApexManager.isApkInApexInstallSuccess(activeApex.apexModuleName)).isTrue(); + mApexManager.reportErrorWithApkInApex(activeApex.apexDirectory.getAbsolutePath()); + assertThat(mApexManager.isApkInApexInstallSuccess(activeApex.apexModuleName)).isFalse(); + } + private ApexInfo[] createApexInfo(boolean isActive, boolean isFactory) { File apexFile = extractResource(TEST_APEX_PKG, TEST_APEX_FILE_NAME); ApexInfo apexInfo = new ApexInfo(); @@ -281,6 +296,7 @@ public class ApexManagerTest { apexInfo.moduleName = TEST_APEX_PKG; apexInfo.modulePath = apexFile.getPath(); apexInfo.versionCode = 191000070; + apexInfo.preinstalledModulePath = apexFile.getPath(); return new ApexInfo[]{apexInfo}; } diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java index 7c3efeb01f48..1cfbad93c2e5 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java @@ -20,6 +20,7 @@ import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import android.content.pm.PackageManager; @@ -32,6 +33,8 @@ import android.util.ArraySet; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.server.pm.pkg.PackageStateUnserialized; + import org.junit.Test; import org.junit.runner.RunWith; @@ -300,4 +303,55 @@ public class PackageUserStateTest { // Everything is different assertThat(params1.equals(params2), is(false)); } + + /** + * Test fix for b/149772100. + */ + private static void assertLastPackageUsageUnset( + PackageStateUnserialized state) throws Exception { + for (int i = state.getLastPackageUsageTimeInMills().length - 1; i >= 0; --i) { + assertEquals(0L, state.getLastPackageUsageTimeInMills()[i]); + } + } + private static void assertLastPackageUsageSet( + PackageStateUnserialized state, int reason, long value) throws Exception { + for (int i = state.getLastPackageUsageTimeInMills().length - 1; i >= 0; --i) { + if (i == reason) { + assertEquals(value, state.getLastPackageUsageTimeInMills()[i]); + } else { + assertEquals(0L, state.getLastPackageUsageTimeInMills()[i]); + } + } + } + @Test + public void testPackageUseReasons() throws Exception { + final PackageStateUnserialized testState1 = new PackageStateUnserialized(); + testState1.setLastPackageUsageTimeInMills(-1, 10L); + assertLastPackageUsageUnset(testState1); + + final PackageStateUnserialized testState2 = new PackageStateUnserialized(); + testState2.setLastPackageUsageTimeInMills( + PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT, 20L); + assertLastPackageUsageUnset(testState2); + + final PackageStateUnserialized testState3 = new PackageStateUnserialized(); + testState3.setLastPackageUsageTimeInMills(Integer.MAX_VALUE, 30L); + assertLastPackageUsageUnset(testState3); + + final PackageStateUnserialized testState4 = new PackageStateUnserialized(); + testState4.setLastPackageUsageTimeInMills(0, 40L); + assertLastPackageUsageSet(testState4, 0, 40L); + + final PackageStateUnserialized testState5 = new PackageStateUnserialized(); + testState5.setLastPackageUsageTimeInMills( + PackageManager.NOTIFY_PACKAGE_USE_CONTENT_PROVIDER, 50L); + assertLastPackageUsageSet( + testState5, PackageManager.NOTIFY_PACKAGE_USE_CONTENT_PROVIDER, 50L); + + final PackageStateUnserialized testState6 = new PackageStateUnserialized(); + testState6.setLastPackageUsageTimeInMills( + PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT - 1, 60L); + assertLastPackageUsageSet( + testState6, PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT - 1, 60L); + } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationShellCmdTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationShellCmdTest.java index 0d44318e4aaa..00061931b18d 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationShellCmdTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationShellCmdTest.java @@ -98,7 +98,8 @@ public class NotificationShellCmdTest extends UiServiceTestCase { } private void doCmd(String... args) { - new NotificationShellCmd(mMockService) + System.out.println("Running command: " + String.join(" ", args)); + new TestNotificationShellCmd(mMockService) .exec(mBinder, in, out, err, args, mCallback, mResultReceiver); } @@ -267,4 +268,19 @@ public class NotificationShellCmdTest extends UiServiceTestCase { } } + + /** + * Version of NotificationShellCmd that allows this atest to work properly despite coming in + * from the wrong uid. + */ + private final class TestNotificationShellCmd extends NotificationShellCmd { + TestNotificationShellCmd(NotificationManagerService service) { + super(service); + } + + @Override + protected boolean checkShellCommandPermission(int callingUid) { + return true; + } + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java index 0700f9f2b29c..2991859c5dd4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java @@ -49,6 +49,7 @@ import android.os.Build; import android.os.Bundle; import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; +import android.view.SurfaceControl; import android.window.ITaskOrganizer; import android.window.WindowContainerToken; @@ -552,7 +553,7 @@ class ActivityTestsBase extends SystemServiceTestsBase { mMoveToSecondaryOnEnter = move; } @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo info) { + public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) { } @Override public void onTaskVanished(ActivityManager.RunningTaskInfo info) { diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java index 307b40f1b039..6a1f50d7e58a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java @@ -27,6 +27,8 @@ import android.graphics.Rect; import android.os.Binder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; +import android.view.SurfaceControl; +import android.window.DisplayAreaInfo; import android.window.IDisplayAreaOrganizer; import androidx.test.filters.SmallTest; @@ -74,7 +76,8 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { @Test public void testAppearedVanished() throws RemoteException { IDisplayAreaOrganizer organizer = registerMockOrganizer(FEATURE_VENDOR_FIRST); - verify(organizer).onDisplayAreaAppeared(any()); + verify(organizer) + .onDisplayAreaAppeared(any(DisplayAreaInfo.class), any(SurfaceControl.class)); unregisterMockOrganizer(organizer); verify(organizer).onDisplayAreaVanished(any()); @@ -83,7 +86,8 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { @Test public void testChanged() throws RemoteException { IDisplayAreaOrganizer organizer = registerMockOrganizer(FEATURE_VENDOR_FIRST); - verify(organizer).onDisplayAreaAppeared(any()); + verify(organizer) + .onDisplayAreaAppeared(any(DisplayAreaInfo.class), any(SurfaceControl.class)); mDisplayContent.setBounds(new Rect(0, 0, 1000, 1000)); verify(organizer).onDisplayAreaInfoChanged(any()); diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java index f8117573efdd..ca016761438b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java @@ -189,4 +189,25 @@ public class InsetsSourceProviderTest extends WindowTestsBase { mProvider.onInsetsModified(target, state.getSource(ITYPE_STATUS_BAR)); assertTrue(mSource.isVisible()); } + + @Test + public void testInsetGeometries() { + final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar"); + statusBar.getFrameLw().set(0, 0, 500, 100); + statusBar.mHasSurface = true; + mProvider.setWindow(statusBar, null, null); + mProvider.onPostLayout(); + assertEquals(new Rect(0, 0, 500, 100), mProvider.getSource().getFrame()); + // Still apply top insets if window overlaps even if it's top doesn't exactly match + // the inset-window's top. + assertEquals(Insets.of(0, 100, 0, 0), + mProvider.getSource().calculateInsets(new Rect(0, -100, 500, 400), + false /* ignoreVisibility */)); + + // Don't apply left insets if window is left-of inset-window but still overlaps + statusBar.getFrameLw().set(100, 0, 0, 0); + assertEquals(Insets.of(0, 0, 0, 0), + mProvider.getSource().calculateInsets(new Rect(-100, 0, 400, 500), + false /* ignoreVisibility */)); + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index 7d2e88014f45..aa68c6900f6f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -65,6 +65,7 @@ import android.platform.test.annotations.Presubmit; import android.util.ArrayMap; import android.util.Rational; import android.view.Display; +import android.view.SurfaceControl; import android.window.ITaskOrganizer; import android.window.WindowContainerTransaction; @@ -133,7 +134,8 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); task.setTaskOrganizer(organizer); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); + task.removeImmediately(); verify(organizer).onTaskVanished(any()); @@ -147,11 +149,12 @@ public class WindowOrganizerTests extends WindowTestsBase { task.setTaskOrganizer(organizer); - verify(organizer, never()).onTaskAppeared(any()); + verify(organizer, never()) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.setHasBeenVisible(true); assertTrue(stack.getHasBeenVisible()); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.removeImmediately(); verify(organizer).onTaskVanished(any()); @@ -167,7 +170,8 @@ public class WindowOrganizerTests extends WindowTestsBase { // that even though a TaskOrganizer is set remove doesn't emit // a vanish callback, because we never emitted appear. task.setTaskOrganizer(organizer); - verify(organizer, never()).onTaskAppeared(any()); + verify(organizer, never()) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.removeImmediately(); verify(organizer, never()).onTaskVanished(any()); } @@ -180,10 +184,10 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer2 = registerMockOrganizer(WINDOWING_MODE_PINNED); task.setTaskOrganizer(organizer); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.setTaskOrganizer(organizer2); verify(organizer).onTaskVanished(any()); - verify(organizer2).onTaskAppeared(any()); + verify(organizer2).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); } @Test @@ -194,10 +198,10 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer2 = registerMockOrganizer(WINDOWING_MODE_PINNED); stack.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); stack.setWindowingMode(WINDOWING_MODE_PINNED); verify(organizer).onTaskVanished(any()); - verify(organizer2).onTaskAppeared(any()); + verify(organizer2).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); } @Test @@ -207,7 +211,8 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); stack.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - verify(organizer, never()).onTaskAppeared(any()); + verify(organizer, never()) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); assertTrue(stack.isOrganized()); mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer); @@ -222,7 +227,7 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); stack.setTaskOrganizer(organizer); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); assertTrue(stack.isOrganized()); stack.setTaskOrganizer(null); @@ -237,7 +242,7 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); stack.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - verify(organizer).onTaskAppeared(any()); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); assertTrue(stack.isOrganized()); mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer); @@ -257,7 +262,8 @@ public class WindowOrganizerTests extends WindowTestsBase { // First organizer is registered, verify a task appears when changing windowing mode stack.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - verify(organizer, times(1)).onTaskAppeared(any()); + verify(organizer, times(1)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); assertTrue(stack.isOrganized()); // Now we replace the registration and1 verify the new organizer receives tasks @@ -265,7 +271,8 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer2 = registerMockOrganizer(WINDOWING_MODE_MULTI_WINDOW); stack2.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); // One each for task and task2 - verify(organizer2, times(2)).onTaskAppeared(any()); + verify(organizer2, times(2)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); verify(organizer2, times(0)).onTaskVanished(any()); // One for task verify(organizer).onTaskVanished(any()); @@ -274,11 +281,13 @@ public class WindowOrganizerTests extends WindowTestsBase { // Now we unregister the second one, the first one should automatically be reregistered // so we verify that it's now seeing changes. mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer2); - verify(organizer, times(3)).onTaskAppeared(any()); + verify(organizer, times(3)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); verify(organizer2, times(2)).onTaskVanished(any()); stack3.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - verify(organizer, times(4)).onTaskAppeared(any()); + verify(organizer, times(4)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); verify(organizer2, times(2)).onTaskVanished(any()); assertTrue(stack3.isOrganized()); } @@ -291,7 +300,8 @@ public class WindowOrganizerTests extends WindowTestsBase { final Task task = createTask(stack); final Task task2 = createTask(stack); stack.setWindowingMode(WINDOWING_MODE_PINNED); - verify(organizer, times(1)).onTaskAppeared(any()); + verify(organizer, times(1)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN); verify(organizer, times(1)).onTaskVanished(any()); @@ -304,7 +314,8 @@ public class WindowOrganizerTests extends WindowTestsBase { stack.setWindowingMode(WINDOWING_MODE_PINNED); final ITaskOrganizer organizer = registerMockOrganizer(WINDOWING_MODE_PINNED); - verify(organizer, times(1)).onTaskAppeared(any()); + verify(organizer, times(1)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); } @Test @@ -459,7 +470,7 @@ public class WindowOrganizerTests extends WindowTestsBase { public void testTileAddRemoveChild() { ITaskOrganizer listener = new ITaskOrganizer.Stub() { @Override - public void onTaskAppeared(RunningTaskInfo taskInfo) { } + public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { } @Override public void onTaskVanished(RunningTaskInfo container) { } @@ -515,7 +526,7 @@ public class WindowOrganizerTests extends WindowTestsBase { final boolean[] called = {false}; ITaskOrganizer listener = new ITaskOrganizer.Stub() { @Override - public void onTaskAppeared(RunningTaskInfo taskInfo) { } + public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { } @Override public void onTaskVanished(RunningTaskInfo container) { } @@ -577,7 +588,7 @@ public class WindowOrganizerTests extends WindowTestsBase { final ArrayMap<IBinder, RunningTaskInfo> lastReportedTiles = new ArrayMap<>(); ITaskOrganizer listener = new ITaskOrganizer.Stub() { @Override - public void onTaskAppeared(RunningTaskInfo taskInfo) { } + public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { } @Override public void onTaskVanished(RunningTaskInfo container) { } @@ -804,7 +815,7 @@ public class WindowOrganizerTests extends WindowTestsBase { RunningTaskInfo mInfo; @Override - public void onTaskAppeared(RunningTaskInfo info) { + public void onTaskAppeared(RunningTaskInfo info, SurfaceControl leash) { mInfo = info; } @Override @@ -907,12 +918,14 @@ public class WindowOrganizerTests extends WindowTestsBase { task.setTaskOrganizer(organizer); // setHasBeenVisible was already called once by the set-up code. task.setHasBeenVisible(true); - verify(organizer, times(1)).onTaskAppeared(any()); + verify(organizer, times(1)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.setTaskOrganizer(null); verify(organizer, times(1)).onTaskVanished(any()); task.setTaskOrganizer(organizer); - verify(organizer, times(2)).onTaskAppeared(any()); + verify(organizer, times(2)) + .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); task.removeImmediately(); verify(organizer, times(2)).onTaskVanished(any()); diff --git a/startop/iorap/TEST_MAPPING b/startop/iorap/TEST_MAPPING index 1d8119d91240..8c9d4dfb0894 100644 --- a/startop/iorap/TEST_MAPPING +++ b/startop/iorap/TEST_MAPPING @@ -2,9 +2,6 @@ "presubmit": [ { "name": "libiorap-java-tests" - }, - { - "name": "iorap-functional-tests" } ], "imports": [ diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 6b285d747854..477bb1fc19dc 100755 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -3053,20 +3053,21 @@ public class CarrierConfigManager { * This configuration allows the system UI to determine how long to continue to display 5G icons * when the device switches between different 5G scenarios. * - * There are six 5G scenarios: + * There are seven 5G scenarios: * 1. connected_mmwave: device currently connected to 5G cell as the secondary cell and using * millimeter wave. * 2. connected: device currently connected to 5G cell as the secondary cell but not using * millimeter wave. - * 3. not_restricted_rrc_idle: device camped on a network that has 5G capability(not necessary + * 3. not_restricted_rrc_idle: device camped on a network that has 5G capability (not necessary * to connect a 5G cell as a secondary cell) and the use of 5G is not restricted and RRC * currently in IDLE state. - * 4. not_restricted_rrc_con: device camped on a network that has 5G capability(not necessary + * 4. not_restricted_rrc_con: device camped on a network that has 5G capability (not necessary * to connect a 5G cell as a secondary cell) and the use of 5G is not restricted and RRC * currently in CONNECTED state. - * 5. restricted: device camped on a network that has 5G capability(not necessary to connect a + * 5. restricted: device camped on a network that has 5G capability (not necessary to connect a * 5G cell as a secondary cell) but the use of 5G is restricted. - * 6. any: any of the above scenarios, as well as none (not connected to 5G) + * 6. legacy: device is not camped on a network that has 5G capability + * 7. any: any of the above scenarios * * The configured string contains various timer rules separated by a semicolon. * Each rule will have three items: prior 5G scenario, current 5G scenario, and grace period @@ -3098,20 +3099,21 @@ public class CarrierConfigManager { * This configuration extends {@link #KEY_5G_ICON_DISPLAY_GRACE_PERIOD_STRING} to allow the * system UI to continue displaying 5G icons after the initial timer expires. * - * There are six 5G scenarios: + * There are seven 5G scenarios: * 1. connected_mmwave: device currently connected to 5G cell as the secondary cell and using * millimeter wave. * 2. connected: device currently connected to 5G cell as the secondary cell but not using * millimeter wave. - * 3. not_restricted_rrc_idle: device camped on a network that has 5G capability(not necessary + * 3. not_restricted_rrc_idle: device camped on a network that has 5G capability (not necessary * to connect a 5G cell as a secondary cell) and the use of 5G is not restricted and RRC * currently in IDLE state. - * 4. not_restricted_rrc_con: device camped on a network that has 5G capability(not necessary + * 4. not_restricted_rrc_con: device camped on a network that has 5G capability (not necessary * to connect a 5G cell as a secondary cell) and the use of 5G is not restricted and RRC * currently in CONNECTED state. - * 5. restricted: device camped on a network that has 5G capability(not necessary to connect a + * 5. restricted: device camped on a network that has 5G capability (not necessary to connect a * 5G cell as a secondary cell) but the use of 5G is restricted. - * 6. any: any of the above scenarios, as well as none (not connected to 5G) + * 6. legacy: device is not camped on a network that has 5G capability + * 7. any: any of the above scenarios * * The configured string contains various timer rules separated by a semicolon. * Each rule will have three items: primary 5G scenario, secondary 5G scenario, and @@ -4203,7 +4205,7 @@ public class CarrierConfigManager { sDefaults.putStringArray(KEY_BANDWIDTH_STRING_ARRAY, new String[]{ "GPRS:24,24", "EDGE:70,18", "UMTS:115,115", "CDMA-IS95A:14,14", "CDMA-IS95B:14,14", "1xRTT:30,30", "EvDo-rev.0:750,48", "EvDo-rev.A:950,550", "HSDPA:4300,620", - "HSUPA:4300,1800", "HSPA:4300,1800", "EvDo-rev.B:1500,550:", "eHRPD:750,48", + "HSUPA:4300,1800", "HSPA:4300,1800", "EvDo-rev.B:1500,550", "eHRPD:750,48", "HSPAP:13000,3400", "TD-SCDMA:115,115", "LTE:30000,15000", "NR_NSA:47000,15000", "NR_NSA_MMWAVE:145000,15000", "NR_SA:145000,15000"}); sDefaults.putBoolean(KEY_BANDWIDTH_NR_NSA_USE_LTE_VALUE_FOR_UPSTREAM_BOOL, false); diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java index 86c3fa0fe034..073ae30aaf1a 100644 --- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java +++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java @@ -18,32 +18,27 @@ package com.android.test.taskembed; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; -import android.app.ActivityManager; import android.app.Activity; +import android.app.ActivityManager; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Rect; import android.os.Bundle; -import android.os.IBinder; -import android.os.RemoteException; import android.view.Gravity; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; -import android.window.ITaskOrganizer; -import android.window.IWindowContainerTransactionCallback; +import android.widget.LinearLayout; import android.window.TaskOrganizer; import android.window.WindowContainerTransaction; -import android.widget.LinearLayout; import android.window.WindowContainerTransactionCallback; -import android.window.WindowOrganizer; public class TaskOrganizerMultiWindowTest extends Activity { - class SplitLayout extends LinearLayout implements View.OnTouchListener { + static class SplitLayout extends LinearLayout implements View.OnTouchListener { View mView1; View mView2; View mDividerView; @@ -99,8 +94,8 @@ public class TaskOrganizerMultiWindowTest extends Activity { class ResizingTaskView extends TaskView { final Intent mIntent; boolean launched = false; - ResizingTaskView(Context c, TaskOrganizer o, int windowingMode, Intent i) { - super(c, o, windowingMode); + ResizingTaskView(Context c, Intent i) { + super(c); mIntent = i; } @@ -125,9 +120,9 @@ public class TaskOrganizerMultiWindowTest extends Activity { } } - TaskView mTaskView1; - TaskView mTaskView2; - boolean gotFirstTask = false; + private TaskView mTaskView1; + private TaskView mTaskView2; + private boolean mGotFirstTask = false; class Organizer extends TaskOrganizer { private int receivedTransactions = 0; @@ -146,17 +141,17 @@ public class TaskOrganizerMultiWindowTest extends Activity { }; @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo ti) { - if (!gotFirstTask) { - mTaskView1.reparentTask(ti.token); - gotFirstTask = true; + public void onTaskAppeared(ActivityManager.RunningTaskInfo ti, SurfaceControl leash) { + if (!mGotFirstTask) { + mTaskView1.reparentTask(ti.token, leash); + mGotFirstTask = true; } else { - mTaskView2.reparentTask(ti.token); + mTaskView2.reparentTask(ti.token, leash); } } } - Organizer mOrganizer = new Organizer(); + private Organizer mOrganizer = new Organizer(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -164,27 +159,31 @@ public class TaskOrganizerMultiWindowTest extends Activity { mOrganizer.registerOrganizer(WINDOWING_MODE_MULTI_WINDOW); - mTaskView1 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW, - makeSettingsIntent()); - mTaskView2 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW, - makeContactsIntent()); + mTaskView1 = new ResizingTaskView(this, makeSettingsIntent()); + mTaskView2 = new ResizingTaskView(this, makeContactsIntent()); View splitView = new SplitLayout(this, mTaskView1, mTaskView2); setContentView(splitView); } + @Override + protected void onDestroy() { + super.onDestroy(); + mOrganizer.unregisterOrganizer(); + } + private void addFlags(Intent intent) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); } - Intent makeSettingsIntent() { + private Intent makeSettingsIntent() { Intent intent = new Intent(); intent.setAction(android.provider.Settings.ACTION_SETTINGS); addFlags(intent); return intent; } - Intent makeContactsIntent() { + private Intent makeContactsIntent() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_APP_CONTACTS); @@ -192,14 +191,14 @@ public class TaskOrganizerMultiWindowTest extends Activity { return intent; } - Bundle makeLaunchOptions(int width, int height) { + private Bundle makeLaunchOptions(int width, int height) { ActivityOptions o = ActivityOptions.makeBasic(); o.setLaunchWindowingMode(WINDOWING_MODE_MULTI_WINDOW); o.setLaunchBounds(new Rect(0, 0, width, height)); return o.toBundle(); } - void launchOrganizedActivity(Intent i, int width, int height) { + private void launchOrganizedActivity(Intent i, int width, int height) { startActivity(i, makeLaunchOptions(width, height)); } } diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java index 2a1aa2e1de65..8fc5c5d78b60 100644 --- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java +++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java @@ -23,21 +23,22 @@ import android.app.Service; import android.content.Intent; import android.graphics.Rect; import android.os.IBinder; +import android.view.SurfaceControl; import android.view.ViewGroup; -import android.window.TaskOrganizer; -import android.window.WindowContainerTransaction; import android.view.WindowManager; import android.widget.FrameLayout; +import android.window.TaskOrganizer; +import android.window.WindowContainerTransaction; public class TaskOrganizerPipTest extends Service { - static final int PIP_WIDTH = 640; - static final int PIP_HEIGHT = 360; + private static final int PIP_WIDTH = 640; + private static final int PIP_HEIGHT = 360; - TaskView mTaskView; + private TaskView mTaskView; class Organizer extends TaskOrganizer { - public void onTaskAppeared(ActivityManager.RunningTaskInfo ti) { - mTaskView.reparentTask(ti.token); + public void onTaskAppeared(ActivityManager.RunningTaskInfo ti, SurfaceControl leash) { + mTaskView.reparentTask(ti.token, leash); final WindowContainerTransaction wct = new WindowContainerTransaction(); wct.scheduleFinishEnterPip(ti.token, new Rect(0, 0, PIP_WIDTH, PIP_HEIGHT)); @@ -45,7 +46,7 @@ public class TaskOrganizerPipTest extends Service { } } - Organizer mOrganizer = new Organizer(); + private Organizer mOrganizer = new Organizer(); @Override public IBinder onBind(Intent intent) { @@ -66,7 +67,7 @@ public class TaskOrganizerPipTest extends Service { FrameLayout layout = new FrameLayout(this); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(PIP_WIDTH, PIP_HEIGHT); - mTaskView = new TaskView(this, mOrganizer, WINDOWING_MODE_PINNED); + mTaskView = new TaskView(this); layout.addView(mTaskView, lp); WindowManager wm = getSystemService(WindowManager.class); @@ -76,5 +77,6 @@ public class TaskOrganizerPipTest extends Service { @Override public void onDestroy() { super.onDestroy(); + mOrganizer.unregisterOrganizer(); } } diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java index aa041f22a46e..208018c2543a 100644 --- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java +++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java @@ -16,34 +16,27 @@ package com.android.test.taskembed; -import android.app.ActivityTaskManager; import android.content.Context; -import android.window.TaskOrganizer; -import android.window.WindowContainerToken; import android.view.SurfaceControl; import android.view.SurfaceHolder; import android.view.SurfaceView; -import android.window.ITaskOrganizer; +import android.window.WindowContainerToken; /** * Simple SurfaceView wrapper which registers a TaskOrganizer * after it's Surface is ready. */ class TaskView extends SurfaceView implements SurfaceHolder.Callback { - final TaskOrganizer mTaskOrganizer; - final int mWindowingMode; WindowContainerToken mWc; + private SurfaceControl mLeash; - boolean mSurfaceCreated = false; - boolean mNeedsReparent; + private boolean mSurfaceCreated = false; + private boolean mNeedsReparent; - TaskView(Context c, TaskOrganizer o, int windowingMode) { + TaskView(Context c) { super(c); getHolder().addCallback(this); setZOrderOnTop(true); - - mTaskOrganizer = o; - mWindowingMode = windowingMode; } @Override @@ -63,27 +56,25 @@ class TaskView extends SurfaceView implements SurfaceHolder.Callback { public void surfaceDestroyed(SurfaceHolder holder) { } - void reparentTask(WindowContainerToken wc) { + void reparentTask(WindowContainerToken wc, SurfaceControl leash) { mWc = wc; - if (mSurfaceCreated == false) { + mLeash = leash; + if (!mSurfaceCreated) { mNeedsReparent = true; } else { reparentLeash(); } } - void reparentLeash() { + private void reparentLeash() { SurfaceControl.Transaction t = new SurfaceControl.Transaction(); - SurfaceControl leash = null; - try { - leash = mWc.getLeash(); - } catch (Exception e) { - // System server died.. oh well + if (mLeash == null) { + return; } - t.reparent(leash, getSurfaceControl()) - .setPosition(leash, 0, 0) - .show(leash) + t.reparent(mLeash, getSurfaceControl()) + .setPosition(mLeash, 0, 0) + .show(mLeash) .apply(); } } diff --git a/tests/net/java/android/net/Ikev2VpnProfileTest.java b/tests/net/java/android/net/Ikev2VpnProfileTest.java index 2273bc61225c..ada5494efd60 100644 --- a/tests/net/java/android/net/Ikev2VpnProfileTest.java +++ b/tests/net/java/android/net/Ikev2VpnProfileTest.java @@ -40,7 +40,10 @@ import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; import java.util.concurrent.TimeUnit; import javax.security.auth.x500.X500Principal; @@ -106,6 +109,7 @@ public class Ikev2VpnProfileTest { assertTrue(profile.isBypassable()); assertTrue(profile.isMetered()); assertEquals(TEST_MTU, profile.getMaxMtu()); + assertEquals(Ikev2VpnProfile.DEFAULT_ALGORITHMS, profile.getAllowedAlgorithms()); } @Test @@ -160,6 +164,78 @@ public class Ikev2VpnProfileTest { } @Test + public void testBuildWithAllowedAlgorithmsAead() throws Exception { + final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); + builder.setAuthPsk(PSK_BYTES); + + List<String> allowedAlgorithms = Arrays.asList(IpSecAlgorithm.AUTH_CRYPT_AES_GCM); + builder.setAllowedAlgorithms(allowedAlgorithms); + + final Ikev2VpnProfile profile = builder.build(); + assertEquals(allowedAlgorithms, profile.getAllowedAlgorithms()); + } + + @Test + public void testBuildWithAllowedAlgorithmsNormal() throws Exception { + final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); + builder.setAuthPsk(PSK_BYTES); + + List<String> allowedAlgorithms = + Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA512, IpSecAlgorithm.CRYPT_AES_CBC); + builder.setAllowedAlgorithms(allowedAlgorithms); + + final Ikev2VpnProfile profile = builder.build(); + assertEquals(allowedAlgorithms, profile.getAllowedAlgorithms()); + } + + @Test + public void testSetAllowedAlgorithmsEmptyList() throws Exception { + final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); + + try { + builder.setAllowedAlgorithms(new ArrayList<>()); + fail("Expected exception due to no valid algorithm set"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testSetAllowedAlgorithmsInvalidList() throws Exception { + final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); + List<String> allowedAlgorithms = new ArrayList<>(); + + try { + builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA256)); + fail("Expected exception due to missing encryption"); + } catch (IllegalArgumentException expected) { + } + + try { + builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.CRYPT_AES_CBC)); + fail("Expected exception due to missing authentication"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testSetAllowedAlgorithmsInsecureAlgorithm() throws Exception { + final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); + List<String> allowedAlgorithms = new ArrayList<>(); + + try { + builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_MD5)); + fail("Expected exception due to insecure algorithm"); + } catch (IllegalArgumentException expected) { + } + + try { + builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA1)); + fail("Expected exception due to insecure algorithm"); + } catch (IllegalArgumentException expected) { + } + } + + @Test public void testBuildNoAuthMethodSet() throws Exception { final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions(); diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index a478e68c7dba..a992778fd45f 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -144,6 +144,7 @@ import android.net.ConnectivityManager.PacketKeepalive; import android.net.ConnectivityManager.PacketKeepaliveCallback; import android.net.ConnectivityManager.TooManyRequestsException; import android.net.ConnectivityThread; +import android.net.DataStallReportParcelable; import android.net.IConnectivityDiagnosticsCallback; import android.net.IDnsResolver; import android.net.IIpConnectivityMetrics; @@ -170,6 +171,7 @@ import android.net.NetworkSpecifier; import android.net.NetworkStack; import android.net.NetworkStackClient; import android.net.NetworkState; +import android.net.NetworkTestResultParcelable; import android.net.NetworkUtils; import android.net.ProxyInfo; import android.net.ResolverParamsParcel; @@ -196,7 +198,6 @@ import android.os.Looper; import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Parcelable; -import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; @@ -580,14 +581,6 @@ public class ConnectivityServiceTest { } private class TestNetworkAgentWrapper extends NetworkAgentWrapper { - private static final int VALIDATION_RESULT_BASE = NETWORK_VALIDATION_PROBE_DNS - | NETWORK_VALIDATION_PROBE_HTTP - | NETWORK_VALIDATION_PROBE_HTTPS; - private static final int VALIDATION_RESULT_VALID = VALIDATION_RESULT_BASE - | NETWORK_VALIDATION_RESULT_VALID; - private static final int VALIDATION_RESULT_PARTIAL = VALIDATION_RESULT_BASE - | NETWORK_VALIDATION_PROBE_FALLBACK - | NETWORK_VALIDATION_RESULT_PARTIAL; private static final int VALIDATION_RESULT_INVALID = 0; private static final long DATA_STALL_TIMESTAMP = 10L; @@ -595,12 +588,10 @@ public class ConnectivityServiceTest { private INetworkMonitor mNetworkMonitor; private INetworkMonitorCallbacks mNmCallbacks; - private int mNmValidationResult = VALIDATION_RESULT_BASE; + private int mNmValidationResult = VALIDATION_RESULT_INVALID; private int mProbesCompleted; private int mProbesSucceeded; private String mNmValidationRedirectUrl = null; - private PersistableBundle mValidationExtras = PersistableBundle.EMPTY; - private PersistableBundle mDataStallExtras = PersistableBundle.EMPTY; private boolean mNmProvNotificationRequested = false; private final ConditionVariable mNetworkStatusReceived = new ConditionVariable(); @@ -668,8 +659,13 @@ public class ConnectivityServiceTest { } mNmCallbacks.notifyProbeStatusChanged(mProbesCompleted, mProbesSucceeded); - mNmCallbacks.notifyNetworkTestedWithExtras( - mNmValidationResult, mNmValidationRedirectUrl, TIMESTAMP, mValidationExtras); + final NetworkTestResultParcelable p = new NetworkTestResultParcelable(); + p.result = mNmValidationResult; + p.probesAttempted = mProbesCompleted; + p.probesSucceeded = mProbesSucceeded; + p.redirectUrl = mNmValidationRedirectUrl; + p.timestampMillis = TIMESTAMP; + mNmCallbacks.notifyNetworkTestedWithExtras(p); if (mNmValidationRedirectUrl != null) { mNmCallbacks.showProvisioningNotification( @@ -751,9 +747,9 @@ public class ConnectivityServiceTest { } void setNetworkValid(boolean isStrictMode) { - mNmValidationResult = VALIDATION_RESULT_VALID; + mNmValidationResult = NETWORK_VALIDATION_RESULT_VALID; mNmValidationRedirectUrl = null; - int probesSucceeded = VALIDATION_RESULT_BASE & ~NETWORK_VALIDATION_PROBE_HTTP; + int probesSucceeded = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS; if (isStrictMode) { probesSucceeded |= NETWORK_VALIDATION_PROBE_PRIVDNS; } @@ -765,8 +761,9 @@ public class ConnectivityServiceTest { void setNetworkInvalid(boolean isStrictMode) { mNmValidationResult = VALIDATION_RESULT_INVALID; mNmValidationRedirectUrl = null; - int probesCompleted = VALIDATION_RESULT_BASE; - int probesSucceeded = VALIDATION_RESULT_INVALID; + int probesCompleted = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS + | NETWORK_VALIDATION_PROBE_HTTP; + int probesSucceeded = 0; // If the isStrictMode is true, it means the network is invalid when NetworkMonitor // tried to validate the private DNS but failed. if (isStrictMode) { @@ -782,7 +779,7 @@ public class ConnectivityServiceTest { mNmValidationRedirectUrl = redirectUrl; // Suppose the portal is found when NetworkMonitor probes NETWORK_VALIDATION_PROBE_HTTP // in the beginning, so the NETWORK_VALIDATION_PROBE_HTTPS hasn't probed yet. - int probesCompleted = VALIDATION_RESULT_BASE & ~NETWORK_VALIDATION_PROBE_HTTPS; + int probesCompleted = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP; int probesSucceeded = VALIDATION_RESULT_INVALID; if (isStrictMode) { probesCompleted |= NETWORK_VALIDATION_PROBE_PRIVDNS; @@ -791,18 +788,20 @@ public class ConnectivityServiceTest { } void setNetworkPartial() { - mNmValidationResult = VALIDATION_RESULT_PARTIAL; + mNmValidationResult = NETWORK_VALIDATION_RESULT_PARTIAL; mNmValidationRedirectUrl = null; - int probesCompleted = VALIDATION_RESULT_BASE; - int probesSucceeded = VALIDATION_RESULT_BASE & ~NETWORK_VALIDATION_PROBE_HTTPS; + int probesCompleted = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS + | NETWORK_VALIDATION_PROBE_FALLBACK; + int probesSucceeded = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_FALLBACK; setProbesStatus(probesCompleted, probesSucceeded); } void setNetworkPartialValid(boolean isStrictMode) { setNetworkPartial(); - mNmValidationResult |= VALIDATION_RESULT_VALID; - int probesCompleted = VALIDATION_RESULT_BASE; - int probesSucceeded = VALIDATION_RESULT_BASE & ~NETWORK_VALIDATION_PROBE_HTTPS; + mNmValidationResult |= NETWORK_VALIDATION_RESULT_VALID; + int probesCompleted = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS + | NETWORK_VALIDATION_PROBE_HTTP; + int probesSucceeded = NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP; // Suppose the partial network cannot pass the private DNS validation as well, so only // add NETWORK_VALIDATION_PROBE_DNS in probesCompleted but not probesSucceeded. if (isStrictMode) { @@ -838,8 +837,10 @@ public class ConnectivityServiceTest { } void notifyDataStallSuspected() throws Exception { - mNmCallbacks.notifyDataStallSuspected( - DATA_STALL_TIMESTAMP, DATA_STALL_DETECTION_METHOD, mDataStallExtras); + final DataStallReportParcelable p = new DataStallReportParcelable(); + p.detectionMethod = DATA_STALL_DETECTION_METHOD; + p.timestampMillis = DATA_STALL_TIMESTAMP; + mNmCallbacks.notifyDataStallSuspected(p); } } diff --git a/tests/net/java/com/android/server/net/NetworkStatsBaseTest.java b/tests/net/java/com/android/server/net/NetworkStatsBaseTest.java index 28785f7c9726..3aafe0b075f2 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsBaseTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsBaseTest.java @@ -41,6 +41,7 @@ abstract class NetworkStatsBaseTest { static final String TEST_IFACE = "test0"; static final String TEST_IFACE2 = "test1"; static final String TUN_IFACE = "test_nss_tun0"; + static final String TUN_IFACE2 = "test_nss_tun1"; static final int UID_RED = 1001; static final int UID_BLUE = 1002; @@ -107,10 +108,14 @@ abstract class NetworkStatsBaseTest { assertEquals("unexpected operations", operations, entry.operations); } - VpnInfo createVpnInfo(String[] underlyingIfaces) { + static VpnInfo createVpnInfo(String[] underlyingIfaces) { + return createVpnInfo(TUN_IFACE, underlyingIfaces); + } + + static VpnInfo createVpnInfo(String vpnIface, String[] underlyingIfaces) { VpnInfo info = new VpnInfo(); info.ownerUid = UID_VPN; - info.vpnIface = TUN_IFACE; + info.vpnIface = vpnIface; info.underlyingIfaces = underlyingIfaces; return info; } diff --git a/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java b/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java index a21f5095c746..4473492d7972 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java @@ -104,7 +104,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnRewriteTrafficThroughItself() throws Exception { + public void testVpnRewriteTrafficThroughItself() throws Exception { VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {TEST_IFACE})}; mFactory.updateVpnInfos(vpnInfos); @@ -133,7 +133,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithClat() throws Exception { + public void testVpnWithClat() throws Exception { VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {CLAT_PREFIX + TEST_IFACE})}; mFactory.updateVpnInfos(vpnInfos); mFactory.noteStackedIface(CLAT_PREFIX + TEST_IFACE, TEST_IFACE); @@ -166,7 +166,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithOneUnderlyingIface() throws Exception { + public void testVpnWithOneUnderlyingIface() throws Exception { VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {TEST_IFACE})}; mFactory.updateVpnInfos(vpnInfos); @@ -189,7 +189,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithOneUnderlyingIfaceAndOwnTraffic() throws Exception { + public void testVpnWithOneUnderlyingIfaceAndOwnTraffic() throws Exception { // WiFi network is connected and VPN is using WiFi (which has TEST_IFACE). VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {TEST_IFACE})}; mFactory.updateVpnInfos(vpnInfos); @@ -217,7 +217,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithOneUnderlyingIface_withCompression() throws Exception { + public void testVpnWithOneUnderlyingIface_withCompression() throws Exception { // WiFi network is connected and VPN is using WiFi (which has TEST_IFACE). VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {TEST_IFACE})}; mFactory.updateVpnInfos(vpnInfos); @@ -238,7 +238,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithTwoUnderlyingIfaces_packetDuplication() throws Exception { + public void testVpnWithTwoUnderlyingIfaces_packetDuplication() throws Exception { // WiFi and Cell networks are connected and VPN is using WiFi (which has TEST_IFACE) and // Cell (which has TEST_IFACE2) and has declared both of them in its underlying network set. // Additionally, VPN is duplicating traffic across both WiFi and Cell. @@ -264,7 +264,47 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithTwoUnderlyingIfaces_splitTraffic() throws Exception { + public void testConcurrentVpns() throws Exception { + // Assume two VPNs are connected on two different network interfaces. VPN1 is using + // TEST_IFACE and VPN2 is using TEST_IFACE2. + final VpnInfo[] vpnInfos = new VpnInfo[] { + createVpnInfo(TUN_IFACE, new String[] {TEST_IFACE}), + createVpnInfo(TUN_IFACE2, new String[] {TEST_IFACE2})}; + mFactory.updateVpnInfos(vpnInfos); + + // create some traffic (assume 10 bytes of MTU for VPN interface and 1 byte encryption + // overhead per packet): + // 1000 bytes (100 packets) were sent, and 2000 bytes (200 packets) were received by UID_RED + // over VPN1. + // 700 bytes (70 packets) were sent, and 3000 bytes (300 packets) were received by UID_RED + // over VPN2. + // 500 bytes (50 packets) were sent, and 1000 bytes (100 packets) were received by UID_BLUE + // over VPN1. + // 250 bytes (25 packets) were sent, and 500 bytes (50 packets) were received by UID_BLUE + // over VPN2. + // VPN1 sent 1650 bytes (150 packets), and received 3300 (300 packets) over TEST_IFACE. + // Of 1650 bytes sent over WiFi, expect 1000 bytes attributed to UID_RED, 500 bytes + // attributed to UID_BLUE, and 150 bytes attributed to UID_VPN. + // Of 3300 bytes received over WiFi, expect 2000 bytes attributed to UID_RED, 1000 bytes + // attributed to UID_BLUE, and 300 bytes attributed to UID_VPN. + // VPN2 sent 1045 bytes (95 packets), and received 3850 (350 packets) over TEST_IFACE2. + // Of 1045 bytes sent over Cell, expect 700 bytes attributed to UID_RED, 250 bytes + // attributed to UID_BLUE, and 95 bytes attributed to UID_VPN. + // Of 3850 bytes received over Cell, expect 3000 bytes attributed to UID_RED, 500 bytes + // attributed to UID_BLUE, and 350 bytes attributed to UID_VPN. + final NetworkStats tunStats = + parseDetailedStats(R.raw.xt_qtaguid_vpn_one_underlying_two_vpn); + + assertValues(tunStats, TEST_IFACE, UID_RED, 2000L, 200L, 1000L, 100L); + assertValues(tunStats, TEST_IFACE, UID_BLUE, 1000L, 100L, 500L, 50L); + assertValues(tunStats, TEST_IFACE2, UID_RED, 3000L, 300L, 700L, 70L); + assertValues(tunStats, TEST_IFACE2, UID_BLUE, 500L, 50L, 250L, 25L); + assertValues(tunStats, TEST_IFACE, UID_VPN, 300L, 0L, 150L, 0L); + assertValues(tunStats, TEST_IFACE2, UID_VPN, 350L, 0L, 95L, 0L); + } + + @Test + public void testVpnWithTwoUnderlyingIfaces_splitTraffic() throws Exception { // WiFi and Cell networks are connected and VPN is using WiFi (which has TEST_IFACE) and // Cell (which has TEST_IFACE2) and has declared both of them in its underlying network set. // Additionally, VPN is arbitrarily splitting traffic across WiFi and Cell. @@ -291,7 +331,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithTwoUnderlyingIfaces_splitTrafficWithCompression() throws Exception { + public void testVpnWithTwoUnderlyingIfaces_splitTrafficWithCompression() throws Exception { // WiFi and Cell networks are connected and VPN is using WiFi (which has TEST_IFACE) and // Cell (which has TEST_IFACE2) and has declared both of them in its underlying network set. // Additionally, VPN is arbitrarily splitting compressed traffic across WiFi and Cell. @@ -314,7 +354,7 @@ public class NetworkStatsFactoryTest extends NetworkStatsBaseTest { } @Test - public void vpnWithIncorrectUnderlyingIface() throws Exception { + public void testVpnWithIncorrectUnderlyingIface() throws Exception { // WiFi and Cell networks are connected and VPN is using Cell (which has TEST_IFACE2), // but has declared only WiFi (TEST_IFACE) in its underlying network set. VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(new String[] {TEST_IFACE})}; diff --git a/tests/net/res/raw/xt_qtaguid_vpn_one_underlying_two_vpn b/tests/net/res/raw/xt_qtaguid_vpn_one_underlying_two_vpn new file mode 100644 index 000000000000..eb0513b10049 --- /dev/null +++ b/tests/net/res/raw/xt_qtaguid_vpn_one_underlying_two_vpn @@ -0,0 +1,9 @@ +idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets +2 test_nss_tun0 0x0 1001 0 2000 200 1000 100 0 0 0 0 0 0 0 0 0 0 0 0 +3 test_nss_tun0 0x0 1002 0 1000 100 500 50 0 0 0 0 0 0 0 0 0 0 0 0 +4 test_nss_tun1 0x0 1001 0 3000 300 700 70 0 0 0 0 0 0 0 0 0 0 0 0 +5 test_nss_tun1 0x0 1002 0 500 50 250 25 0 0 0 0 0 0 0 0 0 0 0 0 +6 test0 0x0 1004 0 3300 300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7 test0 0x0 1004 1 0 0 1650 150 0 0 0 0 0 0 0 0 0 0 0 0 +8 test1 0x0 1004 0 3850 350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +9 test1 0x0 1004 1 0 0 1045 95 0 0 0 0 0 0 0 0 0 0 0 0
\ No newline at end of file diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp index e7a82034c77a..4a6bfd031284 100644 --- a/tools/aapt2/dump/DumpManifest.cpp +++ b/tools/aapt2/dump/DumpManifest.cpp @@ -91,6 +91,7 @@ enum { }; const std::string& kAndroidNamespace = "http://schemas.android.com/apk/res/android"; +constexpr int kCurrentDevelopmentVersion = 10000; /** Retrieves the attribute of the element with the specified attribute resource id. */ static xml::Attribute* FindAttribute(xml::Element *el, uint32_t resd_id) { @@ -325,7 +326,7 @@ class ManifestExtractor { ConfigDescription config; config.orientation = android::ResTable_config::ORIENTATION_PORT; config.density = android::ResTable_config::DENSITY_MEDIUM; - config.sdkVersion = 10000; // Very high. + config.sdkVersion = kCurrentDevelopmentVersion; // Very high. config.screenWidthDp = 320; config.screenHeightDp = 480; config.smallestScreenWidthDp = 320; @@ -622,6 +623,8 @@ class UsesSdkBadging : public ManifestExtractor::Element { } if (target_sdk) { extractor()->RaiseTargetSdk(*target_sdk); + } else if (target_sdk_name) { + extractor()->RaiseTargetSdk(kCurrentDevelopmentVersion); } } |