diff --git a/AconfigFlags.bp b/AconfigFlags.bp index 7913ad1d09a5f7e9dfe86436825cfe81276861ff..a271d063d1f97bf4dabaf41ef55ac94685285f66 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -35,6 +35,7 @@ aconfig_srcjars = [ ":android.permission.flags-aconfig-java{.generated_srcjars}", ":hwui_flags_java_lib{.generated_srcjars}", ":display_flags_lib{.generated_srcjars}", + ":android.multiuser.flags-aconfig-java{.generated_srcjars}", ] filegroup { @@ -252,7 +253,7 @@ java_aconfig_library { aconfig_declarations { name: "android.content.pm.flags-aconfig", package: "android.content.pm", - srcs: ["core/java/android/content/pm/*.aconfig"], + srcs: ["core/java/android/content/pm/flags.aconfig"], } java_aconfig_library { @@ -313,3 +314,16 @@ java_aconfig_library { aconfig_declarations: "display_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], } + +// Multi user +aconfig_declarations { + name: "android.multiuser.flags-aconfig", + package: "android.multiuser", + srcs: ["core/java/android/content/pm/multiuser.aconfig"], +} + +java_aconfig_library { + name: "android.multiuser.flags-aconfig-java", + aconfig_declarations: "android.multiuser.flags-aconfig", + defaults: ["framework-minus-apex-aconfig-java-defaults"], +} diff --git a/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java b/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java index 7927aa90695eb8970eedfbddaf4429a5734e57a2..885000fdcf3e771e7308ce7942a3e9ad9d9080f2 100644 --- a/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java +++ b/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java @@ -22,7 +22,6 @@ import android.app.Activity; import android.app.Instrumentation; import android.app.UiAutomation; import android.perftests.utils.PerfTestActivity; -import android.platform.test.annotations.LargeTest; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; @@ -32,6 +31,7 @@ import android.widget.TextView; import androidx.benchmark.BenchmarkState; import androidx.benchmark.junit4.BenchmarkRule; +import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.ActivityTestRule; diff --git a/apct-tests/perftests/core/src/android/text/TextViewCursorAnchorInfoPerfTest.java b/apct-tests/perftests/core/src/android/text/TextViewCursorAnchorInfoPerfTest.java index 898111f2fd8a2f8f774093362645515bb2d89a4b..436ee16504bb99050ed171561da6f5fa0bb91b1f 100644 --- a/apct-tests/perftests/core/src/android/text/TextViewCursorAnchorInfoPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/TextViewCursorAnchorInfoPerfTest.java @@ -22,13 +22,13 @@ import android.content.Context; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.perftests.utils.PerfTestActivity; -import android.platform.test.annotations.LargeTest; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.CursorAnchorInfo; import android.widget.TextView; +import androidx.test.filters.LargeTest; import androidx.test.rule.ActivityTestRule; import org.junit.Before; diff --git a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java index fd9d99181fbfbe0c054ae9ed86839e51ff05fa50..c53cc1820b6f9b4487e9a61d44f8e27f76d637b8 100644 --- a/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java +++ b/apct-tests/perftests/surfaceflinger/src/android/surfaceflinger/SurfaceFlingerPerfTest.java @@ -17,12 +17,15 @@ package android.surfaceflinger; import static android.server.wm.CtsWindowInfoUtils.waitForWindowOnTop; +import static android.provider.Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS; import android.app.Instrumentation; +import android.content.ContentResolver; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; +import android.provider.Settings; import android.util.Log; import android.view.SurfaceControl; import android.view.SurfaceHolder; @@ -33,9 +36,11 @@ import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; +import com.android.compatibility.common.util.SystemUtil; import com.android.helpers.SimpleperfHelper; import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; @@ -71,7 +76,7 @@ public class SurfaceFlingerPerfTest { private int mTransformHint; private SimpleperfHelper mSimpleperfHelper = new SimpleperfHelper(); - + private static String sImmersiveModeConfirmationValue; /** Start simpleperf sampling. */ public void startSimpleperf(String subcommand, String arguments) { if (!mSimpleperfHelper.startCollecting(subcommand, arguments)) { @@ -88,6 +93,17 @@ public class SurfaceFlingerPerfTest { @BeforeClass public static void suiteSetup() { + SystemUtil.runWithShellPermissionIdentity(() -> { + // hide immersive mode confirmation dialog + final ContentResolver resolver = + InstrumentationRegistry.getInstrumentation().getContext().getContentResolver(); + sImmersiveModeConfirmationValue = + Settings.Secure.getString(resolver, IMMERSIVE_MODE_CONFIRMATIONS); + Settings.Secure.putString( + resolver, + IMMERSIVE_MODE_CONFIRMATIONS, + "confirmed"); + }); final Bundle arguments = InstrumentationRegistry.getArguments(); sProfilingIterations = Integer.parseInt( arguments.getString(ARGUMENT_PROFILING_ITERATIONS, DEFAULT_PROFILING_ITERATIONS)); @@ -98,6 +114,18 @@ public class SurfaceFlingerPerfTest { .executeShellCommand("service call SurfaceFlinger 1041 i32 -1"); } + @AfterClass + public static void suiteTeardown() { + SystemUtil.runWithShellPermissionIdentity(() -> { + // Restore the immersive mode confirmation state. + Settings.Secure.putString( + InstrumentationRegistry.getInstrumentation().getContext().getContentResolver(), + IMMERSIVE_MODE_CONFIRMATIONS, + sImmersiveModeConfirmationValue); + }); + } + + @Before public void setup() { mActivityRule.getScenario().onActivity(activity -> mActivity = activity); diff --git a/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING b/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING index d9c463294a692dffd862e55a38d62308d03f2f35..8504b1f0bdb1951ff6827902ee679c2186429c80 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING +++ b/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING @@ -4,7 +4,7 @@ "name": "CtsJobSchedulerTestCases", "options": [ {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.LargeTest"} ] @@ -14,7 +14,7 @@ "options": [ {"include-filter": "com.android.server.job"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"} ] }, @@ -23,7 +23,7 @@ "options": [ {"include-filter": "com.android.server.job"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"} ] } diff --git a/core/api/current.txt b/core/api/current.txt index 1eb9e97db42bb43447afd8487b4e92495d277974..05ec9ba71a4c5834ff173a90e3d8152d07ed47d3 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -18646,6 +18646,10 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_INFO_STRENGTH_DEFAULT_LEVEL; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_INFO_STRENGTH_MAXIMUM_LEVEL; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_SINGLE_STRENGTH_MAX_LEVEL; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_TORCH_STRENGTH_DEFAULT_LEVEL; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_TORCH_STRENGTH_MAX_LEVEL; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.DeviceStateSensorOrientationMap> INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL; @@ -19215,6 +19219,7 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EXTENSION_STRENGTH; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_STRENGTH_LEVEL; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION; @@ -19310,6 +19315,7 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EXTENSION_STRENGTH; field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE; + field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STRENGTH_LEVEL; field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION; field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 660859d6e66e469444b1faa228b703599e5c2ebf..ad658061a0f619b43d7896694492fe18f58ce816 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3232,6 +3232,7 @@ package android.companion.virtual { method public int getDefaultActivityPolicy(); method public int getDefaultNavigationPolicy(); method public int getDevicePolicy(int); + method @FlaggedApi(Flags.FLAG_VDM_CUSTOM_HOME) @Nullable public android.content.ComponentName getHomeComponent(); method public int getLockState(); method @Nullable public String getName(); method @NonNull public java.util.Set<android.os.UserHandle> getUsersWithMatchingAccounts(); @@ -3263,6 +3264,7 @@ package android.companion.virtual { method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedActivities(@NonNull java.util.Set<android.content.ComponentName>); method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedCrossTaskNavigations(@NonNull java.util.Set<android.content.ComponentName>); method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setDevicePolicy(int, int); + method @FlaggedApi(Flags.FLAG_VDM_CUSTOM_HOME) @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setHomeComponent(@Nullable android.content.ComponentName); method @NonNull @RequiresPermission(value=android.Manifest.permission.ADD_ALWAYS_UNLOCKED_DISPLAY, conditional=true) public android.companion.virtual.VirtualDeviceParams.Builder setLockState(int); method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setName(@NonNull String); method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setUsersWithMatchingAccounts(@NonNull java.util.Set<android.os.UserHandle>); diff --git a/core/java/android/app/TEST_MAPPING b/core/java/android/app/TEST_MAPPING index 93107cea406e012a7e469ec624ee7eb0803ebe6e..315a0556042abf2b3983a81ac5ab58c28cafdd96 100644 --- a/core/java/android/app/TEST_MAPPING +++ b/core/java/android/app/TEST_MAPPING @@ -138,7 +138,7 @@ "include-annotation": "android.platform.test.annotations.Presubmit" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.FlakyTest" diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 213e5cb4ad64953877335efede27bc0e5b3b2a15..7704486b606c4ae083ae2b2386ad1e80d6094bcd 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -10335,11 +10335,14 @@ public class DevicePolicyManager { * @return the current credential manager policy if null then this policy has not been * configured. */ + @UserHandleAware( + enabledSinceTargetSdkVersion = UPSIDE_DOWN_CAKE, + requiresPermissionIfNotCaller = INTERACT_ACROSS_USERS) public @Nullable PackagePolicy getCredentialManagerPolicy() { throwIfParentInstance("getCredentialManagerPolicy"); if (mService != null) { try { - return mService.getCredentialManagerPolicy(); + return mService.getCredentialManagerPolicy(myUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index c49b820b9e378ed3a253e74df1f262e150d705b0..58f9d57763face29200833ed7b3bf447608c783c 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -346,7 +346,7 @@ interface IDevicePolicyManager { boolean hasManagedProfileCallerIdAccess(int userId, String packageName); void setCredentialManagerPolicy(in PackagePolicy policy); - PackagePolicy getCredentialManagerPolicy(); + PackagePolicy getCredentialManagerPolicy(int userId); void setManagedProfileContactsAccessPolicy(in PackagePolicy policy); PackagePolicy getManagedProfileContactsAccessPolicy(); diff --git a/core/java/android/companion/virtual/VirtualDeviceParams.java b/core/java/android/companion/virtual/VirtualDeviceParams.java index b4c740ec55995bc6b5fae371f3ca512dd963f2f6..0fa78c88c863a21d796d77fcf6b9160c0cd75a1f 100644 --- a/core/java/android/companion/virtual/VirtualDeviceParams.java +++ b/core/java/android/companion/virtual/VirtualDeviceParams.java @@ -229,6 +229,7 @@ public final class VirtualDeviceParams implements Parcelable { @Nullable private final String mName; // Mapping of @PolicyType to @DevicePolicy @NonNull private final SparseIntArray mDevicePolicies; + @Nullable private final ComponentName mHomeComponent; @NonNull private final List<VirtualSensorConfig> mVirtualSensorConfigs; @Nullable private final IVirtualSensorCallback mVirtualSensorCallback; private final int mAudioPlaybackSessionId; @@ -243,6 +244,7 @@ public final class VirtualDeviceParams implements Parcelable { @NonNull Set<ComponentName> activityPolicyExemptions, @Nullable String name, @NonNull SparseIntArray devicePolicies, + @Nullable ComponentName homeComponent, @NonNull List<VirtualSensorConfig> virtualSensorConfigs, @Nullable IVirtualSensorCallback virtualSensorCallback, int audioPlaybackSessionId, @@ -258,6 +260,7 @@ public final class VirtualDeviceParams implements Parcelable { new ArraySet<>(Objects.requireNonNull(activityPolicyExemptions)); mName = name; mDevicePolicies = Objects.requireNonNull(devicePolicies); + mHomeComponent = homeComponent; mVirtualSensorConfigs = Objects.requireNonNull(virtualSensorConfigs); mVirtualSensorCallback = virtualSensorCallback; mAudioPlaybackSessionId = audioPlaybackSessionId; @@ -280,6 +283,7 @@ public final class VirtualDeviceParams implements Parcelable { IVirtualSensorCallback.Stub.asInterface(parcel.readStrongBinder()); mAudioPlaybackSessionId = parcel.readInt(); mAudioRecordingSessionId = parcel.readInt(); + mHomeComponent = parcel.readTypedObject(ComponentName.CREATOR); } /** @@ -290,6 +294,19 @@ public final class VirtualDeviceParams implements Parcelable { return mLockState; } + /** + * Returns the custom component used as home on all displays owned by this virtual device that + * support home activities. + * + * @see Builder#setHomeComponent + */ + // TODO(b/297168328): Link to the relevant API for creating displays with home support. + @FlaggedApi(Flags.FLAG_VDM_CUSTOM_HOME) + @Nullable + public ComponentName getHomeComponent() { + return mHomeComponent; + } + /** * Returns the user handles with matching managed accounts on the remote device to which * this virtual device is streaming. @@ -468,6 +485,7 @@ public final class VirtualDeviceParams implements Parcelable { mVirtualSensorCallback != null ? mVirtualSensorCallback.asBinder() : null); dest.writeInt(mAudioPlaybackSessionId); dest.writeInt(mAudioRecordingSessionId); + dest.writeTypedObject(mHomeComponent, flags); } @Override @@ -508,7 +526,7 @@ public final class VirtualDeviceParams implements Parcelable { int hashCode = Objects.hash( mLockState, mUsersWithMatchingAccounts, mCrossTaskNavigationExemptions, mDefaultNavigationPolicy, mActivityPolicyExemptions, mDefaultActivityPolicy, mName, - mDevicePolicies, mAudioPlaybackSessionId, mAudioRecordingSessionId); + mDevicePolicies, mHomeComponent, mAudioPlaybackSessionId, mAudioRecordingSessionId); for (int i = 0; i < mDevicePolicies.size(); i++) { hashCode = 31 * hashCode + mDevicePolicies.keyAt(i); hashCode = 31 * hashCode + mDevicePolicies.valueAt(i); @@ -528,6 +546,7 @@ public final class VirtualDeviceParams implements Parcelable { + " mActivityPolicyExemptions=" + mActivityPolicyExemptions + " mName=" + mName + " mDevicePolicies=" + mDevicePolicies + + " mHomeComponent=" + mHomeComponent + " mAudioPlaybackSessionId=" + mAudioPlaybackSessionId + " mAudioRecordingSessionId=" + mAudioRecordingSessionId + ")"; @@ -588,6 +607,7 @@ public final class VirtualDeviceParams implements Parcelable { @Nullable private VirtualSensorCallback mVirtualSensorCallback; @Nullable private Executor mVirtualSensorDirectChannelCallbackExecutor; @Nullable private VirtualSensorDirectChannelCallback mVirtualSensorDirectChannelCallback; + @Nullable private ComponentName mHomeComponent; private static class VirtualSensorCallbackDelegate extends IVirtualSensorCallback.Stub { @NonNull @@ -664,6 +684,23 @@ public final class VirtualDeviceParams implements Parcelable { return this; } + /** + * Specifies a component to be used as home on all displays owned by this virtual device + * that support home activities. + * * + * <p>Note: Only relevant for virtual displays that support home activities.</p> + * + * @param homeComponent The component name to be used as home. If unset, then the system- + * default secondary home activity will be used. + */ + // TODO(b/297168328): Link to the relevant API for creating displays with home support. + @FlaggedApi(Flags.FLAG_VDM_CUSTOM_HOME) + @NonNull + public Builder setHomeComponent(@Nullable ComponentName homeComponent) { + mHomeComponent = homeComponent; + return this; + } + /** * Sets the user handles with matching managed accounts on the remote device to which * this virtual device is streaming. The caller is responsible for verifying the presence @@ -1031,6 +1068,7 @@ public final class VirtualDeviceParams implements Parcelable { mActivityPolicyExemptions, mName, mDevicePolicies, + mHomeComponent, mVirtualSensorConfigs, virtualSensorCallbackDelegate, mAudioPlaybackSessionId, diff --git a/core/java/android/companion/virtual/flags.aconfig b/core/java/android/companion/virtual/flags.aconfig index ee36f187b729d301d6ee554638f9d4e61b309fa4..3e96c96d8d1791c5e8f4f720d700791d2b1120fd 100644 --- a/core/java/android/companion/virtual/flags.aconfig +++ b/core/java/android/companion/virtual/flags.aconfig @@ -14,6 +14,13 @@ flag { bug: "298401780" } +flag { + name: "vdm_custom_home" + namespace: "virtual_devices" + description: "Enable custom home API" + bug: "297168328" +} + flag { name: "vdm_public_apis" namespace: "virtual_devices" diff --git a/core/java/android/content/TEST_MAPPING b/core/java/android/content/TEST_MAPPING index 01a9373dea1f69ff422dfcedcb7d75470f2067a8..addede4cc60cdd991e10a5823e40f8391151653e 100644 --- a/core/java/android/content/TEST_MAPPING +++ b/core/java/android/content/TEST_MAPPING @@ -7,7 +7,7 @@ "include-annotation": "android.platform.test.annotations.Presubmit" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.FlakyTest" diff --git a/core/java/android/content/pm/OWNERS b/core/java/android/content/pm/OWNERS index 0a7d079b8939b992cfabbfe85f4e7aae236a6e19..53dd3bffe06c72b619be3b495e6a5ebba949b40b 100644 --- a/core/java/android/content/pm/OWNERS +++ b/core/java/android/content/pm/OWNERS @@ -9,3 +9,4 @@ per-file *Shortcut* = file:/core/java/android/content/pm/SHORTCUT_OWNERS per-file *Launcher* = file:/core/java/android/content/pm/LAUNCHER_OWNERS per-file UserInfo* = file:/MULTIUSER_OWNERS per-file *UserProperties* = file:/MULTIUSER_OWNERS +per-file *multiuser* = file:/MULTIUSER_OWNERS diff --git a/core/java/android/content/pm/multiuser.aconfig b/core/java/android/content/pm/multiuser.aconfig new file mode 100644 index 0000000000000000000000000000000000000000..07ff7be00114e8b700a72026437916ab0014e319 --- /dev/null +++ b/core/java/android/content/pm/multiuser.aconfig @@ -0,0 +1,8 @@ +package: "android.multiuser" + +flag { + name: "save_global_and_guest_restrictions_on_system_user_xml" + namespace: "multiuser" + description: "Save guest and device policy global restrictions on the SYSTEM user's XML file." + bug: "301067944" +} diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 943f0c4bba0a325db8014a873bf88c7c1d604826..89f889f988e2bdc04fdc673edcfdf459dfdee89e 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1406,6 +1406,74 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri public static final Key<Integer> FLASH_INFO_STRENGTH_DEFAULT_LEVEL = new Key<Integer>("android.flash.info.strengthDefaultLevel", int.class); + /** + * <p>Maximum flash brightness level for manual flash control in SINGLE mode.</p> + * <p>Maximum flash brightness level in camera capture mode and + * {@link CaptureRequest#FLASH_MODE android.flash.mode} set to SINGLE. + * Value will be > 1 if the manual flash strength control feature is supported, + * otherwise the value will be equal to 1. + * Note that this level is just a number of supported levels (the granularity of control). + * There is no actual physical power units tied to this level.</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + * + * @see CaptureRequest#FLASH_MODE + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_SINGLE_STRENGTH_MAX_LEVEL = + new Key<Integer>("android.flash.singleStrengthMaxLevel", int.class); + + /** + * <p>Default flash brightness level for manual flash control in SINGLE mode.</p> + * <p>If flash unit is available this will be greater than or equal to 1 and less + * or equal to <code>android.flash.info.singleStrengthMaxLevel</code>. + * Note for devices that do not support the manual flash strength control + * feature, this level will always be equal to 1.</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL = + new Key<Integer>("android.flash.singleStrengthDefaultLevel", int.class); + + /** + * <p>Maximum flash brightness level for manual flash control in TORCH mode</p> + * <p>Maximum flash brightness level in camera capture mode and + * {@link CaptureRequest#FLASH_MODE android.flash.mode} set to TORCH. + * Value will be > 1 if the manual flash strength control feature is supported, + * otherwise the value will be equal to 1.</p> + * <p>Note that this level is just a number of supported levels(the granularity of control). + * There is no actual physical power units tied to this level. + * There is no relation between android.flash.info.torchStrengthMaxLevel and + * android.flash.info.singleStrengthMaxLevel i.e. the ratio of + * android.flash.info.torchStrengthMaxLevel:android.flash.info.singleStrengthMaxLevel + * is not guaranteed to be the ratio of actual brightness.</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + * + * @see CaptureRequest#FLASH_MODE + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_TORCH_STRENGTH_MAX_LEVEL = + new Key<Integer>("android.flash.torchStrengthMaxLevel", int.class); + + /** + * <p>Default flash brightness level for manual flash control in TORCH mode</p> + * <p>If flash unit is available this will be greater than or equal to 1 and less + * or equal to android.flash.info.torchStrengthMaxLevel. + * Note for the devices that do not support the manual flash strength control feature, + * this level will always be equal to 1.</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_TORCH_STRENGTH_DEFAULT_LEVEL = + new Key<Integer>("android.flash.torchStrengthDefaultLevel", int.class); + /** * <p>List of hot pixel correction modes for {@link CaptureRequest#HOT_PIXEL_MODE android.hotPixel.mode} that are supported by this * camera device.</p> diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index dd323841403009deb48d39d63cc17405763b9776..9421359d8fc76488e16c650b627d8d80429a8fec 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -2653,6 +2653,46 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>> public static final Key<Integer> FLASH_MODE = new Key<Integer>("android.flash.mode", int.class); + /** + * <p>Flash strength level to be used when manual flash control is active.</p> + * <p>Flash strength level to use in capture mode i.e. when the applications control + * flash with either SINGLE or TORCH mode.</p> + * <p>Use android.flash.info.singleStrengthMaxLevel and + * android.flash.info.torchStrengthMaxLevel to check whether the device supports + * flash strength control or not. + * If the values of android.flash.info.singleStrengthMaxLevel and + * android.flash.info.torchStrengthMaxLevel are greater than 1, + * then the device supports manual flash strength control.</p> + * <p>If the {@link CaptureRequest#FLASH_MODE android.flash.mode} <code>==</code> TORCH the value must be >= 1 + * and <= android.flash.info.torchStrengthMaxLevel. + * If the application doesn't set the key and + * android.flash.info.torchStrengthMaxLevel > 1, + * then the flash will be fired at the default level set by HAL in + * android.flash.info.torchStrengthDefaultLevel. + * If the {@link CaptureRequest#FLASH_MODE android.flash.mode} <code>==</code> SINGLE, then the value must be >= 1 + * and <= android.flash.info.singleStrengthMaxLevel. + * If the application does not set this key and + * android.flash.info.singleStrengthMaxLevel > 1, + * then the flash will be fired at the default level set by HAL + * in android.flash.info.singleStrengthDefaultLevel. + * If {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is set to any of ON_AUTO_FLASH, ON_ALWAYS_FLASH, + * ON_AUTO_FLASH_REDEYE, ON_EXTERNAL_FLASH values, then the strengthLevel will be ignored.</p> + * <p><b>Range of valid values:</b><br> + * <code>[1-android.flash.info.torchStrengthMaxLevel]</code> when the {@link CaptureRequest#FLASH_MODE android.flash.mode} is + * set to TORCH; + * <code>[1-android.flash.info.singleStrengthMaxLevel]</code> when the {@link CaptureRequest#FLASH_MODE android.flash.mode} is + * set to SINGLE</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + * + * @see CaptureRequest#CONTROL_AE_MODE + * @see CaptureRequest#FLASH_MODE + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_STRENGTH_LEVEL = + new Key<Integer>("android.flash.strengthLevel", int.class); + /** * <p>Operational mode for hot pixel correction.</p> * <p>Hotpixel correction interpolates out, or otherwise removes, pixels diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index 9a800150ef270add018e26862726fa0f157b911e..4606e5b239004a41fe73f0080f8c8a1bc82c1e6a 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -2939,6 +2939,46 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { public static final Key<Integer> FLASH_STATE = new Key<Integer>("android.flash.state", int.class); + /** + * <p>Flash strength level to be used when manual flash control is active.</p> + * <p>Flash strength level to use in capture mode i.e. when the applications control + * flash with either SINGLE or TORCH mode.</p> + * <p>Use android.flash.info.singleStrengthMaxLevel and + * android.flash.info.torchStrengthMaxLevel to check whether the device supports + * flash strength control or not. + * If the values of android.flash.info.singleStrengthMaxLevel and + * android.flash.info.torchStrengthMaxLevel are greater than 1, + * then the device supports manual flash strength control.</p> + * <p>If the {@link CaptureRequest#FLASH_MODE android.flash.mode} <code>==</code> TORCH the value must be >= 1 + * and <= android.flash.info.torchStrengthMaxLevel. + * If the application doesn't set the key and + * android.flash.info.torchStrengthMaxLevel > 1, + * then the flash will be fired at the default level set by HAL in + * android.flash.info.torchStrengthDefaultLevel. + * If the {@link CaptureRequest#FLASH_MODE android.flash.mode} <code>==</code> SINGLE, then the value must be >= 1 + * and <= android.flash.info.singleStrengthMaxLevel. + * If the application does not set this key and + * android.flash.info.singleStrengthMaxLevel > 1, + * then the flash will be fired at the default level set by HAL + * in android.flash.info.singleStrengthDefaultLevel. + * If {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is set to any of ON_AUTO_FLASH, ON_ALWAYS_FLASH, + * ON_AUTO_FLASH_REDEYE, ON_EXTERNAL_FLASH values, then the strengthLevel will be ignored.</p> + * <p><b>Range of valid values:</b><br> + * <code>[1-android.flash.info.torchStrengthMaxLevel]</code> when the {@link CaptureRequest#FLASH_MODE android.flash.mode} is + * set to TORCH; + * <code>[1-android.flash.info.singleStrengthMaxLevel]</code> when the {@link CaptureRequest#FLASH_MODE android.flash.mode} is + * set to SINGLE</p> + * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> + * + * @see CaptureRequest#CONTROL_AE_MODE + * @see CaptureRequest#FLASH_MODE + */ + @PublicKey + @NonNull + @FlaggedApi(Flags.FLAG_CAMERA_MANUAL_FLASH_STRENGTH_CONTROL) + public static final Key<Integer> FLASH_STRENGTH_LEVEL = + new Key<Integer>("android.flash.strengthLevel", int.class); + /** * <p>Operational mode for hot pixel correction.</p> * <p>Hotpixel correction interpolates out, or otherwise removes, pixels diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index b1aa7deeb4ef03be143b211925c0af915c6edc11..4700720736b5ac160b2be749429bc6b3d95e4408 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -32,6 +32,7 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.RefreshRateRange; import android.view.SurfaceControl.Transaction; import android.window.DisplayWindowPolicyController; +import android.window.ScreenCapture; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -110,6 +111,25 @@ public abstract class DisplayManagerInternal { */ public abstract void unregisterDisplayGroupListener(DisplayGroupListener listener); + /** + * Screenshot for internal system-only use such as rotation, etc. This method includes + * secure layers and the result should never be exposed to non-system applications. + * This method does not apply any rotation and provides the output in natural orientation. + * + * @param displayId The display id to take the screenshot of. + * @return The buffer or null if we have failed. + */ + public abstract ScreenCapture.ScreenshotHardwareBuffer systemScreenshot(int displayId); + + /** + * General screenshot functionality that excludes secure layers and applies appropriate + * rotation that the device is currently in. + * + * @param displayId The display id to take the screenshot of. + * @return The buffer or null if we have failed. + */ + public abstract ScreenCapture.ScreenshotHardwareBuffer userScreenshot(int displayId); + /** * Returns information about the specified logical display. * diff --git a/core/java/android/os/TEST_MAPPING b/core/java/android/os/TEST_MAPPING index 60622f18fe3b9b3ba9984c42b9d398d39f080371..ad3abd9b531c181d2518db94f55db4c320fb43a0 100644 --- a/core/java/android/os/TEST_MAPPING +++ b/core/java/android/os/TEST_MAPPING @@ -7,7 +7,7 @@ ], "name": "FrameworksVibratorCoreTests", "options": [ - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"} @@ -20,7 +20,7 @@ ], "name": "FrameworksVibratorServicesTests", "options": [ - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"} @@ -33,7 +33,7 @@ ], "name": "CtsVibratorTestCases", "options": [ - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"} diff --git a/core/java/android/os/flags.aconfig b/core/java/android/os/flags.aconfig index febe6f719baf01743a1b309f4d5f76ed37df47e5..a95e66d9eb04c2182537da6628c3df4a45ce5059 100644 --- a/core/java/android/os/flags.aconfig +++ b/core/java/android/os/flags.aconfig @@ -16,7 +16,7 @@ flag { flag { name: "allow_private_profile" - namespace: "private_profile" + namespace: "profile_experiences" description: "Guards a new Private Profile type in UserManager - everything from its setup to config to deletion." bug: "299069460" } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index c19c20c8429d631b47851825fa08d77c7d04b1c0..e829ca28892568e8b51308cadd5d01377b8b4aa2 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -687,7 +687,8 @@ public final class Settings { "com.android.settings.MONITORING_CERT_INFO"; /** - * Activity Action: Show settings to allow configuration of privacy options. + * Activity Action: Show settings to allow configuration of privacy options, i.e. permission + * manager, privacy dashboard, privacy controls and more. * <p> * In some cases, a matching Activity may not exist, so ensure you * safeguard against this. @@ -700,6 +701,21 @@ public final class Settings { public static final String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS"; + /** + * Activity Action: Show privacy controls sub-page, i.e. privacy (camera/mic) toggles and more. + * <p> + * In some cases, a matching Activity may not exist, so ensure you + * safeguard against this. + * <p> + * Input: Nothing. + * <p> + * Output: Nothing. + * @hide + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_PRIVACY_CONTROLS = + "android.settings.PRIVACY_CONTROLS"; + /** * Activity Action: Show settings to allow configuration of VPN. * <p> diff --git a/core/java/android/security/FileIntegrityManager.java b/core/java/android/security/FileIntegrityManager.java index d6f3bf334456aa7c4e63737fc443e4f651e170da..2dbb5da9a258e50cb64b78d4369c5361fff9db75 100644 --- a/core/java/android/security/FileIntegrityManager.java +++ b/core/java/android/security/FileIntegrityManager.java @@ -49,9 +49,18 @@ public final class FileIntegrityManager { } /** - * Returns true if APK Verity is supported on the device. When supported, an APK can be - * installed with a fs-verity signature (if verified with trusted App Source Certificate) for - * continuous on-access verification. + * Returns whether fs-verity is supported on the device. fs-verity provides on-access + * verification, although the app APIs are only made available to apps in a later SDK version. + * Only when this method returns true, the other fs-verity APIs in the same class can succeed. + * + * <p>The app may not need this method and just call the other APIs (i.e. {@link + * #setupFsVerity(File)} and {@link #getFsVerityDigest(File)}) normally and handle any failure. + * If some app feature really depends on fs-verity (e.g. protecting integrity of a large file + * download), an early check of support status may avoid any cost if it is to fail late. + * + * <p>Note: for historical reasons this is named {@code isApkVeritySupported()} instead of + * {@code isFsVeritySupported()}. It has also been available since API level 30, predating the + * other fs-verity APIs. */ public boolean isApkVeritySupported() { try { diff --git a/core/java/android/service/notification/TEST_MAPPING b/core/java/android/service/notification/TEST_MAPPING index 59b2bc1e4f73673a7720d7d8bfb3a08d945ce556..7b8d52f51cee7699a0ddb755fc0bb4f1113c1eae 100644 --- a/core/java/android/service/notification/TEST_MAPPING +++ b/core/java/android/service/notification/TEST_MAPPING @@ -12,9 +12,6 @@ { "exclude-annotation": "org.junit.Ignore" }, - { - "exclude-annotation": "android.platform.test.annotations.LargeTest" - }, { "exclude-annotation": "androidx.test.filters.LargeTest" } @@ -32,9 +29,6 @@ { "exclude-annotation": "org.junit.Ignore" }, - { - "exclude-annotation": "android.platform.test.annotations.LargeTest" - }, { "exclude-annotation": "androidx.test.filters.LargeTest" } diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 447c3bcdc186b2946b8e7094692a658473bad2ea..4e3deb61761ec697c1aa6b8c1b67a4e22a5e5e12 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -2495,8 +2495,14 @@ public class TextUtils { // Even if the argument name is `ellipsizeDip`, the unit of this argument is pixels. final int charCount = (int) ((ellipsizeDip + 0.5f) / assumedCharWidthInPx); - return TextUtils.trimToSize(gettingCleaned.toString(), charCount) - + getEllipsisString(TruncateAt.END); + + final String text = gettingCleaned.toString(); + if (TextUtils.isEmpty(text) || text.length() <= charCount) { + return text; + } else { + return TextUtils.trimToSize(text, charCount) + + getEllipsisString(TruncateAt.END); + } } else { // Truncate final TextPaint paint = new TextPaint(); diff --git a/core/java/android/view/TEST_MAPPING b/core/java/android/view/TEST_MAPPING index 1e39716988a9b0e45c208f1c2209c2e93adeed99..db3590814e088b302a4afdd2ff7e55ff08c3761a 100644 --- a/core/java/android/view/TEST_MAPPING +++ b/core/java/android/view/TEST_MAPPING @@ -10,7 +10,7 @@ "include-annotation": "android.platform.test.annotations.Presubmit" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.FlakyTest" diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index ff6165b8a3ba6e11e542dab3115e09c67b1f1b39..0ba5d06b64dcfd8650c5710de4a8765116a9a932 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1151,14 +1151,10 @@ public final class ViewRootImpl implements ViewParent, } private boolean isInTouchMode() { - IWindowManager windowManager = WindowManagerGlobal.getWindowManagerService(); - if (windowManager != null) { - try { - return windowManager.isInTouchMode(getDisplayId()); - } catch (RemoteException e) { - } + if (mAttachInfo == null) { + return mContext.getResources().getBoolean(R.bool.config_defaultInTouchMode); } - return false; + return mAttachInfo.mInTouchMode; } /** diff --git a/core/java/android/window/DisplayWindowPolicyController.java b/core/java/android/window/DisplayWindowPolicyController.java index 2747233a4bf17263ef5398ed346a330f5e7433ad..8d71a8e998bd45a5aaec3bc46d693924e994c04d 100644 --- a/core/java/android/window/DisplayWindowPolicyController.java +++ b/core/java/android/window/DisplayWindowPolicyController.java @@ -108,6 +108,12 @@ public abstract class DisplayWindowPolicyController { } } + /** + * @return the custom home component specified for the relevant display, if any. + */ + @Nullable + public abstract ComponentName getCustomHomeComponent(); + /** * Returns {@code true} if all of the given activities can be launched on this virtual display * in the configuration defined by the rest of the arguments. diff --git a/core/java/com/android/internal/policy/AttributeCache.java b/core/java/com/android/internal/policy/AttributeCache.java index 1bdad25d25bb3a89cc3fa799cf859714b4d54339..970f5111c2eafa4792445034a3eb9d882aa0d94c 100644 --- a/core/java/com/android/internal/policy/AttributeCache.java +++ b/core/java/com/android/internal/policy/AttributeCache.java @@ -16,12 +16,18 @@ package com.android.internal.policy; +import android.annotation.RequiresPermission; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; +import android.net.Uri; +import android.os.Handler; import android.os.UserHandle; import android.util.ArrayMap; import android.util.LruCache; @@ -46,6 +52,8 @@ public final class AttributeCache { @GuardedBy("this") private final Configuration mConfiguration = new Configuration(); + private PackageMonitor mPackageMonitor; + public final static class Package { public final Context context; private final SparseArray<ArrayMap<int[], Entry>> mMap = new SparseArray<>(); @@ -77,6 +85,34 @@ public final class AttributeCache { } } + /** + * Start monitor package change, so the resources can be loaded correctly. + */ + void monitorPackageRemove(Handler handler) { + if (mPackageMonitor == null) { + mPackageMonitor = new PackageMonitor(mContext, handler); + } + } + + static class PackageMonitor extends BroadcastReceiver { + @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + PackageMonitor(Context context, Handler handler) { + final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED); + filter.addDataScheme(IntentFilter.SCHEME_PACKAGE); + context.registerReceiverAsUser(this, UserHandle.ALL, filter, + null /* broadcastPermission */, handler); + } + + @Override + public void onReceive(Context context, Intent intent) { + final Uri packageUri = intent.getData(); + if (packageUri != null) { + final String packageName = packageUri.getEncodedSchemeSpecificPart(); + AttributeCache.instance().removePackage(packageName); + } + } + } + public static AttributeCache instance() { return sInstance; } diff --git a/core/java/com/android/internal/policy/TransitionAnimation.java b/core/java/com/android/internal/policy/TransitionAnimation.java index 8f4df806296e2431dfd632df36368536a16f8917..40a437f300f3e227732d6ff2eecf84ad692ad45a 100644 --- a/core/java/com/android/internal/policy/TransitionAnimation.java +++ b/core/java/com/android/internal/policy/TransitionAnimation.java @@ -48,6 +48,7 @@ import android.graphics.drawable.Drawable; import android.hardware.HardwareBuffer; import android.media.Image; import android.media.ImageReader; +import android.os.Handler; import android.os.SystemProperties; import android.util.Slog; import android.view.InflateException; @@ -1399,4 +1400,14 @@ public class TransitionAnimation { // Approximation of WCAG 2.0 relative luminance. return ((r * 8) + (g * 22) + (b * 2)) >> 5; } + + /** + * For non-system server process, it must call this method to initialize the AttributeCache and + * start monitor package change, so the resources can be loaded correctly. + */ + public static void initAttributeCache(Context context, Handler handler) { + AttributeCache.init(context); + AttributeCache.instance().monitorPackageRemove(handler); + } + } diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index b1caec2539490a5d3952c434188cf09f2672a7d2..cd951cbdde1c7acb26dcbbeea1e6e44ed23a6d2e 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Hierdie bevoorregte of stelselprogram kan enige tyd met \'n stelselkamera foto\'s neem en video\'s opneem. Vereis dat die program ook die android.permission.CAMERA-toestemming het"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Laat \'n program of diens toe om terugbeloproepe te ontvang oor kameratoestelle wat oopgemaak of toegemaak word."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Hierdie program kan terugbeloproepe ontvang wanneer enige kameratoestel oopgemaak (deur watter program) of toegemaak word."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Laat ’n program of diens toe om toegang tot die kamera te verkry as ’n stelselgebruiker sonder koppelvlak."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Hierdie app het toegang tot die kamera as ’n stelselgebruiker sonder koppelvlak."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"beheer vibrasie"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Laat die program toe om die vibrator te beheer."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Stel die program in staat om toegang tot die vibreerderstand te kry."</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 8ffdba3e3f92189b7f1a4e6ebdcf2e136f10815d..42ba598502d5eb443cb3943082707f19f651da9d 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"á‹áˆ… áˆá‹© áˆá‰ƒá‹µ ያለዠየሥáˆá‹“ት መተáŒá‰ ሪያ በማንኛá‹áˆ ጊዜ የሥáˆá‹“ት ካሜራን በመጠቀሠሥዕሎችን ማንሣት እና ቪዲዮ መቅረጽ á‹á‰½áˆ‹áˆá¢ የandroid.permission.CAMERA áˆá‰ƒá‹± በመተáŒá‰ ሪያá‹áˆ áŒáˆáˆ እንዲያዠያስáˆáˆáŒˆá‹‹áˆá¢"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"አንድ መተáŒá‰ ሪያ ወá‹áˆ አገáˆáŒáˆŽá‰µ እየተከáˆá‰± ወá‹áˆ እየተዘጉ ስላሉ የካሜራ መሣሪያዎች መáˆáˆ¶ ጥሪዎችን እንዲቀበሠá‹áቀዱá¢"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ማንኛá‹áˆ የካሜራ መሣሪያ እየተከáˆá‰° (በáˆáŠ• መተáŒá‰ ሪያ) ወá‹áˆ እየተዘጋ ባለበት ጊዜ á‹áˆ… መተáŒá‰ ሪያ መáˆáˆ¶ ጥሪዎችን መቀበሠá‹á‰½áˆ‹áˆá¢"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"መተáŒá‰ ሪያ ወá‹áˆ አገáˆáŒáˆŽá‰µ ካሜራን እንደ የበá‹áŠáŒˆá…-አáˆá‰£ ሥáˆá‹“ት ተጠቃሚ እንዲደáˆáˆµ á‹áቀዱá¢"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"á‹áˆ… መተáŒá‰ ሪያ ካሜራን እንደ የበá‹áŠáŒˆá…-አáˆá‰£ ሥáˆá‹“ት ተጠቃሚ መድረስ á‹á‰½áˆ‹áˆá¢"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"áŠá‹›áˆª ተቆጣጠáˆ"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"áŠá‹›áˆªá‹áŠ• ለመቆጣጠሠለመተáŒá‰ ሪያዠá‹áˆá‰…ዳሉá¢"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"መተáŒá‰ ሪያዠየንá‹áˆ¨á‰µ áˆáŠ”á‰³á‹áŠ• እንዲደáˆáˆµ ያስችለዋáˆá¢"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index ff1ecdca11da9c549469c033a90c2cdeb99986ba..dd9710764af8b6a153d51cd9e73ca33cc0449b52 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -505,6 +505,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"â€Ø¥Ù†Ù‘ تطبيق النظام هذا، أو التطبيق المزوّد بأذونات مميّزة، يمكنه التقاط صور وتسجيل Ùيديوهات باستخدام كاميرا النظام ÙÙŠ أي وقت. ويجب أن ÙŠØØµÙ„ التطبيق أيضًا على الإذن android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ÙŠØ³Ù…Ø Ø§Ù„Ø¥Ø°Ù† لتطبيق أو خدمة بتلقّي استدعاءات عما إذا كانت أجهزة الكاميرات Ù…ÙØªÙˆØØ© أو مغلقة."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"يمكن أن يتلقّى هذا التطبيق استدعاءات عندما تكون هناك كاميرا Ù…ÙØªÙˆØØ© (بواسطة هذا التطبيق) أو مغلقة."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"التØÙƒÙ… ÙÙŠ الاهتزاز"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ù„Ù„Ø³Ù…Ø§Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ بالتØÙƒÙ… ÙÙŠ الهزّاز."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ÙŠØ³Ù…Ø Ù‡Ø°Ø§ الإذن للتطبيق بالوصول إلى ØØ§Ù„Ø© الهزّاز."</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 0ca9ea235be888eefa997fa12760483ba2accb57..ba3e7567f1034533912ee7c5e493eb6b1e6af7db 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"à¦à¦‡ বিশেষাধিকাৰ পà§à§°à¦¾à¦ªà§à¦¤ অথবা ছিষà§à¦Ÿà§‡à¦® à¦à¦ªà§â€Œà¦Ÿà§‹à§±à§‡ à¦à¦Ÿà¦¾ ছিষà§à¦Ÿà§‡à¦® কেমেৰা বà§à¦¯à§±à¦¹à¦¾à§° কৰি যিকোনো সময়তে ফট’ উঠাব পাৰে আৰৠà¦à¦¿à¦¡à¦¿à¦…’ ৰেকৰà§à¦¡ কৰিব পাৰে। লগতে à¦à¦ªà§â€Œà¦Ÿà§‹à§°à§‹ android.permission.CAMERAà§° অনà§à¦®à¦¤à¦¿ থকাটো পà§à§°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"কোনো à¦à¦ªà§à¦²à¦¿à¦•েশà§à¦¬à¦¨ অথবা সেৱাক কেমেৰা ডিà¦à¦¾à¦‡à¦šà¦¸à¦®à§‚হ খোলা অথবা বনà§à¦§ কৰাৰ বিষয়ে কলবেকসমূহ গà§à§°à¦¹à¦£ কৰিবলৈ অনà§à¦®à¦¤à¦¿ দিয়ক।"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"যিকোনো কেমেৰা ডিà¦à¦¾à¦‡à¦š খà§à¦²à¦¿ থকা অথবা বনà§à¦§ কৰি থকাৰ সময়ত (কোনো à¦à¦ªà§à¦²à¦¿à¦•েশà§à¦¬à¦¨à§° দà§à¦¬à¦¾à§°à¦¾) à¦à¦‡ à¦à¦ªà§â€Œà¦Ÿà§‹à§±à§‡ কলবেক গà§à§°à¦¹à¦£ কৰিব পাৰে।"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"কোনো à¦à¦ªà§à¦²à¦¿à¦•েশà§à¦¬à¦¨ বা সেৱাক পৰিধীয় ডিà¦à¦¾à¦‡à¦šà¦¹à§€à¦¨ ছিষà§à¦Ÿà§‡à¦® বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰী হিচাপে কেমেৰা à¦à¦•à§à¦¸à§‡à¦› কৰা অনà§à¦®à¦¤à¦¿ দিয়ক।"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"à¦à¦‡ à¦à¦ªà§â€Œà¦Ÿà§‹à§±à§‡ পৰিধীয় ডিà¦à¦¾à¦‡à¦šà¦¹à§€à¦¨ ছিষà§à¦Ÿà§‡à¦® বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰী হিচাপে কেমেৰা à¦à¦•à§à¦¸à§‡à¦› কৰিব পাৰে।"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"কমà§à¦ªà¦¨ নিয়নà§à¦¤à§à§°à¦£ কৰক"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"à¦à¦¾à¦‡à¦¬à§à§°à§‡à¦Ÿà§° নিয়নà§à¦¤à§à§°à¦£ কৰিবলৈ à¦à¦ªà§â€Œà¦Ÿà§‹à¦• অনà§à¦®à¦¤à¦¿ দিয়ে।"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"à¦à¦ªà§â€Œà¦Ÿà§‹à¦• কমà§à¦ªà¦¨ সà§à¦¥à¦¿à¦¤à¦¿à¦Ÿà§‹ à¦à¦•à§à¦¸à§‡à¦› কৰিবলৈ অনà§à¦®à¦¤à¦¿ দিয়ে।"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 0004ba87d9fdc1ff4b079b80898743685e499491..208de1d51e7d5fdf4a92fe77844c726fbba11e0e 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Bu icazÉ™li vÉ™ ya sistem tÉ™tbiqi istÉ™nilÉ™n vaxt sistem kamerasından istifadÉ™ edÉ™rÉ™k ÅŸÉ™kil vÉ™ videolar çəkÉ™ bilÉ™r. android.permission.CAMERA icazÉ™sinin dÉ™ tÉ™tbiq tÉ™rÉ™findÉ™n saxlanılmasını tÉ™lÉ™b edir"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"TÉ™tbiqÉ™ vÉ™ ya xidmÉ™tÉ™ kamera cihazlarının açılması vÉ™ ya baÄŸlanması haqqında geri zÉ™nglÉ™r qÉ™bul etmÉ™yÉ™ icazÉ™ verin."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Hansısa kamera cihazı açıldıqda vÉ™ ya baÄŸlandıqda (hansısa tÉ™tbiq tÉ™rÉ™findÉ™n) bu tÉ™tbiq geri çağırışlar qÉ™bul edÉ™ bilÉ™r."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"vibrasiyaya nÉ™zarÉ™t edir"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"TÉ™tbiqÉ™ vibratoru idarÉ™ etmÉ™ icazÉ™si verir."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"TÉ™tbiqÉ™ vibrasiya vÉ™ziyyÉ™tinÉ™ daxil olmaq imkanı verir."</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 74ba52da35182a83b6b60bf5c3da8fbd35d9d9ff..3fd8dcb2927a259d97caa8c9acb2961d682b8c3a 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ova privilegovana sistemska aplikacija može da snima slike i video snimke pomoću kamere sistema u bilo kom trenutku. Aplikacija treba da ima i dozvolu android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Dozvolite aplikaciji ili usluzi da dobija povratne pozive o otvaranju ili zatvaranju ureÄ‘aja sa kamerom."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ova aplikacija može da dobija povratne pozive kada se bilo koji ureÄ‘aj sa kamerom otvara ili zatvara (pomoću neke aplikacije)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Dozvolite aplikaciji ili usluzi da pristupa kameri kao korisnik sistema bez grafiÄkog korisniÄkog interfejsa."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ova aplikacija može da pristupa kameri kao korisnik sistema bez grafiÄkog korisniÄkog interfejsa."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrola vibracije"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Dozvoljava aplikaciji da kontroliÅ¡e vibraciju."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dozvoljava aplikaciji da pristupa stanju vibriranja."</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 3a79090ebf1c6e6123ab8ad96b463d4210a29644..5bf8a3b70a3efbaa4067894b4f26fcc3812e3629 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -503,6 +503,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ГÑта прыÑрытÑÑ‚Ð½Ð°Ñ Ñ†Ñ– ÑÑ–ÑÑ‚ÑÐ¼Ð½Ð°Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ð° можа здымаць фота Ñ– запіÑваць відÑа з дапамогай ÑÑ–ÑÑ‚Ñмнай камеры. Праграме такÑама патрÑбны дазвол android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Дазволіць праграме ці ÑÑрвіÑу атрымліваць Ð·Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ñ‹Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑ– наконт Ð°Ð´ÐºÑ€Ñ‹Ñ†Ñ†Ñ Ñ†Ñ– Ð·Ð°ÐºÑ€Ñ‹Ñ†Ñ†Ñ Ð¿Ñ€Ñ‹Ð»Ð°Ð´ камеры."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ГÑта праграма можа атрымліваць Ð·Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ñ‹Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑ–, калі адкрываецца (праграмай) або закрываецца прылада камеры."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"кіраванне вібрацыÑй"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ДазвалÑе прыкладаннÑм кіраваць вібрацыÑй."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ДазвалÑе праграме атрымліваць доÑтуп да вібраÑігналу."</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 97345fcf4b3dc3a235a22d4a9c6174694daf32a7..9dd971c14b81784d1208af974f1f1c8da422dc4f 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Това привилегировано или ÑиÑтемно приложение може по вÑÑко време да прави Ñнимки и да запиÑва видео поÑредÑтвом ÑиÑтемна камера. Ðеобходимо е Ñъщо на приложението да бъде дадено разрешението android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Разрешаване на приложение или уÑлуга да получават обратни Ð¿Ð¾Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° отварÑнето или затварÑнето на Ñнимачни уÑтройÑтва."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Това приложение може да получава обратни повикваниÑ, когато Ñнимачно уÑтройÑтво бъде отворено (от кое приложение) или затворено."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Разрешаване на приложение или уÑлуга да оÑъщеÑтвÑват доÑтъп до камерата като потребител на ÑиÑтема без графичен потребителÑки интерфейÑ."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Това приложение може да оÑъщеÑтвÑва доÑтъп до камерата като потребител на ÑиÑтема без графичен потребителÑки интерфейÑ."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"контролиране на вибрирането"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Разрешава на приложението да контролира уÑтройÑтвото за вибрациÑ."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дава възможноÑÑ‚ на приложението да оÑъщеÑтвÑва доÑтъп до ÑÑŠÑтоÑнието на вибриране."</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index f6f5b0eb38ad450d7b9674c0e0113d2df3e55538..f428b86dc5a8c3fb86ab53cb45e206858fe68901 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"à¦à¦‡ পà§à¦°à¦¿à¦à¦¿à¦²à§‡à¦œ বা সিসà§à¦Ÿà§‡à¦® অà§à¦¯à¦¾à¦ª যেকোনও সময় সিসà§à¦Ÿà§‡à¦® কà§à¦¯à¦¾à¦®à§‡à¦°à¦¾ বà§à¦¯à¦¬à¦¹à¦¾à¦° করে ছবি তà§à¦²à¦¤à§‡ ও à¦à¦¿à¦¡à¦¿à¦“ রেকরà§à¦¡ করতে পারে। à¦à¦‡ অà§à¦¯à¦¾à¦ªà¦•ে android.permission.CAMERA অনà§à¦®à¦¤à¦¿ দিতে হবে"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"কোনও অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশন বা পরিষেবাকে কà§à¦¯à¦¾à¦®à§‡à¦°à¦¾ ডিà¦à¦¾à¦‡à¦¸à¦—à§à¦²à¦¿ খোলা বা বনà§à¦§ হওয়া সমà§à¦ªà¦°à§à¦•ে কলবà§à¦¯à¦¾à¦•গà§à¦²à¦¿ গà§à¦°à¦¹à¦£ করার অনà§à¦®à¦¤à¦¿ দিন।"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"কোনও কà§à¦¯à¦¾à¦®à§‡à¦°à¦¾ ডিà¦à¦¾à¦‡à¦¸ খোলা (অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশনের সাহাযà§à¦¯à§‡) বা বনà§à¦§ করা হলে à¦à¦‡ অà§à¦¯à¦¾à¦ª কলবà§à¦¯à¦¾à¦• গà§à¦°à¦¹à¦£ করতে পারে।"</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"à¦à¦¾à¦‡à¦¬à§à¦°à§‡à¦¶à¦¨ নিয়নà§à¦¤à§à¦°à¦£ করà§à¦¨"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশানকে কমà§à¦ªà¦• নিয়নà§à¦¤à§à¦°à¦£ করতে দেয়৷"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"à¦à¦¾à¦‡à¦¬à§à¦°à§‡à¦Ÿ করার সà§à¦¥à¦¿à¦¤à¦¿ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করার অনà§à¦®à¦¤à¦¿ দিন।"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 3fd0637d27f9abe358b0aef62170ac025816ab97..e2ace072d6e05f066469a4180a38562f9bd8902c 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ova povlaÅ¡tena ili sistemska aplikacija u svakom trenutku može snimati fotografije i videozapise pomoću kamere sistema. Aplikacija takoÄ‘er mora imati odobrenje android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Dozvoliti aplikaciji ili usluzi da prima povratne pozive o otvaranju ili zatvaranju kamera."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ova aplikacija može primati povratne pozive kada se otvara ili zatvara bilo koji ureÄ‘aj s kamerom (putem neke aplikacije)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Dopustite aplikaciji ili usluzi da pristupi kameri kao korisnik sustava bez grafiÄkog korisniÄkog suÄelja."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ova aplikacija može pristupiti kameri kao korisnik sustava bez grafiÄkog korisniÄkog suÄelja."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrola vibracije"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Dozvoljava aplikaciji upravljanje vibracijom."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dozvoljava aplikaciji pristup stanju vibracije."</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 010e22ce781d0c1ab0d66cda5b257d85ade5f1b1..be95847849ba94b4f8b38825ba9c025faaec602f 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Aquesta aplicació del sistema amb privilegis pot fer fotos i gravar vÃdeos amb una cà mera del sistema en qualsevol moment. L\'aplicació també ha de tenir el permÃs android.permission.CAMERA per accedir-hi."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permet que una aplicació o un servei pugui rebre crides de retorn sobre els dispositius de cà mera que s\'obren o es tanquen."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Aquesta aplicació pot rebre crides de retorn quan s\'obre o es tanca un dispositiu de cà mera mitjançant l\'aplicació en qüestió."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permetre que una aplicació o un servei accedeixi a la cà mera com a usuari del sistema sense interfÃcie grà fica."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Aquesta aplicació pot accedir a la cà mera com a usuari del sistema sense interfÃcie grà fica."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibració"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet que l\'aplicació controli el vibrador."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet que l\'aplicació accedeixi a l\'estat de vibració."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 89d25015d4db4d5199a0e7789aa5cb7ff0f48254..34fe496eecef51278b294cf48dccb82a197417ed 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -503,6 +503,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Tato privilegovaná nebo systémová aplikace může pomocà fotoaparátu kdykoli poÅ™Ãdit snÃmek nebo nahrát video. Aplikace musà zároveň mÃt oprávnÄ›nà android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Povolte aplikaci nebo službÄ› pÅ™ijÃmat zpÄ›tná volánà o otevÅ™enà nebo zavÅ™enà zaÅ™Ãzenà s fotoaparátem."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Tato aplikace může pÅ™ijÃmat zpÄ›tná volánà pÅ™i otevÃránà nebo zavÃránà libovolného fotoaparátu (s informacemi o tom, která aplikace tuto akci provádÃ)."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"ovládánà vibracÃ"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikaci ovládat vibrace."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Umožňuje aplikaci pÅ™Ãstup ke stavu vibracÃ."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index e816391f44b4be8c18f1134b032c564220e7dca8..97f850813af64e0805ad3462544785c30148ca0a 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Denne privilegerede app eller systemapp kan til enhver tid tage billeder og optage video med et systemkamera. Appen skal ogsÃ¥ have tilladelsen android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Tillad, at en app eller tjeneste modtager tilbagekald om kameraenheder, der Ã¥bnes eller lukkes."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Denne app kan modtage tilbagekald, nÃ¥r en kameraenhed Ã¥bnes (via appen) eller lukkes."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"administrere vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Tillader, at appen kan administrere vibratoren."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Tillader, at appen bruger vibration."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 3f960f70a800fb9b7540d1c4a8ee3bf568089ee7..33195a5293d47e43373d3d5db33daabb01a6e8d6 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Diese privilegierte App oder System-App kann jederzeit mit einer Systemkamera Bilder und Videos aufnehmen. Die App benötigt auch die Berechtigung \"android.permission.CAMERA\"."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Einer App oder einem Dienst den Empfang von Callbacks erlauben, wenn eine Kamera geöffnet oder geschlossen wird."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Diese App kann Callbacks empfangen, wenn eine der Kameras des Geräts von einer Anwendung geöffnet oder geschlossen wird."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"Vibrationsalarm steuern"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ermöglicht der App, den Vibrationsalarm zu steuern"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ermöglicht der App, auf den Vibrationsstatus zuzugreifen."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 1d3471c0db950a88f7707211f01b0d9a0270b973..f38116aff0167ce14da26d62a535b119ef39384f 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -74,7 +74,7 @@ <string name="serviceNotProvisioned" msgid="8289333510236766193">"Η υπηÏεσία δεν Ï€ÏοβλÎπεται."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Δεν μποÏείτε να αλλάξετε τη ÏÏθμιση του αναγνωÏÎ¹ÏƒÏ„Î¹ÎºÎ¿Ï ÎºÎ±Î»Î¿Ïντος."</string> <string name="auto_data_switch_title" msgid="3286350716870518297">"Έγινε εναλλαγή των δεδομÎνων σε <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> - <string name="auto_data_switch_content" msgid="803557715007110959">"ΜποÏείτε να αλλάξετε αυτήν την επιλογή ανά πάσα στιγμή στις Ρυθμίσεις"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"ΜποÏείτε να αλλάξετε αυτή την επιλογή ανά πάσα στιγμή στις Ρυθμίσεις"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Δεν υπάÏχει υπηÏεσία δεδομÎνων κινητής τηλεφωνίας"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Οι κλήσεις Îκτακτης ανάγκης δεν είναι διαθÎσιμες"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Δεν υπάÏχει φωνητική υπηÏεσία"</string> @@ -253,9 +253,9 @@ <string name="bugreport_title" msgid="8549990811777373050">"ΑναφοÏά σφάλματος"</string> <string name="bugreport_message" msgid="5212529146119624326">"Θα συλλÎξει πληÏοφοÏίες σχετικά με την Ï„ÏÎχουσα κατάσταση της συσκευής σας και θα τις στείλει μÎσω μηνÏματος ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου. Απαιτείται λίγος χÏόνος για τη σÏνταξη της αναφοÏάς σφάλματος και την αποστολή της. Κάντε λίγη υπομονή."</string> <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"ΔιαδÏαστική αναφοÏά"</string> - <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ΧÏησιμοποιήστε αυτήν την επιλογή στις πεÏισσότεÏες πεÏιπτώσεις. Σας επιτÏÎπει να παÏακολουθείτε την Ï€Ïόοδο της αναφοÏάς, να εισάγετε πεÏισσότεÏες λεπτομÎÏειες σχετικά με το Ï€Ïόβλημα που αντιμετωπίζετε και να Ï„Ïαβήξετε στιγμιότυπα οθόνης. ΕνδÎχεται να παÏαλείψει οÏισμÎνες ενότητες που δεν χÏησιμοποιοÏνται συχνά και για τις οποίες απαιτείται μεγάλο χÏονικό διάστημα για τη δημιουÏγία αναφοÏών."</string> + <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ΧÏησιμοποιήστε αυτή την επιλογή στις πεÏισσότεÏες πεÏιπτώσεις. Σας επιτÏÎπει να παÏακολουθείτε την Ï€Ïόοδο της αναφοÏάς, να εισάγετε πεÏισσότεÏες λεπτομÎÏειες σχετικά με το Ï€Ïόβλημα που αντιμετωπίζετε και να Ï„Ïαβήξετε στιγμιότυπα οθόνης. ΕνδÎχεται να παÏαλείψει οÏισμÎνες ενότητες που δεν χÏησιμοποιοÏνται συχνά και για τις οποίες απαιτείται μεγάλο χÏονικό διάστημα για τη δημιουÏγία αναφοÏών."</string> <string name="bugreport_option_full_title" msgid="7681035745950045690">"ΠλήÏης αναφοÏά"</string> - <string name="bugreport_option_full_summary" msgid="1975130009258435885">"ΧÏησιμοποιήστε αυτήν την επιλογή για την ελάχιστη δυνατή παÏÎμβαση συστήματος, όταν η συσκευή σας δεν ανταποκÏίνεται ή παÏουσιάζει μεγάλη καθυστÎÏηση στη λειτουÏγία ή όταν χÏειάζεστε όλες τις ενότητες αναφοÏάς. Δεν σας επιτÏÎπει να Ï€ÏοσθÎσετε πεÏισσότεÏες λεπτομÎÏειες ή να Ï„Ïαβήξετε επιπλÎον στιγμιότυπα οθόνης."</string> + <string name="bugreport_option_full_summary" msgid="1975130009258435885">"ΧÏησιμοποιήστε αυτή την επιλογή για την ελάχιστη δυνατή παÏÎμβαση συστήματος, όταν η συσκευή σας δεν ανταποκÏίνεται ή παÏουσιάζει μεγάλη καθυστÎÏηση στη λειτουÏγία ή όταν χÏειάζεστε όλες τις ενότητες αναφοÏάς. Δεν σας επιτÏÎπει να Ï€ÏοσθÎσετε πεÏισσότεÏες λεπτομÎÏειες ή να Ï„Ïαβήξετε επιπλÎον στιγμιότυπα οθόνης."</string> <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Λήψη στιγμιότυπου οθόνης για αναφοÏά σφάλματος σε # δευτεÏόλεπτο.}other{Λήψη στιγμιότυπου οθόνης για αναφοÏά σφάλματος σε # δευτεÏόλεπτα.}}"</string> <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Έγινε λήψη στιγμιότυπου οθόνης με αναφοÏά σφάλματος"</string> <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Αποτυχία λήψης στιγμιότυπου οθόνης με αναφοÏά σφάλματος"</string> @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Αυτή η Ï€Ïονομιακή εφαÏμογή ή εφαÏμογή συστήματος μποÏεί να Ï„Ïαβάει φωτογÏαφίες και να εγγÏάφει βίντεο, χÏησιμοποιώντας μια κάμεÏα του συστήματος ανά πάσα στιγμή. Απαιτείται, επίσης, η εφαÏμογή να Îχει την άδεια android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ΕπιτÏÎψτε σε μια εφαÏμογή ή μια υπηÏεσία να λαμβάνει επανάκλησεις σχετικά με το άνοιγμα ή το κλείσιμο συσκευών κάμεÏας."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Αυτή η εφαÏμογή μποÏεί να λαμβάνει επανακλήσεις κατά το άνοιγμα οποιασδήποτε συσκευής κάμεÏας (από οποιαδήποτε εφαÏμογή) ή κατά το κλείσιμο."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ΕπιτÏÎψτε σε μια εφαÏμογή ή υπηÏεσία να αποκτήσει Ï€Ïόσβαση στην κάμεÏα ως χÏήστης συστήματος Headless."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Αυτή η εφαÏμογή μποÏεί να αποκτήσει Ï€Ïόσβαση στην κάμεÏα ως χÏήστης συστήματος Headless."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ελÎγχει τη δόνηση"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ΕπιτÏÎπει στην εφαÏμογή τον Îλεγχο της δόνησης."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ΕπιτÏÎπει στην εφαÏμογή να Îχει Ï€Ïόσβαση στην κατάσταση δόνησης."</string> @@ -785,7 +787,7 @@ <string name="permlab_accessDrmCertificates" msgid="6473765454472436597">"Îχει Ï€Ïόσβαση σε πιστοποιητικά DRM"</string> <string name="permdesc_accessDrmCertificates" msgid="6983139753493781941">"ΕπιτÏÎπει σε μια εφαÏμογή να παÏÎχει και να χÏησιμοποιεί πιστοποιητικά DRM. Δεν θα χÏειαστεί ποτΠγια κανονικÎÏ‚ εφαÏμογÎÏ‚."</string> <string name="permlab_handoverStatus" msgid="7620438488137057281">"λήψη κατάστασης μεταφοÏάς Android Beam"</string> - <string name="permdesc_handoverStatus" msgid="3842269451732571070">"ΕπιτÏÎπει σε αυτήν την εφαÏμογή να λαμβάνει πληÏοφοÏίες σχετικά με τις Ï„ÏÎχουσες μεταφοÏÎÏ‚ Android Beam"</string> + <string name="permdesc_handoverStatus" msgid="3842269451732571070">"ΕπιτÏÎπει σε αυτή την εφαÏμογή να λαμβάνει πληÏοφοÏίες σχετικά με τις Ï„ÏÎχουσες μεταφοÏÎÏ‚ Android Beam"</string> <string name="permlab_removeDrmCertificates" msgid="710576248717404416">"καταÏγεί πιστοποιητικά DRM"</string> <string name="permdesc_removeDrmCertificates" msgid="4068445390318355716">"ΕπιτÏÎπει σε μια εφαÏμογή την κατάÏγηση πιστοποιητικών DRM. Δεν χÏειάζεται ποτΠγια κανονικÎÏ‚ εφαÏμογÎÏ‚."</string> <string name="permlab_bindCarrierMessagingService" msgid="3363450860593096967">"δεσμεÏεται σε υπηÏεσία ανταλλαγής μηνυμάτων παÏόχου κινητής τηλεφωνίας"</string> @@ -1209,12 +1211,12 @@ <string name="whichImageCaptureApplication" msgid="2737413019463215284">"Λήψη εικόνας με"</string> <string name="whichImageCaptureApplicationNamed" msgid="8820702441847612202">"Λήψη εικόνας με %1$s"</string> <string name="whichImageCaptureApplicationLabel" msgid="6505433734824988277">"Λήψη εικόνας"</string> - <string name="alwaysUse" msgid="3153558199076112903">"ΧÏήση από Ï€Ïοεπιλογή για αυτήν την ενÎÏγεια."</string> + <string name="alwaysUse" msgid="3153558199076112903">"ΧÏήση από Ï€Ïοεπιλογή για αυτή την ενÎÏγεια."</string> <string name="use_a_different_app" msgid="4987790276170972776">"ΧÏήση άλλης εφαÏμογής"</string> <string name="clearDefaultHintMsg" msgid="1325866337702524936">"ΕκκθάÏιση Ï€Ïοεπιλογής στις Ρυθμίσεις συστήματος > ΕφαÏμογÎÏ‚ > Ληφθείσες."</string> <string name="chooseActivity" msgid="8563390197659779956">"ΕπιλÎξτε μια ενÎÏγεια"</string> <string name="chooseUsbActivity" msgid="2096269989990986612">"ΕπιλÎξτε μια εφαÏμογή για τη συσκευή USB"</string> - <string name="noApplications" msgid="1186909265235544019">"Δεν υπάÏχουν εφαÏμογÎÏ‚, οι οποίες μποÏοÏν να εκτελÎσουν αυτήν την ενÎÏγεια."</string> + <string name="noApplications" msgid="1186909265235544019">"Δεν υπάÏχουν εφαÏμογÎÏ‚, οι οποίες μποÏοÏν να εκτελÎσουν αυτή την ενÎÏγεια."</string> <string name="aerr_application" msgid="4090916809370389109">"Η λειτουÏγία της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> διακόπηκε"</string> <string name="aerr_process" msgid="4268018696970966407">"Η διαδικασία <xliff:g id="PROCESS">%1$s</xliff:g> Îχει διακοπεί"</string> <string name="aerr_application_repeated" msgid="7804378743218496566">"Η εφαÏμογή <xliff:g id="APPLICATION">%1$s</xliff:g> διακόπτεται επανειλημμÎνα"</string> @@ -1328,7 +1330,7 @@ <string name="decline" msgid="6490507610282145874">"ΑπόÏÏιψη"</string> <string name="select_character" msgid="3352797107930786979">"Εισαγωγή χαÏακτήÏα"</string> <string name="sms_control_title" msgid="4748684259903148341">"Αποστολή μηνυμάτων SMS"</string> - <string name="sms_control_message" msgid="6574313876316388239">"Η εφαÏμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> στÎλνει Îναν μεγάλο αÏιθμό μηνυμάτων SMS. ΘÎλετε να επιτÏÎψετε σε αυτήν την εφαÏμογή να συνεχίσει να στÎλνει μηνÏματα;"</string> + <string name="sms_control_message" msgid="6574313876316388239">"Η εφαÏμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> στÎλνει Îναν μεγάλο αÏιθμό μηνυμάτων SMS. ΘÎλετε να επιτÏÎψετε σε αυτή την εφαÏμογή να συνεχίσει να στÎλνει μηνÏματα;"</string> <string name="sms_control_yes" msgid="4858845109269524622">"Αποδοχή"</string> <string name="sms_control_no" msgid="4845717880040355570">"ΆÏνηση"</string> <string name="sms_short_code_confirm_message" msgid="1385416688897538724">"Η εφαÏμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> θÎλει να αποστείλει Îνα μήνυμα στη διεÏθυνση <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string> @@ -1489,8 +1491,8 @@ <string name="permission_request_notification_title" msgid="1810025922441048273">"Απαιτείται άδεια"</string> <string name="permission_request_notification_with_subtitle" msgid="3743417870360129298">"Ζητήθηκε άδεια\nγια τον λογαÏιασμό <xliff:g id="ACCOUNT">%s</xliff:g>."</string> <string name="permission_request_notification_for_app_with_subtitle" msgid="1298704005732851350">"Ζητήθηκε άδεια από την εφαÏμογή <xliff:g id="APP">%1$s</xliff:g>\nγια Ï€Ïόσβαση στον λογαÏιασμό <xliff:g id="ACCOUNT">%2$s</xliff:g>."</string> - <string name="forward_intent_to_owner" msgid="4620359037192871015">"ΧÏησιμοποιείτε αυτήν την εφαÏμογή εκτός του Ï€Ïοφίλ εÏγασίας σας"</string> - <string name="forward_intent_to_work" msgid="3620262405636021151">"ΧÏησιμοποιείτε αυτήν την εφαÏμογή στο Ï€Ïοφίλ εÏγασίας"</string> + <string name="forward_intent_to_owner" msgid="4620359037192871015">"ΧÏησιμοποιείτε αυτή την εφαÏμογή εκτός του Ï€Ïοφίλ εÏγασίας σας"</string> + <string name="forward_intent_to_work" msgid="3620262405636021151">"ΧÏησιμοποιείτε αυτή την εφαÏμογή στο Ï€Ïοφίλ εÏγασίας"</string> <string name="input_method_binding_label" msgid="1166731601721983656">"ΜÎθοδος εισόδου"</string> <string name="sync_binding_label" msgid="469249309424662147">"ΣυγχÏονισμός"</string> <string name="accessibility_binding_label" msgid="1974602776545801715">"Î Ïοσβασιμότητα"</string> @@ -2082,7 +2084,7 @@ <string name="zen_upgrade_notification_title" msgid="8198167698095298717">"Η λειτουÏγία \"Μην ενοχλείτε\" άλλαξε"</string> <string name="zen_upgrade_notification_content" msgid="5228458567180124005">"Πατήστε για να ελÎγξετε το πεÏιεχόμενο που Îχει αποκλειστεί."</string> <string name="review_notification_settings_title" msgid="5102557424459810820">"Έλεγχος Ïυθμίσεων ειδοποιήσεων"</string> - <string name="review_notification_settings_text" msgid="5916244866751849279">"Από το Android 13 και Îπειτα, οι εφαÏμογÎÏ‚ που εγκαθιστάτε θα χÏειάζονται την άδειά σας για την αποστολή ειδοποιήσεων. Πατήστε για να αλλάξετε αυτήν την άδεια για υπάÏχουσες εφαÏμογÎÏ‚."</string> + <string name="review_notification_settings_text" msgid="5916244866751849279">"Από το Android 13 και Îπειτα, οι εφαÏμογÎÏ‚ που εγκαθιστάτε θα χÏειάζονται την άδειά σας για την αποστολή ειδοποιήσεων. Πατήστε για να αλλάξετε αυτή την άδεια για υπάÏχουσες εφαÏμογÎÏ‚."</string> <string name="review_notification_settings_remind_me_action" msgid="1081081018678480907">"ΥπενθÏμιση αÏγότεÏα"</string> <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"ΠαÏάβλεψη"</string> <string name="notification_app_name_system" msgid="3045196791746735601">"ΣÏστημα"</string> @@ -2132,7 +2134,7 @@ <string name="file_count" msgid="3220018595056126969">"{count,plural, =1{{file_name} + # αÏχείο}other{{file_name} + # αÏχεία}}"</string> <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"Δεν υπάÏχουν Ï€Ïοτεινόμενα άτομα για κοινοποίηση"</string> <string name="chooser_all_apps_button_label" msgid="3230427756238666328">"Λίστα εφαÏμογών"</string> - <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"Δεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτήν την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> + <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"Δεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτή την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"ΑÏχική οθόνη"</string> <string name="accessibility_system_action_back_label" msgid="4205361367345537608">"ΕπιστÏοφή"</string> <string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"Î Ïόσφατες εφαÏμογÎÏ‚"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 8c33f168f17d4b70114f25b9b8395c6b2ef24721..bc231f56c602fcec61893dd4fc0de8cd1b4d192a 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Allow an application or service to receive callbacks about camera devices being opened or closed."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"This app can receive callbacks when any camera device is being opened (by what application) or closed."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Allow an application or service to access camera as headless system user."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"This app can access camera as headless system user."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 6dc9ce4ce73578da364a9ea3d78863f999234bab..29f4c78d9395876d82d63b173f9e038116a522f1 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Allow an application or service to receive callbacks about camera devices being opened or closed."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"This app can receive callbacks when any camera device is being opened (by what application) or closed."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Allow an application or service to access camera as Headless System User."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"This app can access camera as Headless System User."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 3daab6cc1cfaa936ecdceacc24f55d325a860b20..5576054309dc05ddb5fe4f2aec8e2bb793703ffa 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Allow an application or service to receive callbacks about camera devices being opened or closed."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"This app can receive callbacks when any camera device is being opened (by what application) or closed."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Allow an application or service to access camera as headless system user."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"This app can access camera as headless system user."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 67ebab14d2979349d4b4bc5c6ef497d44419e494..ea95a513288ee48e4350dd285813054fc7579c6c 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Allow an application or service to receive callbacks about camera devices being opened or closed."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"This app can receive callbacks when any camera device is being opened (by what application) or closed."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Allow an application or service to access camera as headless system user."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"This app can access camera as headless system user."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"control vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index d8b5016449b1735b997986965c90d0a55995177c..c09e6ceabf14490e37c2dd68304f3872be0d4480 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€â€Žâ€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€â€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€ŽThis privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well‎â€â€Žâ€Žâ€â€Ž"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€Žâ€Žâ€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€Žâ€Žâ€Žâ€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€â€â€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€ŽAllow an application or service to receive callbacks about camera devices being opened or closed.‎â€â€Žâ€Žâ€â€Ž"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€â€â€â€Žâ€â€â€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€â€â€Žâ€Žâ€â€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€ŽThis app can receive callbacks when any camera device is being opened (by what application) or closed.‎â€â€Žâ€Žâ€â€Ž"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€ŽAllow an application or service to access camera as Headless System User.‎â€â€Žâ€Žâ€â€Ž"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€Žâ€â€â€â€â€Žâ€â€â€â€â€Žâ€Žâ€ŽThis app can access camera as Headless System User.‎â€â€Žâ€Žâ€â€Ž"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€â€Žâ€â€â€â€Žâ€â€Žâ€Žâ€â€â€Žâ€â€â€â€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€â€â€â€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žcontrol vibration‎â€â€Žâ€Žâ€â€Ž"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€â€â€Žâ€â€Žâ€Žâ€Žâ€â€â€â€Žâ€â€â€Žâ€â€Žâ€Žâ€â€â€Žâ€â€â€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€ŽAllows the app to control the vibrator.‎â€â€Žâ€Žâ€â€Ž"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€Žâ€Žâ€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€â€â€Žâ€â€â€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€ŽAllows the app to access the vibrator state.‎â€â€Žâ€Žâ€â€Ž"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index e61fe1a36211a3787fc72221f5cb4369de4ee281..723f833190e62c16911e2db9350096ac808a430f 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esta app del sistema o con privilegios puede tomar fotografÃas y grabar videos con una cámara del sistema en cualquier momento. Para ello, requiere tener el permiso android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permite que una aplicación o un servicio reciba devoluciones de llamada cuando se abren o cierran dispositivos de cámara."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esta app puede recibir devoluciones de llamada cuando se cierra o se abre cualquier dispositivo de cámara (y qué aplicación lo hace)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permite que una aplicación o servicio acceda a la cámara como un usuario del sistema sin interfaz gráfica"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Esta app puede acceder a la cámara como un usuario del sistema sin interfaz gráfica."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibración"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la vibración."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la app acceda al estado del modo de vibración."</string> @@ -807,11 +809,11 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permite al titular actualizar la app que instaló previamente sin acción del usuario"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"Establecer reglas de contraseña"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"Controlar la longitud y los caracteres permitidos en las contraseñas y los PIN para el bloqueo de pantalla."</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"Supervisa los intentos para desbloquear la pantalla"</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"Supervisar los intentos para desbloquear la pantalla"</string> <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Controla la cantidad de contraseñas incorrectas ingresadas al desbloquear la pantalla y bloquea la tablet o borra todos los datos de la tablet si se ingresaron demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Supervisa la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquea el dispositivo Android TV o borra todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear el sistema de infoentretenimiento, o borrar todos los datos del sistema, si se ingresaron demasiadas contraseñas incorrectas."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Supervisar la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla, y bloquear el dispositivo o borrar todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Supervisa la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla, y bloquea el dispositivo o borra todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear la tablet, o borrar todos los datos del usuario, si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Supervisa la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquea el dispositivo Android TV o borra todos los datos del usuario si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear el sistema de infoentretenimiento, o borrar todos los datos de perfil, si se ingresaron demasiadas contraseñas incorrectas."</string> @@ -1913,7 +1915,7 @@ <string name="stk_cc_ss_to_dial_video" msgid="1324194624384312664">"Se cambió la solicitud SS por una videollamada"</string> <string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"Se cambió la solicitud SS por una solicitud USSD"</string> <string name="stk_cc_ss_to_ss" msgid="132040645206514450">"Se cambió a una nueva solicitud SS"</string> - <string name="notification_phishing_alert_content_description" msgid="494227305355958790">"Alerta de suplantación de identidad (phishing)"</string> + <string name="notification_phishing_alert_content_description" msgid="494227305355958790">"Alerta de phishing"</string> <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Perfil de trabajo"</string> <string name="notification_alerted_content_description" msgid="6139691253611265992">"Alerta enviada"</string> <string name="notification_verified_content_description" msgid="6401483602782359391">"Verificado"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index cbcf40306bd612b0858a9f0b46a6229c2864ec7f..bf93533f2574522c13d944191bcfc03d3e28b28a 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -502,6 +502,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esta aplicación del sistema o con privilegios puede hacer fotos y grabar vÃdeos en cualquier momento con una cámara del sistema, aunque debe tener también el permiso android.permission.CAMERA para hacerlo"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permitir que una aplicación o servicio reciba retrollamadas cada vez que se abra o cierre una cámara."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esta aplicación puede recibir retrollamadas cuando se abre o se cierra la cámara con cualquier aplicación."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar la vibración"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la función de vibración."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la aplicación acceda al ajuste de vibración."</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 22600e527270c6562a0c317ece7a6490ffd88270..f3d1455ff7e676939266797bf5b7f7bd1a4b72be 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"See privileegidega või süsteemirakendus saab süsteemi kaameraga alati pilte ja videoid jäädvustada. Rakendusel peab olema ka luba android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Lubab rakendusel või teenusel kaameraseadmete avamise või sulgemise kohta tagasikutseid vastu võtta."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"See rakendus saab mis tahes kaameraseadme avamisel (vastava rakendusega) või sulgemisel tagasikutseid vastu võtta."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"juhtige vibreerimist"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Võimaldab rakendusel juhtida vibreerimist."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Võimaldab rakendusel juurde pääseda vibreerimise olekule."</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 019296d2bec0461b6dc775293f8f5f34d32e9543..ab2e23611d8885acab93962ddd7e5511c2179948 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Pribilegioa duen edo sistemakoa den aplikazio honek edonoiz erabil dezake kamera argazkiak ateratzeko eta bideoak grabatzeko. Halaber, android.permission.CAMERA baimena izan behar du aplikazioak."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"eman jakinarazpenak jasotzeko baimena aplikazioari edo zerbitzuari kamerak ireki edo ixten direnean."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Kamera ireki edo itxi dela (eta zer aplikaziorekin) dioten jakinarazpenak jaso ditzake aplikazio honek."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolatu dardara"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Bibragailua kontrolatzeko baimena ematen die aplikazioei."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dardara-egoera erabiltzeko baimena ematen die aplikazioei."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 6210b62a29158130906217c3a89e3244aa04de63..ce3109489ed9139e926f9c2e2caacb6e2af39a2e 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"â€Ø§ÛŒÙ† برنامه سیستم یا دارای امتیاز، می‌تواند با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دوربین سیستم در هرزمانی عکس‌برداری Ùˆ Ùیلم‌برداری کند. برنامه به اجازه android.permission.CAMERA هم نیاز دارد."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"مجاز کردن برنامه یا سرویس برای Ø¯Ø±ÛŒØ§ÙØª پاسخ تماس درباره دستگاه‌های دوربینی Ú©Ù‡ باز یا بسته می‌شوند."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"این برنامه می‌تواند هروقت دستگاه دوربین باز (براساس برنامه) یا بسته می‌شود، پاسخ تماس Ø¯Ø±ÛŒØ§ÙØª کند."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"به برنامه یا سرویس اجازه داده شود به‌عنوان «کاربر سیستم بی‌سَر» به دوربین دسترسی پیدا کند."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"این برنامه می‌تواند به‌عنوان «کاربر سیستم بی‌سَر» به دوربین دسترسی پیدا کند."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"کنترل لرزش"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"â€Ø¨Ù‡ برنامه اجازه می‎دهد تا لرزاننده را کنترل کند."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"به برنامه اجازه می‌دهد تا به وضعیت لرزاننده دسترسی داشته باشد."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index ef09aee19b310bd2c9fee24f74e0b982cab3c29c..22d48e2850ffff35fc4e199640532c21ede6eeb2 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Tämä oikeutettu tai järjestelmäsovellus voi ottaa järjestelmän kameralla kuvia ja videoita koska tahansa. Sovelluksella on oltava myös android.permission.CAMERA-lupa"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Salli sovelluksen tai palvelun vastaanottaa vastakutsuja kameralaitteiden avaamisesta tai sulkemisesta."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Tämä sovellus voi saada vastakutsuja, kun jokin kameralaite avataan tai suljetaan (jollakin sovelluksella)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Myönnä sovellukselle tai palvelulle pääsy kameraan järjestelmäkäyttäjänä, jolla ei ole graafista käyttöliittymää."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Tämä sovellus saa pääsyn kameraan järjestelmäkäyttäjänä, jolla ei ole graafista käyttöliittymää."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"hallita värinää"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Antaa sovelluksen hallita värinää."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Sallii sovelluksen käyttää värinätilaa."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index d38f65651bba64e01fb42274caad4519e97f12f4..ed876527a81a7209defa5f59415e94abf76d4113 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -502,6 +502,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Cette application privilégiée ou système peut prendre des photos ou filmer des vidéos à l\'aide d\'un appareil photo système en tout temps. L\'application doit également posséder l\'autorisation android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Autoriser une application ou un service de recevoir des rappels relatifs à l\'ouverture ou à la fermeture des appareils photos."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Cette application peut recevoir des rappels lorsque l\'appareil photo est ouvert ou fermé (par l\'application en question)."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"gérer le vibreur"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de gérer le vibreur de l\'appareil."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet à l\'application d\'accéder au mode vibration."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 1049d49468f4ab112d1b1cf034f3b42b9fe75f7b..7dc560d9cc9640948df2c9f4c7722c349cf18466 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -502,6 +502,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Cette application privilégiée ou système peut utiliser une caméra photo système pour prendre des photos et enregistrer des vidéos à tout moment. Pour cela, l\'application doit également disposer de l\'autorisation android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Autoriser une application ou un service à recevoir des rappels liés à l\'ouverture ou à la fermeture de caméras"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Cette application peut recevoir des rappels lors de la fermeture ou de l\'ouverture d\'une caméra (par une application)."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"contrôler le vibreur"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de contrôler le vibreur."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet à l\'application d\'accéder à l\'état du vibreur."</string> @@ -1595,9 +1599,9 @@ <string name="data_usage_limit_snoozed_body" msgid="545146591766765678">"Vous avez dépassé votre limite définie de <xliff:g id="SIZE">%s</xliff:g>"</string> <string name="data_usage_restricted_title" msgid="126711424380051268">"Données en arrière-plan limitées"</string> <string name="data_usage_restricted_body" msgid="5338694433686077733">"Appuyez pour suppr. restriction."</string> - <string name="data_usage_rapid_title" msgid="2950192123248740375">"Conso données mobiles élevée"</string> + <string name="data_usage_rapid_title" msgid="2950192123248740375">"Conso élevée des données mobiles"</string> <string name="data_usage_rapid_body" msgid="3886676853263693432">"Vos applications ont utilisé plus de données que d\'habitude"</string> - <string name="data_usage_rapid_app_body" msgid="5425779218506513861">"<xliff:g id="APP">%s</xliff:g> a utilisé plus de données que d\'habitude"</string> + <string name="data_usage_rapid_app_body" msgid="5425779218506513861">"L\'application <xliff:g id="APP">%s</xliff:g> a utilisé plus de données que d\'habitude"</string> <string name="ssl_certificate" msgid="5690020361307261997">"Certificat de sécurité"</string> <string name="ssl_certificate_is_valid" msgid="7293675884598527081">"Ce certificat est valide."</string> <string name="issued_to" msgid="5975877665505297662">"Délivré à  :"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 1b8a8fd9ec5856f7740d7afe90f485ff89259d2f..ef5306c37fe2d05d66ec790be4eb2ad785dde6e0 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esta aplicación do sistema con privilexios pode utilizar unha cámara do sistema en calquera momento para tirar fotos e gravar vÃdeos. Require que a aplicación tamén teña o permiso android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permitir que unha aplicación ou servizo reciba retrochamadas cando se abran ou se pechen dispositivos con cámara."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esta aplicación pode recibir retrochamadas cando outra aplicación abra ou peche un dispositivo con cámara."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar a vibración"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite á aplicación controlar o vibrador."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a aplicación acceda ao estado de vibrador"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 9ad7ff19b7123fbc1a09a3a2033e8a0d6cda9999..d634b1e39c625446b7c045b6b7c376d94d3768d8 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"આ વિશેષાધિકૃત અથવા સિસà«àªŸàª® àªàªª કોઈપણ સમયે સિસà«àªŸàª® કૅમેરાનો ઉપયોગ કરીને ફોટા લઈ અને વીડિયો રેકૉરà«àª¡ કરી શકે છે. àªàªª દà«àªµàª¾àª°àª¾ આયોજિત કરવા માટે android.permission.CAMERAની પરવાનગી પણ જરૂરી છે"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"કૅમેરા ડિવાઇસ ચાલૠકે બંધ થવા વિશે કૉલબૅક પà«àª°àª¾àªªà«àª¤ કરવાની àªàªªà«àª²àª¿àª•ેશન કે સેવાને મંજૂરી આપો."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"જà«àª¯àª¾àª°à«‡ કોઈ કૅમેરા ડિવાઇસ (કયા àªàªªà«àª²àª¿àª•ેશન વડે) ખોલવા કે બંધ કરવામાં આવે, તà«àª¯àª¾àª°à«‡ આ àªàªª કૉલબૅક પà«àª°àª¾àªªà«àª¤ કરી શકે છે."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"વાઇબà«àª°à«‡àª¶àª¨ નિયંતà«àª°àª¿àª¤ કરો"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"àªàªªà«àª²àª¿àª•ેશનને વાઇબà«àª°à«‡àªŸàª°àª¨à«‡ નિયંતà«àª°àª¿àª¤ કરવાની મંજૂરી આપે છે."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"àªàªªàª¨à«‡ વાઇબà«àª°à«‡àªŸàª° સà«àª¥àª¿àª¤àª¿àª¨à«‡ àªàª•à«àª¸à«‡àª¸ કરવાની મંજૂરી આપે છે."</string> @@ -806,7 +810,7 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"હોલà«àª¡àª°àª¨à«‡ વપરાશકરà«àª¤àª¾ દà«àªµàª¾àª°àª¾ કરવામાં આવતી કà«àª°àª¿àª¯àª¾ વિના, અગાઉ ઇનà«àª¸à«àªŸà«‰àª² કરેલી àªàªªàª¨à«‡ અપડેટ કરવાની મંજૂરી આપે છે"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"પાસવરà«àª¡ નિયમો સેટ કરો"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"સà«àª•à«àª°à«€àª¨ લૉક પાસવરà«àª¡ અને પિનમાં મંજૂર લંબાઈ અને અકà«àª·àª°à«‹àª¨à«‡ નિયંતà«àª°àª¿àª¤ કરો."</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરવાના પà«àª°àª¯àª¤à«àª¨à«‹àª¨à«àª‚ નિયમન કરો"</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરવાના પà«àª°àª¯àª¤à«àª¨à«‹àª¨à«‡ મૉનિટર કરો"</string> <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡à«àª¸àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡à«àª¸ લખà«àª¯àª¾àª‚ છે તો ટેબà«àª²à«‡àªŸàª¨à«‡ લૉક કરો અથવા ટેબà«àª²à«‡àªŸàª¨à«‹ તમામ ડેટા કાઢી નાખો."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે ટાઇપ કરેલા ખોટા પાસવરà«àª¡àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡ ટાઇપ કરà«àª¯àª¾ હોય, તો તમારા Android TV ડિવાઇસના ડેટાને લૉક કરો અથવા આ વપરાશકરà«àª¤àª¾àª¨à«‹ બધો ડેટા કાઢી નાખો."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡ લખà«àª¯àª¾ હોય તો ઇનà«àª«à«‹àªŸà«‡àª¨àª®à«‡àª¨à«àªŸ સિસà«àªŸàª®àª¨à«‡ લૉક કરો અથવા ઇનà«àª«à«‹àªŸà«‡àª¨àª®à«‡àª¨à«àªŸ સિસà«àªŸàª®àª¨à«‹ બધો ડેટા કાઢી નાખો."</string> @@ -814,7 +818,7 @@ <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡à«àª¸àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡à«àª¸ લખà«àª¯àª¾àª‚ છે તો ટેબà«àª²à«‡àªŸàª¨à«‡ લૉક કરો અથવા આ વપરાશકરà«àª¤àª¾àª¨à«‹ તમામ ડેટા કાઢી નાખો."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે ટાઇપ કરેલા ખોટા પાસવરà«àª¡àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡ ટાઇપ કરà«àª¯àª¾ હોય તો તમારા Android TV ડિવાઇસને લૉક કરો અથવા આ વપરાશકરà«àª¤àª¾àª¨à«‹ બધો ડેટા કાઢી નાખો."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡ લખà«àª¯àª¾ હોય તો ઇનà«àª«à«‹àªŸà«‡àª¨àª®à«‡àª¨à«àªŸ સિસà«àªŸàª®àª¨à«‡ લૉક કરો અથવા આ પà«àª°à«‹àª«àª¾àª‡àª²àª¨à«‹ બધો ડેટા કાઢી નાખો."</string> - <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="9177645136475155924">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡à«àª¸àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡à«àª¸ લખà«àª¯àª¾àª‚ છે તો ફોનને લૉક કરો અથવા આ વપરાશકરà«àª¤àª¾àª¨à«‹ તમામ ડેટા કાઢી નાખો."</string> + <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="9177645136475155924">"સà«àª•à«àª°à«€àª¨àª¨à«‡ અનલૉક કરતી વખતે લખેલા ખોટા પાસવરà«àª¡àª¨à«€ સંખà«àª¯àª¾àª¨à«‡ મૉનિટર કરો અને જો ઘણા બધા ખોટા પાસવરà«àª¡ લખà«àª¯àª¾àª‚ છે તો ફોનને લૉક કરો અથવા આ વપરાશકરà«àª¤àª¾àª¨à«‹ તમામ ડેટા કાઢી નાખો."</string> <string name="policylab_resetPassword" msgid="214556238645096520">"સà«àª•à«àª°à«€àª¨ લૉક બદલો"</string> <string name="policydesc_resetPassword" msgid="4626419138439341851">"સà«àª•à«àª°à«€àª¨ લૉક બદલો."</string> <string name="policylab_forceLock" msgid="7360335502968476434">"સà«àª•à«àª°à«€àª¨ લૉક કરો"</string> @@ -823,7 +827,7 @@ <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"ફેકà«àªŸàª°à«€ ડેટા ફરીથી સેટ કરોને કરીને ચેતવણી વિના ટેબà«àª²à«‡àªŸàª¨à«‹ ડેટા કાઢી નાખો."</string> <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"ફેકà«àªŸàª°à«€ ડેટા રીસેટ કરીને ચેતવણી વિના તમારા Android TV ડિવાઇસનો ડેટા કાઢી નાખો."</string> <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"ફેકà«àªŸàª°à«€ ડેટા રીસેટ કરીને કોઈ ચેતવણી વિના જ ઇનà«àª«à«‹àªŸà«‡àª¨àª®à«‡àª¨à«àªŸ સિસà«àªŸàª®àª¨à«‹ ડેટા કાઢી નાખો."</string> - <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"ફેકà«àªŸàª°à«€ ડેટા ફરીથી સેટ કરોને કરીને ચેતવણી વિના ફોનનો ડેટા કાઢી નાખો."</string> + <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"ફેકà«àªŸàª°à«€ ડેટા ફરીથી સેટ કરીને ચેતવણી વિના ફોનનો ડેટા કાઢી નાખો."</string> <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"પà«àª°à«‹àª«àª¾àª‡àª²àª¨à«‹ ડેટા કાઢી નાખો"</string> <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"વપરાશકરà«àª¤àª¾ ડેટા કાઢી નાખો"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"ચેતવણી વિના આ ટેબà«àª²à«‡àªŸ પરનો આ વપરાશકરà«àª¤àª¾àª¨à«‹ ડેટા કાઢી નાખો."</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 2cd150963695b661bb2c51cf612303d36bf5c9fc..1f3a377e512b38635eecf2917e06547306552646 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"यह खास सिसà¥à¤Ÿà¤® à¤à¤ªà¥à¤²à¤¿à¤•ेशन जब चाहे, तसà¥à¤µà¥€à¤°à¥‡à¤‚ लेने और वीडियो रिकॉरà¥à¤¡ करने के लिठसिसà¥à¤Ÿà¤® के कैमरे का इसà¥à¤¤à¥‡à¤®à¤¾à¤² कर सकता है. इसके लिठà¤à¤ªà¥à¤²à¤¿à¤•ेशन को android.permission.CAMERA की अनà¥à¤®à¤¤à¤¿ देना à¤à¥€ ज़रूरी है"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"डिवाइस का कैमरे चालू या बंद होने पर, किसी à¤à¤ªà¥à¤²à¤¿à¤•ेशन या सेवा को कॉलबैक पाने की मंज़ूरी दें."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"यह à¤à¤ªà¥à¤²à¤¿à¤•ेशन, डिवाइस के कैमरे को चालू या बंद करते समय (किसी à¤à¤ªà¥à¤²à¤¿à¤•ेशन से) कॉलबैक पा सकता है."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"à¤à¤ªà¥à¤²à¤¿à¤•ेशन को हेडलेस सिसà¥à¤Ÿà¤® यूज़र के तौर पर कैमरा à¤à¤•à¥à¤¸à¥‡à¤¸ करने की अनà¥à¤®à¤¤à¤¿ दें."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"यह à¤à¤ªà¥à¤²à¤¿à¤•ेशन, हेडलेस सिसà¥à¤Ÿà¤® यूजर के तौर पर कैमरे को à¤à¤•à¥à¤¸à¥‡à¤¸ कर सकता है."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"कंपन (वाइबà¥à¤°à¥‡à¤¶à¤¨) को नियंतà¥à¤°à¤¿à¤¤ करें"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"à¤à¤ªà¥à¤¸ को कंपनकरà¥à¤¤à¤¾ नियंतà¥à¤°à¤¿à¤¤ करने देता है."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"इससे à¤à¤ªà¥à¤²à¤¿à¤•ेशन, डिवाइस का वाइबà¥à¤°à¥‡à¤Ÿà¤° à¤à¤•à¥à¤¸à¥‡à¤¸ कर पाà¤à¤—ा."</string> @@ -1596,7 +1598,7 @@ <string name="data_usage_restricted_body" msgid="5338694433686077733">"पà¥à¤°à¤¤à¤¿à¤¬à¤‚ध निकालने के लिठटैप करें."</string> <string name="data_usage_rapid_title" msgid="2950192123248740375">"माेबाइल डेटा का ज़à¥à¤¯à¤¾à¤¦à¤¾ इसà¥à¤¤à¥‡à¤®à¤¾à¤²"</string> <string name="data_usage_rapid_body" msgid="3886676853263693432">"आपके à¤à¤ªà¥à¤²à¤¿à¤•ेशन ने आम तौर पर इसà¥à¤¤à¥‡à¤®à¤¾à¤² होने वाले डेटा से ज़à¥à¤¯à¤¾à¤¦à¤¾ डेटा खरà¥à¤š कर दिया है"</string> - <string name="data_usage_rapid_app_body" msgid="5425779218506513861">"<xliff:g id="APP">%s</xliff:g> ने आम तौर पर इसà¥à¤¤à¥‡à¤®à¤¾à¤² होने वाले डेटा से ज़à¥à¤¯à¤¾à¤¦à¤¾ डेटा खरà¥à¤š कर दिया है"</string> + <string name="data_usage_rapid_app_body" msgid="5425779218506513861">"<xliff:g id="APP">%s</xliff:g> ने आम तौर पर इसà¥à¤¤à¥‡à¤®à¤¾à¤² होने वाले डेटा से ज़à¥à¤¯à¤¾à¤¦à¤¾ डेटा खरà¥à¤š किया है"</string> <string name="ssl_certificate" msgid="5690020361307261997">"सà¥à¤°à¤•à¥à¤·à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°"</string> <string name="ssl_certificate_is_valid" msgid="7293675884598527081">"यह पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° मानà¥à¤¯ है."</string> <string name="issued_to" msgid="5975877665505297662">"इनà¥à¤¹à¥‡à¤‚ जारी किया गया:"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 4a9dbf534771f9c0cb7cc5e38ccdfc4e9f75ba76..389a9562f5e8f612cfd941e21b539162e63167db 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ova povlaÅ¡tena aplikacija ili aplikacija sustava u svakom trenutku može snimati fotografije i videozapise kamerom sustava. Aplikacija mora imati i dopuÅ¡tenje android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Dopustite aplikaciji ili usluzi da prima povratne pozive o otvaranju ili zatvaranju fotoaparata."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ta aplikacija može primati povratne pozive prilikom otvaranja (putem neke aplikacije) ili zatvaranja fotoaparata."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Dopustite aplikaciji ili usluzi da pristupi kameri kao korisnik sustava bez grafiÄkog korisniÄkog suÄelja."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ova aplikacija može pristupiti kameri kao korisnik sustava bez grafiÄkog korisniÄkog suÄelja."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"upravljanje vibracijom"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogućuje nadzor nad vibratorom."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji omogućuje da pristupi stanju vibracije."</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 57b81a0b4ac6ac777278555ac7a621150987553b..4bce83b917a2ed59a72e50eccfb4f55a9e68cbf3 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"A rendszerkamera használatával ez az elÅ‘nyben részesÃtett vagy rendszeralkalmazás bármikor készÃthet fényképeket és videókat. Az alkalmazásnak az „android.permission.CAMERA†engedéllyel is rendelkeznie kell."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"VisszahÃvás fogadásának engedélyezése alkalmazás vagy szolgáltatás számára, ha a kamerákat megnyitják vagy bezárják."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ez az alkalmazás fogadhat visszahÃvásokat bármelyik kamera (adott alkalmazás általi) megnyitásakor vagy bezárásakor."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Engedélyezheti a kÃvánt alkalmazás vagy szolgáltatás számára, hogy hozzáférjen a kamerához headless rendszerfelhasználóként."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Az alkalmazás hozzáférhet a kamerához headless rendszerfelhasználóként."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"rezgés szabályozása"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"LehetÅ‘vé teszi az alkalmazás számára a rezgés vezérlését."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"LehetÅ‘vé teszi az alkalmazás számára a rezgés állapotához való hozzáférést."</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 9190a6382c4b4fd08781ee93a6cced9abec00c70..e74ec542102d24f0fea84ddc12a09713cd6af418 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ô±ÕµÕ½ Õ¡Ö€Õ¿Õ¸Õ¶ÕµÕ¡Õ¬ Õ¯Õ¡Õ´ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ ÖÕ¡Õ¶Õ¯Õ¡ÖÕ¡Õ® ÕºÕ¡Õ°Õ« Õ¬Õ¸Ö‚Õ½Õ¡Õ¶Õ¯Õ¡Ö€Õ¥Õ¬ Ö‡ Õ¿Õ¥Õ½Õ¡Õ£Ö€Õ¥Õ¬Õ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬Õ¸Õ¾ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ« Õ¿Õ¥Õ½Õ¡ÕÖÕ«Õ¯Õ¶Õ¥Ö€Õ¨Ö‰ Õ€Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ¶Õ¡Ö‡ Õ¡Õ¶Õ°Ö€Õ¡ÕªÕ¥Õ·Õ¿ Õ§ android.permission.CAMERA Õ©Õ¸Ö‚ÕµÕ¬Õ¿Õ¾Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨Ö‰"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Ô¹Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ¯Õ¡Õ´ Õ®Õ¡Õ¼Õ¡ÕµÕ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨ Õ°Õ¥Õ¿Õ¦Õ¡Õ¶Õ£Õ¥Ö€ Õ½Õ¿Õ¡Õ¶Õ¡Õ¬Õ Õ¿Õ¥Õ½Õ¡ÕÖÕ«Õ¯Õ¶Õ¥Ö€Õ« Õ¢Õ¡ÖÕ¾Õ¥Õ¬Õ¸Ö‚ Ö‡ ÖƒÕ¡Õ¯Õ¾Õ¥Õ¬Õ¸Ö‚ Õ¤Õ¥ÕºÖ„Õ¸Ö‚Õ´Ö‰"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ô±ÕµÕ½ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ Õ°Õ¥Õ¿Õ¦Õ¡Õ¶Õ£Õ¥Ö€ Õ½Õ¿Õ¡Õ¶Õ¡Õ¬Õ ÖÕ¡Õ¶Õ¯Õ¡ÖÕ¡Õ® Õ¿Õ¥Õ½Õ¡ÕÖÕ«Õ¯Õ« Õ¢Õ¡ÖÕ¾Õ¥Õ¬Õ¸Ö‚ (Õ¯Õ¶Õ·Õ¾Õ« Õ¢Õ¡ÖÕ¸Õ² Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¨) Ö‡ ÖƒÕ¡Õ¯Õ¾Õ¥Õ¬Õ¸Ö‚ Õ¤Õ¥ÕºÖ„Õ¸Ö‚Õ´Ö‰"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Ô¹Õ¸Ö‚ÕµÕ¬Õ¡Õ¿Ö€Õ¥Õ¬ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ¯Õ¡Õ´ Õ®Õ¡Õ¼Õ¡ÕµÕ¸Ö‚Õ©ÕµÕ¡Õ¶Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ¸Ö€ÕºÕ¥Õ½ Õ´Õ«Õ»Õ¥Ö€Õ¥Õ½Õ« Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¡ÕµÕ«Õ¶ Ö…Õ£Õ¿Õ¡Õ¿Õ¥Ö€Ö‰"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ô±ÕµÕ½ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ±Õ¥Ö€ Õ¿Õ¥Õ½Õ¡ÕÖÕ«Õ¯Õ¨ Õ°Õ¡Õ½Õ¡Õ¶Õ¥Õ¬Õ« Õ§ Õ¸Ö€ÕºÕ¥Õ½ Õ¡Õ¼Õ¡Õ¶Ö Õ´Õ«Õ»Õ¥Ö€Õ¥Õ½Õ« Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¡ÕµÕ«Õ¶ Ö…Õ£Õ¿Õ¡Õ¿Õ¥Ö€Ö‰"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"Õ¯Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬ Õ©Ö€Õ©Õ¼Õ¸Ö‚Õ´Õ¨"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ô¹Õ¸Ö‚ÕµÕ¬ Õ§ Õ¿Õ¡Õ¬Õ«Õ½ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ¯Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬ Õ©Ö€Õ©Õ¼Õ¸ÖÕ¨:"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Õ€Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ«Õ¶ Õ©Õ¸Ö‚ÕµÕ¬ Õ§ Õ¿Õ¡Õ¬Õ«Õ½ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ½Õ¡Ö€Ö„Õ« Õ©Ö€Õ©Õ¼Õ¡Õ¬Õ¸Ö‚ Õ¼Õ¥ÕªÕ«Õ´Õ¨Ö‰"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 3417c2af249fdce94c2a15e0b8fa7603b184226b..dc0993e4720fe3c0fd9e83922aff7e2557ebced4 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Aplikasi sistem atau yang diberi hak istimewa ini dapat mengambil gambar dan merekam video menggunakan kamera sistem kapan saja. Mewajibkan aplikasi untuk memiliki izin android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Izinkan aplikasi atau layanan untuk menerima callback tentang perangkat kamera yang sedang dibuka atau ditutup."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Aplikasi ini dapat menerima callback saat perangkat kamera dibuka (oleh aplikasi) atau ditutup."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Izinkan aplikasi atau layanan mengakses kamera sebagai Pengguna Sistem Headless."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Aplikasi ini dapat mengakses kamera sebagai Pengguna Sistem Headless."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrol getaran"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Mengizinkan aplikasi untuk mengendalikan vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Mengizinkan aplikasi untuk mengakses status vibrator."</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 7b2bf029a23a6088d314376dde594762cd065f90..3a8c0ea775dc9f7e5a6b319ca6d5cdf0ba085713 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Þetta forgangs- eða kerfisforrit hefur heimild til að taka myndir og taka upp myndskeið með myndavél kerfisins hvenær sem er. Forritið þarf einnig að vera með heimildina android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Leyfa forriti eða þjónustu að taka við svörum um myndavélar sem verið er að opna eða loka."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Þetta forrit getur tekið við svörum þegar verið er að opna eða loka myndavél à hvaða forriti sem er."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"stjórna titringi"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Leyfir forriti að stjórna titraranum."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Veitir forritinu aðgang að stöðu titrings."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index b0bde08f0b42f33d62fd9063d9d0971d1c360f38..7ea502cc94ef8c235c5cb3382cba906a3f739f8a 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Questa app di sistema o con privilegi può scattare foto e registrare video tramite una videocamera di sistema in qualsiasi momento. Richiede che anche l\'app disponga dell\'autorizzazione android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Consenti a un\'applicazione o a un servizio di ricevere callback relativi all\'apertura o alla chiusura di videocamere."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Questa app può ricevere callback quando una videocamera viene aperta (da una specifica applicazione) o chiusa."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Consenti a un\'applicazione o a un servizio di accedere alla fotocamera come utente di sistema senza testa."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Questa app può accedere alla fotocamera come utente di sistema senza testa."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controllo vibrazione"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Consente all\'applicazione di controllare la vibrazione."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Consente all\'app di accedere allo stato di vibrazione."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 000adcef9df67113ff1d33d70b1756a6cd362795..22cbab2d04d16c97a2fe330722683f2576484e0c 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"â€×”×פליקציה הזו בעלת ההרש×ות, ×ו ×פליקציית המערכת הזו, יכולה ×œ×¦×œ× ×ª×ž×•× ×•×ª ולהקליט ×¡×¨×˜×•× ×™× ×‘×מצעות מצלמת מערכת בכל זמן. ×‘× ×•×¡×£, ל×פליקציה × ×“×¨×©×ª ההרש××” android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"â€×פליקציה ×ו שירות יוכלו לקבל קרי×ות חוזרות (callback) כשמכשירי מצלמה ייפתחו ×ו ייסגרו."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"â€×”×פליקציה הזו יכולה לקבל קרי×ות חוזרות (callback) כשמכשיר מצלמה כלשהו × ×¤×ª×— (ב×מצעות ×פליקציה) ×ו × ×¡×’×¨."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"מתן גישה למצלמת המערכת עבור ×פליקציה ×ו שירות כמשתמש ב×פליקציית מערכת ×œ×œ× ×ž×ž×©×§ גרפי"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"×”×פליקציה הזו יכולה לגשת למצלמה כמשתמש ב×פליקציית מערכת ×œ×œ× ×ž×ž×©×§ גרפי."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"שליטה ברטט"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"מ×פשרת ל×פליקציה לשלוט ברטט."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"מ×פשרת ל×פליקציה לקבל גישה למצב רטט."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index d7618754f200eee804ec54f541211827427de595..06b3445e80eeb68eafbc0fdb519f9ab3291ce085 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"権é™ã‚’付与ã•れãŸã“ã®ã‚¢ãƒ—リã¾ãŸã¯ã‚·ã‚¹ãƒ†ãƒ アプリã¯ã€ã„ã¤ã§ã‚‚システムカメラを使用ã—ã¦å†™çœŸã¨å‹•画を撮影ã§ãã¾ã™ã€‚アプリã«ã¯ android.permission.CAMERA 権é™ã‚‚å¿…è¦ã§ã™"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"カメラデãƒã‚¤ã‚¹ãŒèµ·å‹•ã¾ãŸã¯çµ‚了ã—ãŸã¨ãã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’å—ã‘å–ã‚‹ã“ã¨ã‚’ã€ã‚¢ãƒ—リã¾ãŸã¯ã‚µãƒ¼ãƒ“スã«è¨±å¯ã—ã¦ãã ã•ã„。"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ã“ã®ã‚¢ãƒ—リã¯ã€ã‚«ãƒ¡ãƒ©ãƒ‡ãƒã‚¤ã‚¹ãŒï¼ˆãªã‚“らã‹ã®ã‚¢ãƒ—リã«ã‚ˆã£ã¦ï¼‰èµ·å‹•ã™ã‚‹ã¨ãã€ã¾ãŸã¯çµ‚了ã™ã‚‹ã¨ãã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’å—ã‘å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ヘッドレス システムユーザーã¨ã—ã¦ã‚«ãƒ¡ãƒ©ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚’アプリã¾ãŸã¯ã‚µãƒ¼ãƒ“スã«è¨±å¯ã—ã¦ãã ã•ã„。"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ã“ã®ã‚¢ãƒ—リã¯ãƒ˜ãƒƒãƒ‰ãƒ¬ã‚¹ システムユーザーã¨ã—ã¦ã‚«ãƒ¡ãƒ©ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ãƒã‚¤ãƒ–レーションã®åˆ¶å¾¡"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ãƒã‚¤ãƒ–レーションã®åˆ¶å¾¡ã‚’アプリã«è¨±å¯ã—ã¾ã™ã€‚"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ãƒã‚¤ãƒ–レーションã®ã‚ªãƒ³ / ã‚ªãƒ•çŠ¶æ…‹ã®æŠŠæ¡ã‚’アプリã«è¨±å¯ã—ã¾ã™ã€‚"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 513b392abee08099cbb13d1ec8680f221a77dfeb..c8f6621f4e605bcd059ef45466ffe747b4b949d8 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"áƒáƒ› პრივილეგირებულ áƒáƒœ სისტემის áƒáƒžáƒ¡ შეუძლირფáƒáƒ¢áƒáƒ”ბის გáƒáƒ“áƒáƒ¦áƒ”ბრდრვიდეáƒáƒ”ბის ჩáƒáƒ¬áƒ”რრნებისმიერდრáƒáƒ¡ სისტემის კáƒáƒ›áƒ”რის გáƒáƒ›áƒáƒ§áƒ”ნებით. სáƒáƒáƒ˜áƒ áƒáƒ, რáƒáƒ› áƒáƒžáƒ¡ ჰქáƒáƒ“ეს android.permission.CAMERA ნებáƒáƒ თვáƒáƒª"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ნებრდáƒáƒ”რთáƒáƒ¡ áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒáƒ¡ áƒáƒœ სერვისს, მიიღáƒáƒ¡ გáƒáƒ“მáƒáƒ ეკვები კáƒáƒ›áƒ”რის მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ áƒáƒœ დáƒáƒ®áƒ£áƒ ვისáƒáƒ¡."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"áƒáƒ› áƒáƒžáƒ¡ შეუძლირმიიღáƒáƒ¡ გáƒáƒ“მáƒáƒ ეკვები, რáƒáƒ“ესáƒáƒª რáƒáƒ›áƒ”ლიმე კáƒáƒ›áƒ”რის მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რიხსნებრ(რáƒáƒ›áƒ”ლიმე áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ—) áƒáƒœ იხურებáƒ."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"დáƒáƒ£áƒ¨áƒ•ით áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒœ სერვისის, რáƒáƒ’áƒáƒ ც სისტემის (გრáƒáƒ¤áƒ˜áƒ™áƒ£áƒšáƒ˜ ინტერფეისის გáƒáƒ ეშე) მáƒáƒ›áƒ®áƒ›áƒáƒ ებლის, წვდáƒáƒ›áƒ კáƒáƒ›áƒ”რáƒáƒ–ე."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"áƒáƒ› áƒáƒžáƒ¡ შეუძლირკáƒáƒ›áƒ”რáƒáƒ–ე წვდáƒáƒ›áƒ, რáƒáƒ’áƒáƒ ც სისტემის (გრáƒáƒ¤áƒ˜áƒ™áƒ£áƒšáƒ˜ ინტერფეისის გáƒáƒ ეშე) მáƒáƒ›áƒ®áƒ›áƒáƒ ებელს."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ვიბრáƒáƒªáƒ˜áƒ˜áƒ¡ კáƒáƒœáƒ¢áƒ áƒáƒšáƒ˜"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"áƒáƒžáƒ¡ შეეძლებáƒ, მáƒáƒ თáƒáƒ¡ ვიბრირებáƒ."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ნებáƒáƒ¡ რთáƒáƒ•ს áƒáƒžáƒ¡, ჰქáƒáƒœáƒ“ეს წვდáƒáƒ›áƒ ვიბრáƒáƒªáƒ˜áƒ˜áƒ¡ მდგáƒáƒ›áƒáƒ ეáƒáƒ‘áƒáƒ–ე."</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index bddd15c809fdcf17252e28c31f587adf0219be3b..315ff29ab73884516f6539933738dc1035178d31 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ОÑÑ‹ айрықша немеÑе жүйе қолданбаÑÑ‹ кез келген уақытта жүйелік камера арқылы Ñуретке не бейнеге түÑіре алады. Қолданбаға android.permission.CAMERA Ñ€Ò±Ò›Ñаты қажет болады."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Қолданбаға не қызметке ашылып не жабылып жатқан камера құрылғылары туралы кері шақыру алуға Ñ€Ò±Ò›Ñат ету"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Кез келген камера ашылып (көрÑетілген қолданба арқылы) не жабылып жатқанда, бұл қолданба кері шақыру алады."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"тербеліÑті баÑқару"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Қолданбаға вибраторды баÑқаруға Ñ€Ò±Ò›Ñат береді."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Қолданбаға діріл күйін пайдалануға мүмкіндік береді."</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 9047666092a58de920dbf10c66c300ffa7d5b7c1..807761ef6dc559e5c4ee1152814a4a86ce5d82ae 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"កម្មវិធីប្រពáŸáž“្ធ ឬកម្មវិធីដែលមានសិទ្ធិអនុញ្ញាážâ€‹áž“áŸáŸ‡áž¢áž¶áž…ážážâ€‹ážšáž¼áž” និង​ážážážœáž¸ážŠáŸáž¢áž¼ ដោយប្រើ​កាមáŸážšáŸ‰áž¶â€‹áž”្រពáŸáž“្ធបាន​គ្រប់ពáŸáž›áŸ” ážáž˜áŸ’រូវឱ្យមាន​ការអនុញ្ញាហandroid.permission.CAMERA ដើម្បីឱ្យ​កម្មវិធីអាចធ្វើ​សកម្មភាព​បានផងដែរ"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"អនុញ្ញាážáž±áŸ’យកម្មវិធី ឬសáŸážœáž¶áž€áž˜áŸ’ម​ទទួលការហៅážáŸ’រឡប់វិញអំពី​កាមáŸážšáŸ‰áž¶ážŠáŸ‚លកំពុងបិទ ឬបើក។"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"កម្មវិធី​នáŸáŸ‡â€‹áž¢áž¶áž…​ទទួល​ការហៅážáŸ’រឡប់វិញ​បាន នៅពáŸáž›â€‹áž€áŸ†áž–ុងបិទ ឬ​បើក​កាមáŸážšáŸ‰áž¶ (ដោយ​កម្មវិធី)​។"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"អនុញ្ញាážáž±áŸ’យកម្មវិធី ឬសáŸážœáž¶áž€áž˜áŸ’មចូលប្រើកាមáŸážšáŸ‰áž¶áž‡áž¶ Headless System User។"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"កម្មវិធីនáŸáŸ‡áž¢áž¶áž…ចូលប្រើកាមáŸážšáŸ‰áž¶áž‡áž¶ Headless System User។"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ពិនិážáŸ’យ​ការ​ញáŸážš"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ឲ្យ​កម្មវិធី​គ្រប់គ្រង​កម្មវិធី​ញáŸážšáŸ”"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"អនុញ្ញាážáž±áŸ’យ​កម្មវិធី​ចូលប្រើ​ស្ážáž¶áž“ភាពកម្មវិធី​ញáŸážšáŸ”"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index aa543d851322ba750e9d060473a4fb9edfd7bc25..953ed68d4d4d56e6f31f72b8f49497788afade82 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -331,7 +331,7 @@ <string name="permgrouplab_notifications" msgid="5472972361980668884">"ನೋಟಿಫಿಕೇಶನà³â€Œà²—ಳà³"</string> <string name="permgroupdesc_notifications" msgid="4608679556801506580">"ಅಧಿಸೂಚನೆಗಳನà³à²¨à³ ತೋರಿಸಿ"</string> <string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ವಿಂಡೋ ವಿಷಯವನà³à²¨à³ ಹಿಂಪಡೆಯà³à²¤à³à²¤à²¦à³†"</string> - <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ನೀವೠಬಳಸà³à²¤à³à²¤à²¿à²°à³à²µ ವಿಂಡೋದ ವಿಷಯ ಪರೀಕà³à²·à²¿à²¸à³à²¤à³à²¤à²¦à³†."</string> + <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ನೀವೠಸಂವಹನ ನಡೆಸà³à²¤à³à²¤à²¿à²°à³à²µ ವಿಂಡೋದ ಕಂಟೆಂಟೠಅನà³à²¨à³ ಪರೀಕà³à²·à²¿à²¸à²¿."</string> <string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ಸà³à²ªà²°à³à²¶-ಎಕà³à²¸à³â€Œà²ªà³à²²à³‹à²°à³ ಆನೠಮಾಡà³à²¤à³à²¤à²¦à³†"</string> <string name="capability_desc_canRequestTouchExploration" msgid="4394677060796752976">"ಟà³à²¯à²¾à²ªà³ ಮಾಡಲಾದ à²à²Ÿà²‚ಗಳನà³à²¨à³ ಗಟà³à²Ÿà²¿à²¯à²¾à²—ಿ ಹೇಳಲಾಗà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಗೆಸà³à²šà²°à³â€Œà²—ಳನà³à²¨à³ ಬಳಸಿಕೊಂಡೠಪರದೆಯನà³à²¨à³ ಎಕà³à²¸à³â€Œà²ªà³à²²à³‹à²°à³ ಮಾಡಬಹà³à²¦à²¾à²—ಿದೆ."</string> <string name="capability_title_canRequestFilterKeyEvents" msgid="2772371671541753254">"ನೀವೠಟೈಪೠಮಾಡà³à²µ ಪಠà³à²¯à²µà²¨à³à²¨à³ ಗಮನಿಸà³à²¤à³à²¤à²¦à³†"</string> @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ಈ ವಿಶೇಷ ಅಥವಾ ಸಿಸà³à²Ÿà²‚ ಆà³à²¯à²ªà³, ಯಾವà³à²¦à³‡ ಸಮಯದಲà³à²²à²¾à²¦à²°à³‚ ಸಿಸà³à²Ÿà²‚ ಕà³à²¯à²¾à²®à²°à²¾à²µà²¨à³à²¨à³ ಬಳಸಿಕೊಂಡೠಫೋಟೋಗಳನà³à²¨à³ ತೆಗೆದà³à²•ೊಳà³à²³à²¬à²¹à³à²¦à³ ಮತà³à²¤à³ ವೀಡಿಯೋಗಳನà³à²¨à³ ರೆಕಾರà³à²¡à³ ಮಾಡಬಹà³à²¦à³. ಆà³à²¯à²ªà³â€Œà²—ೆ android.permission.CAMERA ಅನà³à²®à²¤à²¿à²¯ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ಕà³à²¯à²¾à²®à²°à²¾ ಸಾಧನಗಳನà³à²¨à³ ತೆರೆಯà³à²¤à³à²¤à²¿à²°à³à²µ ಅಥವಾ ಮà³à²šà³à²šà³à²¤à³à²¤à²¿à²°à³à²µ ಕà³à²°à²¿à²¤à³ ಕಾಲà³â€Œà²¬à³à²¯à²¾à²•à³â€Œà²—ಳನà³à²¨à³ ಸà³à²µà³€à²•ರಿಸಲೠಆà³à²¯à²ªà³â€Œ ಅಥವಾ ಸೇವೆಗೆ ಅನà³à²®à²¤à²¿à²¸à²¿."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ಯಾವà³à²¦à³‡ ಕà³à²¯à²¾à²®à²°à²¾ ಸಾಧನವನà³à²¨à³ ತೆರೆಯà³à²¤à³à²¤à²¿à²°à³à²µà²¾à²— ಅಥವಾ ಮà³à²šà³à²šà³à²¤à³à²¤à²¿à²°à³à²µà²¾à²— (ಯಾವ ಅಪà³à²²à²¿à²•ೇಶನà³â€Œà²¨à²¿à²‚ದ ಎಂಬ ಮಾಹಿತಿಯ ಮೂಲಕ) ಈ ಆà³à²¯à²ªà³, ಕಾಲà³â€Œà²¬à³à²¯à²¾à²•à³â€Œà²—ಳನà³à²¨à³ ಸà³à²µà³€à²•ರಿಸಬಹà³à²¦à³."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ಹೆಡà³â€Œà²²à³†à²¸à³ ಸಿಸà³à²Ÿà²‚ ಬಳಕೆದಾರರಂತೆ ಕà³à²¯à²¾à²®à²°à²¾à²µà²¨à³à²¨à³ ಆà³à²¯à²•à³à²¸à³†à²¸à³ ಮಾಡಲೠಆà³à²¯à²ªà³â€Œ ಅಥವಾ ಸೇವೆಗೆ ಅನà³à²®à²¤à²¿à²¸à²¿."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ಈ ಆà³à²¯à²ªà³ ಹೆಡà³â€Œà²²à³†à²¸à³ ಸಿಸà³à²Ÿà²‚ ಬಳಕೆದಾರರಂತೆ ಕà³à²¯à²¾à²®à²°à²¾à²µà²¨à³à²¨à³ ಆà³à²¯à²•à³à²¸à³†à²¸à³ ಮಾಡಬಹà³à²¦à³."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ವೈಬà³à²°à³‡à²·à²¨à³â€Œâ€Œ ನಿಯಂತà³à²°à²¿à²¸à²¿"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ವೈಬà³à²°à³‡à²Ÿà²°à³â€Œ ನಿಯಂತà³à²°à²¿à²¸à²²à³ ಅಪà³à²²à²¿à²•ೇಶನà³â€Œà²—ೆ ಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²¦à³†."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ವೈಬà³à²°à³‡à²Ÿà²°à³ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪà³à²°à²µà³‡à²¶à²¿à²¸à²²à³ ಆà³à²¯à²ªà³â€Œà²—ೆ ಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²¦à³†."</string> @@ -1429,7 +1431,7 @@ <string name="ext_media_unsupported_notification_message" product="tv" msgid="1595482802187036532">"ಬೆಂಬಲಿಸಲಾಗà³à²µ ಫಾರà³à²®à³à²¯à²¾à²Ÿà³â€Œà²¨à²²à³à²²à²¿ <xliff:g id="NAME">%s</xliff:g> ಅನà³à²¨à³ ಸೆಟಪೠಮಾಡಲೠಆಯà³à²•ೆಮಾಡಿ."</string> <string name="ext_media_unsupported_notification_message" product="automotive" msgid="3412494732736336330">"ನೀವೠಸಾಧನವನà³à²¨à³ ಮರೠಫಾರà³à²®à³à²¯à²¾à²Ÿà³ ಮಾಡಬೇಕಾಗಬಹà³à²¦à³"</string> <string name="ext_media_badremoval_notification_title" msgid="4114625551266196872">"<xliff:g id="NAME">%s</xliff:g> ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿ ತೆಗೆದà³à²¹à²¾à²•ಲಾಗಿದೆ"</string> - <string name="ext_media_badremoval_notification_message" msgid="1986514704499809244">"ವಿಷಯ ನಷà³à²Ÿà²µà²¨à³à²¨à³ ತಪà³à²ªà²¿à²¸à²²à³ ತೆಗೆದà³à²¹à²¾à²•à³à²µà³à²¦à²•à³à²•ೂ ಮà³à²¨à³à²¨ ಮಾಧà³à²¯à²®à²µà²¨à³à²¨à³ ಎಜೆಕà³à²Ÿà³ ಮಾಡಿ"</string> + <string name="ext_media_badremoval_notification_message" msgid="1986514704499809244">"ಕಂಟೆಂಟà³â€ ನಷà³à²Ÿà²µà²¨à³à²¨à³ ತಪà³à²ªà²¿à²¸à²²à³ ತೆಗೆದà³à²¹à²¾à²•à³à²µà³à²¦à²•à³à²•ೂ ಮà³à²¨à³à²¨ ಮಾಧà³à²¯à²®à²µà²¨à³à²¨à³ ಎಜೆಕà³à²Ÿà³ ಮಾಡಿ"</string> <string name="ext_media_nomedia_notification_title" msgid="742671636376975890">"<xliff:g id="NAME">%s</xliff:g> ಅವರನà³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•ಲಾಗಿದೆ"</string> <string name="ext_media_nomedia_notification_message" msgid="2832724384636625852">"ಕೆಲವೠಕಾರà³à²¯à²šà²Ÿà³à²µà²Ÿà²¿à²•ೆಗಳೠಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡದಿರಬಹà³à²¦à³. ಹೊಸ ಸಂಗà³à²°à²¹à²£à³† ಸೇರಿಸಿ."</string> <string name="ext_media_unmounting_notification_title" msgid="4147986383917892162">"<xliff:g id="NAME">%s</xliff:g> ಎಜೆಕà³à²Ÿà³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"</string> @@ -1442,7 +1444,7 @@ <string name="ext_media_missing_message" msgid="4408988706227922909">"ಸಾಧನವನà³à²¨à³ ಪà³à²¨à²ƒ ಸೇರಿಸಿ"</string> <string name="ext_media_move_specific_title" msgid="8492118544775964250">"<xliff:g id="NAME">%s</xliff:g> ಸರಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"</string> <string name="ext_media_move_title" msgid="2682741525619033637">"ಡೇಟಾ ಸರಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"</string> - <string name="ext_media_move_success_title" msgid="4901763082647316767">"ವಿಷಯ ವರà³à²—ಾವಣೆ ಪೂರà³à²£à²—ೊಂಡಿದೆ"</string> + <string name="ext_media_move_success_title" msgid="4901763082647316767">"ಕಂಟೆಂಟà³â€ ವರà³à²—ಾವಣೆ ಪೂರà³à²£à²—ೊಂಡಿದೆ"</string> <string name="ext_media_move_success_message" msgid="9159542002276982979">"ವಿಷಯವನà³à²¨à³ <xliff:g id="NAME">%s</xliff:g> ಗೆ ಸರಿಸಲಾಗಿದೆ"</string> <string name="ext_media_move_failure_title" msgid="3184577479181333665">"ವಿಷಯವನà³à²¨à³ ಸರಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಲಿಲà³à²²"</string> <string name="ext_media_move_failure_message" msgid="4197306718121869335">"ವಿಷಯವನà³à²¨à³ ಪà³à²¨à²ƒ ಸರಿಸಲೠಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 2b50395da43fe22db845b5f3757323740d5e0452..1bdd300000747e8c98b23369c71a2bbe79e4a1f1 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ì´ ê¶Œí•œì´ ìžˆëŠ” 시스템 ì•±ì€ ì–¸ì œë“ ì§€ 시스템 ì¹´ë©”ë¼ë¥¼ 사용하여 ì‚¬ì§„ì„ ì´¬ì˜í•˜ê³ ë™ì˜ìƒì„ ë…¹í™”í• ìˆ˜ 있습니다. ë˜í•œ ì•±ì— android.permission.CAMERA ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” 서비스ì—서 ì¹´ë©”ë¼ ê¸°ê¸° 열림 ë˜ëŠ” ë‹«íž˜ì— ëŒ€í•œ ì½œë°±ì„ ìˆ˜ì‹ í•˜ë„ë¡ í—ˆìš©"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ì´ ì•±ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ ì¹´ë©”ë¼ ê¸°ê¸°ë¥¼ 열거나 ë‹«ì„ ë•Œ ì½œë°±ì„ ìˆ˜ì‹ í• ìˆ˜ 있습니다."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ì• í”Œë¦¬ì¼€ì´ì…˜ ë˜ëŠ” 서비스ì—서 헤드리스 시스템 사용ìžë¡œ ì¹´ë©”ë¼ì— 액세스하ë„ë¡ í—ˆìš©"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ì´ ì•±ì—서 헤드리스 시스템 사용ìžë¡œ ì¹´ë©”ë¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있습니다."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ì§„ë™ ì œì–´"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ì•±ì´ ì§„ë™ì„ ì œì–´í• ìˆ˜ 있ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ì•±ì´ ì§„ë™ ìƒíƒœì— 액세스하ë„ë¡ í—ˆìš©í•©ë‹ˆë‹¤."</string> @@ -810,7 +812,7 @@ <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"화면 ìž ê¸ˆí•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ , ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° íƒœë¸”ë¦¿ì„ ìž ê·¸ê±°ë‚˜ íƒœë¸”ë¦¿ì— ìžˆëŠ” ë°ì´í„°ë¥¼ ëª¨ë‘ ì§€ì›ë‹ˆë‹¤."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"화면 ìž ê¸ˆ í•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° Android TV 기기를 ìž ê·¸ê±°ë‚˜ Android TV ê¸°ê¸°ì˜ ë°ì´í„°ë¥¼ ëª¨ë‘ ì‚ì œí•©ë‹ˆë‹¤."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"화면 ìž ê¸ˆ í•´ì œ 시 ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ë¥¼ ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° ì¸í¬í…Œì¸ë¨¼íЏ ì‹œìŠ¤í…œì„ ìž ê·¸ê±°ë‚˜ ì¸í¬í…Œì¸ë¨¼íЏ ì‹œìŠ¤í…œì˜ ë°ì´í„°ë¥¼ ëª¨ë‘ ì‚ì œí•©ë‹ˆë‹¤."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"화면 ìž ê¸ˆí•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ , ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° íœ´ëŒ€ì „í™”ë¥¼ ìž ê·¸ê±°ë‚˜ íœ´ëŒ€ì „í™”ì— ìžˆëŠ” ë°ì´í„°ë¥¼ ëª¨ë‘ ì§€ì›ë‹ˆë‹¤."</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"화면 ìž ê¸ˆ í•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ , ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° íœ´ëŒ€ì „í™”ë¥¼ ìž ê·¸ê±°ë‚˜ íœ´ëŒ€ì „í™”ì— ìžˆëŠ” ë°ì´í„°ë¥¼ ëª¨ë‘ ì§€ì›ë‹ˆë‹¤."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"화면 ìž ê¸ˆ í•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° íƒœë¸”ë¦¿ì„ ìž ê·¸ê±°ë‚˜ ì´ ì‚¬ìš©ìžì˜ ë°ì´í„°ë¥¼ ëª¨ë‘ ì‚ì œí•©ë‹ˆë‹¤."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"화면 ìž ê¸ˆ í•´ì œ 시 비밀번호를 잘못 ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° Android TV 기기를 ìž ê·¸ê±°ë‚˜ ì‚¬ìš©ìž ë°ì´í„°ë¥¼ ëª¨ë‘ ì‚ì œí•©ë‹ˆë‹¤."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"화면 ìž ê¸ˆ í•´ì œ 시 ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ë¥¼ ìž…ë ¥í•œ 횟수를 모니터ë§í•˜ê³ ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ ìž…ë ¥ 횟수가 너무 ë§Žì€ ê²½ìš° ì¸í¬í…Œì¸ë¨¼íЏ ì‹œìŠ¤í…œì„ ìž ê·¸ê±°ë‚˜ ì´ í”„ë¡œí•„ì˜ ë°ì´í„°ë¥¼ ëª¨ë‘ ì‚ì œí•©ë‹ˆë‹¤."</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 63e4b273ca587cd7a11056f91b44a5bcf871b5f8..d528ee3d9694f8bf3b75c9015fec02ec04f93a39 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Бул артыкчылыктуу тутум колдонмоÑу ÑиÑтеманын камераÑын каалаган убакта колдонуп, Ñүрөткө тартып, видео жаздыра алат. Ошондой Ñле колдонмого android.permission.CAMERA урукÑатын берүү керек"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Колдонмого же кызматка камера ачылып же жабылып жатканда чалууларды кабыл алууга урукÑат берүү."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Бул колдонмо камера ачылып (аны ачып жаткан колдонмо көрÑөтүлгөндө) же жабылып жатканда чалууларды кабыл алат."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"титирөөнү башкаруу"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Колдонмого дирилдегичти көзөмөлдөө мүмкүнчүлүгүн берет."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Колдонмого дирилдөө абалына кирүүгө урукÑат берет."</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 0f8ccf5ee1e40d4fe5985f471bc3271edd68ea6b..8892f60475425f4b0d949f5459194db9a4331937 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ສິດ ຫຼື à»àºàº±àºšàº¥àº°àºšàº»àºšàº™àºµà»‰àºªàº²àº¡àº²àº”ຖ່າàºàº®àº¹àºš à»àº¥àº° ບັນທຶàºàº§àº´àº”ີໂàºà»‚ດàºà»ƒàºŠà»‰àºà»‰àºàº‡àº‚àºàº‡àº¥àº°àºšàº»àºšàº•àºàº™à»ƒàº”àºà»à»„ດ້. ຕ້àºàº‡à»ƒàºŠà»‰àºªàº´àº”àºàº°àº™àº¸àºàº²àº” android.permission.CAMERA ໃຫ້à»àºàº±àºšàº–ືນຳ"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"àºàº°àº™àº¸àºàº²àº”ໃຫ້à»àºàº±àºšàºžàº¥àº´à»€àº„ຊັນ ຫຼື ບà»àº¥àº´àºàº²àº™àº®àº±àºšàºàº²àº™à»€àºàºµà»‰àº™àºàº±àºšàºà»ˆàº½àº§àºàº±àºšàºàº¸àº›àº°àºàºàº™àºà»‰àºàº‡àº–ືàºà»€àº›àºµàº” ຫຼື ປິດໄດ້."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"à»àºàº±àºšàº™àºµà»‰àºªàº²àº¡àº²àº”ຮັບàºàº²àº™à»€àºàºµà»‰àº™àºàº±àºšà»„ດ້ເມື່àºàº¡àºµàºàº¸àº›àº°àºàºàº™àºà»‰àºàº‡à»ƒàº”ຖືàºà»€àº›àºµàº” (ໂດàºà»àºžàº±àºà»€àºàº”à»àºàº±àºšàºžàº¥àº´à»€àº„ຊັນຫàºàº±àº‡) ຫຼື ຖືàºàº›àº´àº”."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"àºàº°àº™àº¸àºàº²àº”ໃຫ້à»àºàº±àºšàºžàº¥àº´à»€àº„ຊັນ ຫຼື ບà»àº¥àº´àºàº²àº™à»€àº‚ົ້າເຖິງàºà»‰àºàº‡à»ƒàº™àº–ານະຜູ້ໃຊ້ລະບົບà»àºšàºšàºšà»à»ˆàº¡àºµàºªà»ˆàº§àº™àº«àº»àº§."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"à»àºàº±àºšàº™àºµà»‰àºªàº²àº¡àº²àº”ເຂົ້າເຖິງàºà»‰àºàº‡à»ƒàº™àº–ານະຜູ້ໃຊ້ລະບົບà»àºšàºšàºšà»à»ˆàº¡àºµàºªà»ˆàº§àº™àº«àº»àº§à»„ດ້."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ຄວບຄຸມàºàº²àº™àºªàº±à»ˆàº™"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"àºàº°àº™àº¸àºàº²àº”ໃຫ້à»àºàº±àºšàº¯àº„ວບຄຸມໂຕສັ່ນ."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"àºàº°àº™àº¸àºàº²àº”ໃຫ້à»àºàº±àºšà»€àº‚ົ້າເຖິງສະຖານະàºàº²àº™àºªàº±à»ˆàº™à»„ດ້."</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 33168458ffb938bce6dae969c5ec43275013c5b1..8b4ff9793a155efd0e5583051f5d1ff207cf32db 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -503,6 +503,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Å i privilegijuota arba sistemos programa gali daryti nuotraukas ir įraÅ¡yti vaizdo įraÅ¡us naudodama sistemos fotoaparatÄ… bet kuriuo metu. Programai taip pat bÅ«tinas leidimas „android.permission.CAMERA“"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Leisti programai ar paslaugai sulaukti atgalinio skambinimo, kai atidaromas ar uždaromas fotoaparatas."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Å i programa gali sulaukti atgalinio skambinimo, kai atidaromas ar uždaromas (kurios nors programos) koks nors fotoaparatas."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Leisti programai ar paslaugai pasiekti vaizdo kamerÄ… kaip sistemos be grafinÄ—s naudotojo sÄ…sajos naudotojui."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Å i programa gali pasiekti vaizdo kamerÄ… kaip sistemos be grafinÄ—s naudotojo sÄ…sajos naudotojas."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"valdyti vibracijÄ…"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Leidžiama programai valdyti vibravimÄ…."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Programai leidžiama pasiekti vibratoriaus bÅ«senÄ…."</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index ab6998cc552febc4e074e31fec630591d21013fc..0b0d5020444480d42b9b96587887ef66f9d3ecf0 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -502,6 +502,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Å Ä« privileģētÄ vai sistÄ“mas lietotne var jebkurÄ brÄ«dÄ« uzņemt attÄ“lus un ierakstÄ«t videoklipus, izmantojot sistÄ“mas kameru. Lietotnei nepiecieÅ¡ama arÄ« atļauja android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Atļaut lietojumprogrammai vai pakalpojumam saņemt atzvanus par kameras ierÄ«Äu atvÄ“rÅ¡anu vai aizvÄ“rÅ¡anu"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Å ajÄ lietotnÄ“ var saņemt atzvanus, ja tiek atvÄ“rta vai aizvÄ“rta jebkÄda kameras ierÄ«ce (atkarÄ«bÄ no lietojumprogrammas)."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolÄ“t vibrosignÄlu"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ä»auj lietotnei kontrolÄ“t vibrosignÄlu."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ä»auj lietotnei piekļūt vibrosignÄla statusam."</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index ae0a0350a34b902ec17a9bab1a601d9342d94cc0..109e967acad4969b72ed5f7fdad185d977d4d1f0 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Оваа привилегирана или ÑиÑтемÑка апликација може да фотографира и да Ñнима видеа Ñо ÑиÑтемÑката камера во Ñекое време. Потребно е апликацијата да ја има и дозволата android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Дозволете апликацијатa или уÑлугата да прима повратни повици за отворањето или затворањето на уредите Ñо камера."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Оваа апликација може да прима повратни повици кога кој било уред Ñо камера Ñе отвора (од некоја апликација) или затвора."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Дозволете апликација или уÑлуга да приÑтапува до камерата како Headless System User."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ðпликацијава може да приÑтапи до камерата како Headless System User."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"контролирај вибрации"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Дозволува апликацијата да ги контролира вибрациите."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Рдозволува на апликацијата да приÑтапи до ÑоÑтојбата на вибрации."</string> @@ -806,11 +808,11 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Дозволува ÑопÑтвеникот да ја ажурира апликацијата што претходно ја инÑталирал без дејÑтво од кориÑникот"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"ПоÑтави правила за лозинката"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"Контролирај ги должината и знаците што Ñе дозволени за лозинки и PIN-броеви за отклучување екран."</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"Следи ги обидите за отклучување на екранот"</string> - <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"ПоÑматрај го бројот на неточни лозинки што Ñе напишани за да Ñе отклучи екранот и заклучи го таблетот или избриши ги Ñите податоци од него ако бидат напишани премногу неточни лозинки."</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"Следење на обидите за отклучување на екранот"</string> + <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Го Ñледи бројот на неточни лозинки што Ñе внеÑени за отклучување на екранот и го заклучува таблетот или ги брише Ñите податоци од него ако Ñе внеÑат голем број неточни лозинки."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Го Ñледи бројот на погрешно внеÑени лозинки при отклучување на екранот и го заклучува уредот Android TV или ги брише Ñите податоци од уредот Android TV доколку Ñе внеÑени премногу погрешни лозинки."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Ðабљудувај го бројот на погрешно внеÑени лозинки при отклучување на екранот и заклучи го ÑиÑтемот за информации и забава или избриши ги Ñите негови податоци доколку Ñе внеÑени премногу погрешни лозинки."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"ПоÑматрај го бројот на неточни лозинки што Ñе напишани за да Ñе отклучи екранот и заклучи го телефонот или избриши ги Ñите податоци од него ако бидат напишани премногу неточни лозинки."</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Го Ñледи бројот на неточни лозинки што Ñе внеÑени за отклучување на екранот и го заклучува телефонот или ги брише Ñите податоци од него ако Ñе внеÑат голем број неточни лозинки."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Ðабљудувај го бројот на погрешно внеÑени лозинки при отклучување на екранот и заклучи го таблетот или избриши ги Ñите податоци од овој кориÑник доколку Ñе внеÑени премногу погрешни лозинки."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Го Ñледи бројот на погрешно внеÑени лозинки при отклучување на екранот и го заклучува уредот Android TV или ги брише Ñите податоци од овој кориÑник доколку Ñе внеÑени премногу погрешни лозинки."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"Ðабљудувај го бројот на погрешно внеÑени лозинки при отклучување на екранот и заклучи го ÑиÑтемот за информации и забава или избриши ги Ñите податоци од овој профил доколку Ñе внеÑени премногу погрешни лозинки."</string> @@ -819,11 +821,11 @@ <string name="policydesc_resetPassword" msgid="4626419138439341851">"Промени го заклучувањето на екранот."</string> <string name="policylab_forceLock" msgid="7360335502968476434">"Заклучи го екранот"</string> <string name="policydesc_forceLock" msgid="1008844760853899693">"Контролирај како и кога Ñе заклучува екранот."</string> - <string name="policylab_wipeData" msgid="1359485247727537311">"Избриши ги Ñите податоци"</string> + <string name="policylab_wipeData" msgid="1359485247727537311">"Бришење на Ñите податоци"</string> <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"Избриши ги податоците во таблетот без предупредување Ñо реÑетирање на фабрички податоци."</string> <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"Ги брише податоците на вашиот уред Android TV без предупредување, така што ќе изврши реÑетирање на фабричките податоци."</string> <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"Избриши ги податоците во ÑиÑтемот за информации и забава без предупредување Ñо реÑетирање на фабрички податоци."</string> - <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"Избриши ги податоците во телефонот без предупредување Ñо реÑетирање на фабрички податоци."</string> + <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"Ги брише податоците од телефонот без предупредување вршејќи реÑетирање на фабрички податоци."</string> <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"Избриши ги податоците на профилот"</string> <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"Избриши ги податоците на кориÑникот"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"Избриши ги податоците на овој кориÑник на таблетот без предупредување."</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 80e80618185e5cb35d18e94f2d43d06827b41bc6..9ccf8b51598502c6cd95cd642878e56efad1cc7c 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"സിസàµâ€Œà´±àµà´±à´‚ à´•àµà´¯à´¾à´®à´± ഉപയോഗിചàµà´šàµ à´à´¤àµ സമയതàµà´¤àµà´‚ à´šà´¿à´¤àµà´°à´™àµà´™à´³àµ†à´Ÿàµà´•àµà´•ാനàµà´‚ വീഡിയോകൾ റെകàµà´•ോർഡൠചെയàµà´¯à´¾à´¨àµà´‚ à´ˆ വിശേഷാധികാര à´…à´²àµà´²àµ†à´™àµà´•ിൽ സിസàµâ€Œà´±àµà´±à´‚ ആപàµà´ªà´¿à´¨àµ à´•à´´à´¿à´¯àµà´‚. ആപàµà´ªà´¿à´²àµà´‚ android.permission.CAMERA à´…à´¨àµà´®à´¤à´¿ ഉണàµà´Ÿà´¾à´¯à´¿à´°à´¿à´•àµà´•ണം"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"à´•àµà´¯à´¾à´®à´±à´¯àµà´³àµà´³ ഉപകരണങàµà´™àµ¾ ഓണാകàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ†à´¯àµ‹ à´…à´Ÿà´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ†à´¯àµ‹ à´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ കോൾബാകàµà´•àµà´•ൾ à´¸àµà´µàµ€à´•à´°à´¿à´•àµà´•ാൻ ആപàµà´ªà´¿à´¨àµ†à´¯àµ‹ സേവനതàµà´¤àµ†à´¯àµ‹ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´•."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ à´•àµà´¯à´¾à´®à´± ഉപകരണം à´¤àµà´±à´•àµà´•àµà´®àµà´ªàµ‹à´´àµ‹ (à´à´¤àµ ആപàµà´ªàµ ഉപയോഗിചàµà´šàµà´‚) à´…à´Ÿà´¯àµà´•àµà´•àµà´®àµà´ªàµ‹à´´àµ‹ à´ˆ ആപàµà´ªà´¿à´¨àµ കോൾബാകàµà´•àµà´•ൾ à´¸àµà´µàµ€à´•à´°à´¿à´•àµà´•ാനാവàµà´‚."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ഹെഡàµâ€Œà´²àµ†à´¸àµ സിസàµâ€Œà´±àµà´±à´‚ യൂസറായി à´•àµà´¯à´¾à´®à´± ആകàµâ€Œà´¸à´¸àµ ചെയàµà´¯à´¾àµ» ഒരൠആപàµà´ªà´¿à´¨àµ†à´¯àµ‹ സേവനതàµà´¤àµ†à´¯àµ‹ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´•."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ഹെഡàµâ€Œà´²àµ†à´¸àµ സിസàµâ€Œà´±àµà´±à´‚ യൂസറായി à´•àµà´¯à´¾à´®à´± ആകàµâ€Œà´¸à´¸àµ ചെയàµà´¯à´¾àµ» à´ˆ ആപàµà´ªà´¿à´¨àµ à´•à´´à´¿à´¯àµà´‚."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"വൈബàµà´°àµ‡à´±àµà´±àµà´šàµ†à´¯àµà´¯àµ½ നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´•"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"വൈബàµà´°àµ‡à´±àµà´±àµ¼ നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´…à´ªàµà´²à´¿à´•àµà´•േഷനെ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨àµ."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"വൈബàµà´°àµ‡à´±àµà´±àµ ചെയàµà´¯àµ½ ആകàµâ€Œà´¸à´¸àµ ചെയàµà´¯à´¾àµ» ആപàµà´ªà´¿à´¨àµ† à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨àµ."</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 7906fc1e255f33ea54f336cd3192647e9263722a..20de779773d74f1c3039a7c148395ab64db40280 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ÐÐ½Ñ Ñ…Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð³Ð´Ñан ÑÑвÑл ÑиÑтемийн апп нь ÑиÑтемийн камер ашиглан Ñмар ч үед зураг авч, видео бичих боломжтой. Мөн түүнчлÑн, апп нь android.permission.CAMERA-н зөвшөөрөлтÑй байх шаардлагатай"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ÐппликÑйшн ÑÑвÑл үйлчилгÑÑнд камерын төхөөрөмжүүдийг нÑÑж ÑÑвÑл хааж байгаа тухай залгаÑан дуудлага хүлÑÑн авахыг зөвшөөрөх."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ÐÐ½Ñ Ð°Ð¿Ð¿ нь дурын камерын төхөөрөмжийг нÑÑÑ… (Ñмар аппликÑйшнÑÑÑ€ болох) ÑÑвÑл хаах үед буцааж залгаÑан дуудлага хүлÑÑн авах боломжтой."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"чичиргÑÑг удирдах"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ðпп нь чичиргÑÑг удирдах боломжтой."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ðппыг чичиргÑÑний төлөвт хандахыг зөвшөөрдөг."</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 74990485c63eafbecf462e644504baeb8ae3ee8f..ebabd211dbbfd28403be3a01f1fd0235dc629b8e 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"हे विशेषाधिकृत किंवा सिसà¥à¤Ÿà¤® ॲप कधीही सिसà¥à¤Ÿà¤® कॅमेरा वापरून फोटो आणि वà¥à¤¹à¤¿à¤¡à¤¿à¤“ रेकॉरà¥à¤¡ करू शकते. ॲपकडे android.permission.CAMERA परवानगी असणà¥à¤¯à¤¾à¤šà¥€à¤¦à¥‡à¤–ील आवशà¥à¤¯à¤•ता आहे"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"à¤à¤–ादà¥à¤¯à¤¾ अâ€à¥…पà¥à¤²à¤¿à¤•ेशन किंवा सेवेला कॅमेरा डिवà¥à¤¹à¤¾à¤‡à¤¸ सà¥à¤°à¥‚ किंवा बंद केलà¥à¤¯à¤¾à¤šà¥€ कॉलबॅक मिळवणà¥à¤¯à¤¾à¤šà¥€ अनà¥à¤®à¤¤à¥€ दà¥à¤¯à¤¾."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"कोणतेही कॅमेरा डिवà¥à¤¹à¤¾à¤‡à¤¸ (कोणतà¥à¤¯à¤¾ अâ€à¥…पà¥à¤²à¤¿à¤•ेशनने) सà¥à¤°à¥‚ किंवा बंद केले जाते तेवà¥à¤¹à¤¾ हे ॲप कॉलबॅक मिळवू शकते."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"अâ€à¥…पà¥à¤²à¤¿à¤•ेशन किंवा सेवेला हेडलेस सिसà¥à¤Ÿà¥€à¤® वापरकरà¥à¤¤à¤¾ मà¥à¤¹à¤£à¥‚न कॅमेरा अâ€à¥…कà¥à¤¸à¥‡à¤¸ करणà¥à¤¯à¤¾à¤šà¥€ अनà¥à¤®à¤¤à¥€ दà¥à¤¯à¤¾."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"हे अâ€à¥…प हेडलेस सिसà¥à¤Ÿà¥€à¤® वापरकरà¥à¤¤à¤¾ मà¥à¤¹à¤£à¥‚न कॅमेरा अâ€à¥…कà¥à¤¸à¥‡à¤¸ करू शकते."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"वà¥à¤¹à¤¾à¤¯à¤¬à¥à¤°à¥‡à¤Ÿ नियंतà¥à¤°à¤¿à¤¤ करा"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"अâ€à¥…प ला वà¥à¤¹à¤¾à¤¯à¤¬à¥à¤°à¥‡à¤Ÿà¤° नियंतà¥à¤°à¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी अनà¥à¤®à¤¤à¥€ देते."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"अâ€à¥…पला वà¥à¤¹à¤¾à¤¯à¤¬à¥à¤°à¥‡à¤Ÿà¤° सà¥à¤¥à¤¿à¤¤à¥€à¤šà¤¾ अâ€à¥…कà¥à¤¸à¥‡à¤¸ करणà¥à¤¯à¤¾à¤šà¥€ अनà¥à¤®à¤¤à¥€ देते."</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 3faeb7f65b39c3e49c46c840f07ea533874e20a8..3d3fc7c83bd8d17fb509760c80065bf794d4aaa6 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Apl terlindung atau apl sistem ini boleh mengambil gambar dan merakam video menggunakan kamera sistem pada bila-bila masa. Apl juga perlu mempunyai kebenaran android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Benarkan aplikasi atau perkhidmatan menerima panggilan balik tentang peranti kamera yang dibuka atau ditutup."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Apl ini boleh menerima panggilan balik apabila mana-mana peranti kamera dibuka (oleh aplikasi) atau ditutup."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Benarkan aplikasi atau perkhidmatan mengakses kamera sebagai Pengguna Sistem Tanpa Kepala."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Apl ini boleh mengakses kamera sebagai Pengguna Sistem Tanpa Kepala."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kawal getaran"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Membenarkan apl mengawal penggetar."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Membenarkan apl mengakses keadaan penggetar."</string> @@ -810,7 +812,7 @@ <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Memantau bilangan kata laluan yang tersilap ditaip apabila membuka skrin, dan mengunci tablet atau memadam semua data tablet jika terlalu banyak kesilapan menaip kata laluan."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Pantau bilangan kata laluan salah yang ditaip semasa membuka kunci skrin, dan kunci peranti Android TV anda atau padamkan semua data peranti Android TV jika terlalu banyak kata laluan yang salah ditaip."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Memantau bilangan kata laluan tidak betul yang ditaip semasa membuka kunci skrin dan mengunci sistem maklumat hibur atau memadam semua data sistem maklumat hibur jika terlalu banyak kata laluan yang tidak betul ditaip."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Memantau bilangan kata laluan salah yang ditaip semasa membuka skrin, dan mengunci telefon atau memadam semua data telefon jika terlalu banyak kata laluan salah ditaip."</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Memantau bilangan kata laluan salah yang ditaip semasa membuka skrin, dan mengunci telefon atau memadamkan semua data telefon jika terlalu banyak kata laluan salah ditaip."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Pantau bilangan kata laluan tidak betul yang ditaip semasa membuka kunci skrin dan kunci tablet atau padam semua data pengguna ini jika terlalu banyak kata laluan yang tidak betul ditaip."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Pantau bilangan kata laluan salah yang ditaip semasa membuka kunci skrin, dan kunci peranti Android TV anda atau padamkan semua data pengguna ini jika terlalu banyak kata laluan yang salah ditaip."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"Memantau bilangan kata laluan tidak betul yang ditaip semasa membuka kunci skrin dan mengunci sistem maklumat hibur atau memadam semua data profil ini jika terlalu banyak kata laluan yang tidak betul ditaip."</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 5752fa3870da13f2d8a8b0b5c284cc2076e42433..39dd04316fc70e3ddd55843fa46027b194bfccdd 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -238,7 +238,7 @@ <string name="reboot_safemode_title" msgid="5853949122655346734">"safe mode ဖြင့် ပြန်လည် စ á€á€„်ရန်"</string> <string name="reboot_safemode_confirm" msgid="1658357874737219624">"safe mode ကá€á€¯ ပြန်လည် စá€á€„် မလား? ဒီလá€á€¯ စá€á€„်á€á€¼á€„်းဟာ သင် သွင်းထားသော á€á€á€á€šá€•ါá€á€® အပလီကေးရှင်းများအား ရပ်ဆá€á€¯á€„်းထားပါမည်ዠပုံမှန်အá€á€á€¯á€„်း ပြန်စလျှင် ထá€á€¯á€¡á€›á€¬á€™á€»á€¬á€¸ ပြန်လည် ရောက်ရှá€á€œá€¬á€•ါမည်á‹"</string> <string name="recent_tasks_title" msgid="8183172372995396653">"လá€á€ºá€á€œá€±á€¬"</string> - <string name="no_recent_tasks" msgid="9063946524312275906">"မကြာမီá€á€¯á€”်းက အက်ပ်များ မရှá€á€•ါ"</string> + <string name="no_recent_tasks" msgid="9063946524312275906">"မကြာသေးမီက အက်ပ်များ မရှá€á€•ါ"</string> <string name="global_actions" product="tablet" msgid="4412132498517933867">"Tabletဆá€á€¯á€„်ရာရွေးá€á€»á€šá€ºá€™á€¾á€¯á€™á€»á€¬á€¸"</string> <string name="global_actions" product="tv" msgid="3871763739487450369">"Android TV ရွေးá€á€»á€šá€ºá€…ရာများ"</string> <string name="global_actions" product="default" msgid="6410072189971495460">"ဖုန်းဆá€á€¯á€„်ရာရွေးá€á€»á€šá€ºá€™á€¾á€¯á€™á€»á€¬á€¸"</string> @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ဤá€á€½á€„့်ပြုထားသည့် သá€á€¯á€·á€™á€Ÿá€¯á€á€º စနစ်အက်ပ်က စနစ်ကင်မရာအသုံးပြုပြီး ဓာá€á€ºá€•ုံနှင့် ဗီဒီယá€á€¯á€™á€»á€¬á€¸á€€á€á€¯ အá€á€»á€á€”်မရွေး ရá€á€¯á€€á€ºá€€á€°á€¸á€”á€á€¯á€„်သည်ዠအက်ပ်ကလည်း android.permission.CAMERA á€á€½á€„့်ပြုá€á€»á€€á€º ရှá€á€›á€•ါမည်"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ကင်မရာစက်များ ပွင့်နေá€á€¼á€„်း သá€á€¯á€·á€™á€Ÿá€¯á€á€º ပá€á€á€ºá€”ေá€á€¼á€„်းနှင့် ပá€á€ºá€žá€€á€ºá€•ြီး ပြန်လည်á€á€±á€«á€ºá€†á€á€¯á€™á€¾á€¯á€™á€»á€¬á€¸ ရယူရန် အပလီကေးရှင်း သá€á€¯á€·á€™á€Ÿá€¯á€á€º á€á€”်ဆောင်မှုကá€á€¯ á€á€½á€„့်ပြုá€á€¼á€„်းá‹"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"(မည်သည့် အပလီကေးရှင်းကြောင့်) ကင်မရာစက်á€á€…်á€á€¯á€á€¯ ပွင့်နေသည့်အá€á€« သá€á€¯á€·á€™á€Ÿá€¯á€á€º ပá€á€á€ºá€”ေသည့်အá€á€« ဤအက်ပ်က ပြန်လည်á€á€±á€«á€ºá€†á€á€¯á€™á€¾á€¯á€™á€»á€¬á€¸ ရယူနá€á€¯á€„်သည်á‹"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"‘မမြင်နá€á€¯á€„်သော စနစ်အသုံးပြုသူ’ အဖြစ် ကင်မရာသုံးရန် အပလီကေးရှင်း (သá€á€¯á€·) á€á€”်ဆောင်မှုကá€á€¯ á€á€½á€„့်ပြုပါá‹"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ဤအက်ပ်သည် ‘မမြင်နá€á€¯á€„်သော စနစ်အသုံးပြုသူ’ အဖြစ် ကင်မရာသုံးနá€á€¯á€„်သည်á‹"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"á€á€¯á€”်á€á€¯á€”်မှုအား ထá€á€”်းá€á€»á€¯á€•်á€á€¼á€„်း"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"အက်ပ်အား á€á€¯á€”်á€á€«á€…က်ကá€á€¯ ထá€á€”်းá€á€»á€¯á€•်á€á€½á€„့် ပြုသည်á‹"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"အက်ပ်ကá€á€¯ á€á€¯á€”်á€á€«á€™á€¾á€¯á€¡á€á€¼á€±á€¡á€”ေအား သုံးá€á€½á€„့်ပေးပါá‹"</string> @@ -2135,7 +2137,7 @@ <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"ဤအက်ပ်ကá€á€¯ အသံဖမ်းá€á€½á€„့် ပေးမထားသော်လည်း áŽá€„်းသည် ဤ USB စက်ပစ္စည်းမှá€á€…်ဆင့် အသံများကá€á€¯ ဖမ်းယူနá€á€¯á€„်ပါသည်á‹"</string> <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"ပင်မစာမျက်နှာ"</string> <string name="accessibility_system_action_back_label" msgid="4205361367345537608">"နောက်သá€á€¯á€·"</string> - <string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"လá€á€ºá€á€œá€±á€¬á€žá€¯á€¶á€¸ အက်ပ်များ"</string> + <string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"မကြာသေးမီက အက်ပ်များ"</string> <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"အကြောင်းကြားá€á€»á€€á€ºá€™á€»á€¬á€¸"</string> <string name="accessibility_system_action_quick_settings_label" msgid="4583900123506773783">"အမြန် ဆက်á€á€„်များ"</string> <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"ပါá€á€« ဒá€á€¯á€„်ယာလော့"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 0cc55e48873f9d746775f73b2a41b292fa2ed6aa..5b1f77c9a0686c10c43529cdc08be1022148de2d 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Denne privilegerte appen eller systemappen kan nÃ¥r som helst ta bilder og spille inn videoer med et systemkamera. Dette krever at appen ogsÃ¥ har tillatelsen android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Tillat at en app eller tjeneste mottar tilbakekallinger om kameraenheter som Ã¥pnes eller lukkes."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Denne appen kan motta tilbakekallinger nÃ¥r en kameraenhet blir Ã¥pnet (av hvilken app) eller lukket."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Tillat at en app eller tjeneste bruker kameraet som en hodeløs systembruker."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Denne appen kan bruke kameraet som en hodeløs systembruker."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrollere vibreringen"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Lar appen kontrollere vibreringsfunksjonen."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Gir appen tilgang til vibreringstilstanden."</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index e38898eb468bbde31f57bf9cc741fd78ec936a7c..ad018dd6b05e6eaa836fe60953e7dd5dbac77e92 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -392,7 +392,7 @@ <string name="permlab_killBackgroundProcesses" msgid="6559320515561928348">"à¤à¤ªà¤¹à¤°à¥‚ बनà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="permdesc_killBackgroundProcesses" msgid="2357013583055434685">"à¤à¤ªà¤²à¤¾à¤ˆ अनà¥à¤¯ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—हरूको पृषà¥à¤ à¤à¥‚मि पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾à¤¹à¤°à¥‚ बनà¥à¤¦ गरà¥à¤¨ अनà¥à¤®à¤¤à¤¿ दिनà¥à¤›à¥¤ यसले अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚लाई चलà¥à¤¨à¤¬à¤¾à¤Ÿ रोकà¥à¤¨ सकà¥à¤¦à¤›à¥¤"</string> <string name="permlab_systemAlertWindow" msgid="5757218350944719065">"यो à¤à¤ª अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚माथि देखा परà¥à¤¨ सकà¥à¤›"</string> - <string name="permdesc_systemAlertWindow" msgid="1145660714855738308">"यो à¤à¤ª अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚माथि वा सà¥à¤•à¥à¤°à¤¿à¤¨à¤•ा अनà¥à¤¯ à¤à¤¾à¤—हरूमा देखा परà¥à¤¨ सकà¥à¤›à¥¤ यसले à¤à¤ªà¤•ो सामानà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—मा अवरोध पà¥à¤°à¥à¤¯à¤¾à¤‰à¤¨ सकà¥à¤› र अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚ देखा परà¥à¤¨à¥‡ तरिकालाई परिवरà¥à¤¤à¤¨ गरà¥à¤¨ सकà¥à¤›à¥¤"</string> + <string name="permdesc_systemAlertWindow" msgid="1145660714855738308">"यो à¤à¤ª अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚माथि वा सà¥à¤•à¥à¤°à¤¿à¤¨à¤•ा अनà¥à¤¯ à¤à¤¾à¤—हरूमा देखा परà¥à¤¨ सकà¥à¤›à¥¤ यसले à¤à¤ªà¤•ो सामानà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—मा अवरोध पà¥à¤°à¥â€à¤¯à¤¾à¤‰à¤¨ सकà¥à¤› र अनà¥à¤¯ à¤à¤ªà¤¹à¤°à¥‚ देखा परà¥à¤¨à¥‡ तरिकालाई परिवरà¥à¤¤à¤¨ गरà¥à¤¨ सकà¥à¤›à¥¤"</string> <string name="permlab_hideOverlayWindows" msgid="6382697828482271802">"à¤à¤ªà¤•ा अनà¥à¤¯ ओà¤à¤°à¤²à¥‡à¤¹à¤°à¥‚ लà¥à¤•ाउने अनà¥à¤®à¤¤à¤¿"</string> <string name="permdesc_hideOverlayWindows" msgid="5660242821651958225">"यो à¤à¤ªà¤²à¥‡ सिसà¥à¤Ÿà¤®à¤²à¤¾à¤ˆ à¤à¤ªà¤¹à¤°à¥‚बाट उतà¥à¤ªà¤¨à¥à¤¨ हà¥à¤¨à¥‡ ओà¤à¤°à¤²à¥‡à¤¹à¤°à¥‚ यो à¤à¤ªà¤•ो माथि नदेखिने गरी लà¥à¤•ाउन अनà¥à¤°à¥‹à¤§ गरà¥à¤¨ सकà¥à¤›à¥¤"</string> <string name="permlab_runInBackground" msgid="541863968571682785">"पृषà¥à¤ à¤à¥‚मिमा चलाउनà¥à¤¹à¥‹à¤¸à¥"</string> @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"पà¥à¤°à¤£à¤¾à¤²à¥€à¤•ो यस विशेषाधिकार पà¥à¤°à¤¾à¤ªà¥à¤¤ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ले जà¥à¤¨à¤¸à¥à¤•ै बेला पà¥à¤°à¤£à¤¾à¤²à¥€à¤•ो कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— गरी फोटो खिचà¥à¤¨ र à¤à¤¿à¤¡à¤¿à¤¯à¥‹ रेकरà¥à¤¡ गरà¥à¤¨ सकà¥à¤›à¥¤ à¤à¤ªà¤¸à¤à¤— पनि android.permission.CAMERA पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥‡ अनà¥à¤®à¤¤à¤¿ हà¥à¤¨à¥ परà¥à¤›"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"कà¥à¤¨à¥ˆ à¤à¤ª वा सेवालाई खोलिà¤à¤¦à¥ˆ वा बनà¥à¤¦ गरिà¤à¤¦à¥ˆ गरेका कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾ यनà¥à¤¤à¥à¤°à¤¹à¤°à¥‚का बारेमा कलबà¥à¤¯à¤¾à¤• पà¥à¤°à¤¾à¤ªà¥à¤¤ गरà¥à¤¨à¥‡ अनà¥à¤®à¤¤à¤¿ दिनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"कà¥à¤¨à¥ˆ कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾ यनà¥à¤¤à¥à¤° खोलिà¤à¤¦à¤¾ (कà¥à¤¨ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ले खोलेको à¤à¤¨à¥à¤¨à¥‡ बारेमा) वा बनà¥à¤¦ गरिà¤à¤¦à¤¾ यो à¤à¤ªà¤²à¥‡ कलबà¥à¤¯à¤¾à¤• पà¥à¤°à¤¾à¤ªà¥à¤¤ गरà¥à¤¨ सकà¥à¤›à¥¤"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"कà¥à¤¨à¥ˆ à¤à¤ª वा सेवालाई हेडलेस सिसà¥à¤Ÿà¤®à¤•ो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•ा रूपमा कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾ à¤à¤•à¥à¤¸à¥‡à¤¸ गरà¥à¤¨à¥‡ अनà¥à¤®à¤¤à¤¿ दिनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"यो à¤à¤ªà¤²à¥‡ हेडलेस सिसà¥à¤Ÿà¤®à¤•ो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•ा रूपमा कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾ à¤à¤•à¥à¤¸à¥‡à¤¸ गरà¥à¤¨ सकà¥à¤›à¥¤"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"कमà¥à¤ªà¤¨ नियनà¥à¤¤à¥à¤°à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"à¤à¤ªà¤²à¤¾à¤ˆ à¤à¤¾à¤‡à¤¬à¥à¤°à¥‡à¤Ÿà¤° नियनà¥à¤¤à¥à¤°à¤£ गरà¥à¤¨ अनà¥à¤®à¤¤à¤¿ दिनà¥à¤›à¥¤"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"यो à¤à¤ªà¤²à¤¾à¤ˆ कमà¥à¤ªà¤¨à¤•ो सà¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾à¤¥à¤¿ पहà¥à¤à¤š राखà¥à¤¨ दिनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> @@ -810,7 +812,7 @@ <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ गलत पासवरà¥à¤¡ टाइप à¤à¤à¤•ो संखà¥à¤¯à¤¾ निरीकà¥à¤·à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र यदि निकै धेरै गलत पासवरà¥à¤¡à¤¹à¤°à¥‚ टाइप à¤à¤à¤•ा छन à¤à¤¨à¥‡ टà¥à¤¯à¤¾à¤¬à¥à¤²à¥‡à¤Ÿ लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा टà¥à¤¯à¤¾à¤¬à¥à¤²à¥‡à¤Ÿà¤•ा सबै डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ गलत पासवरà¥à¤¡ टाइप गरेको सङà¥à¤–à¥à¤¯à¤¾ निरीकà¥à¤·à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥, र धेरै पटक गलत पासवरà¥à¤¡à¤¹à¤°à¥‚ टाइप गरिà¤à¤•ो खणà¥à¤¡à¤®à¤¾ आफà¥à¤¨à¥‹ Android टिà¤à¥€ यनà¥à¤¤à¥à¤° लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा डिà¤à¤¾à¤‡à¤¸à¤®à¤¾ à¤à¤à¤•ो समà¥à¤ªà¥‚रà¥à¤£ डेटा मेटाउनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ कति पटक गलत पासवरà¥à¤¡ टाइप गरिनà¥à¤› à¤à¤¨à¥à¤¨à¥‡ कà¥à¤°à¤¾ निगरानी गरियोसॠर अतà¥à¤¯à¤¨à¥à¤¤à¥ˆ धेरै पटक गलत पासवरà¥à¤¡ टाइप गरिà¤à¤•ा खणà¥à¤¡à¤®à¤¾ यो इनà¥à¤«à¥‹à¤Ÿà¥‡à¤¨à¤®à¥‡à¤¨à¥à¤Ÿ पà¥à¤°à¤£à¤¾à¤²à¥€ लक गरियोसॠवा यस इनà¥à¤«à¥‹à¤Ÿà¥‡à¤¨à¤®à¥‡à¤¨à¥à¤Ÿ पà¥à¤°à¤£à¤¾à¤²à¥€à¤•ा सबै डेटा मेटाइयोसà¥à¥¤"</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"सà¥à¤•à¥à¤°à¤¿à¤¨à¤…नलक गरà¥à¤¦à¤¾ गलत पासवरà¥à¤¡ टाइप à¤à¤à¤•ो संखà¥à¤¯à¤¾ निरीकà¥à¤·à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र यदि निकै धेरै गलत पासवरà¥à¤¡à¤¹à¤°à¥‚ टाइप à¤à¤à¤•ा छन à¤à¤¨à¥‡ फोन लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा फोनका सबै डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ कति पटक गलत पासवरà¥à¤¡ टाइप à¤à¤à¤•ो छ हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र निकै धेरै पटक गलत पासवरà¥à¤¡ टाइप à¤à¤à¤•ो à¤à¤¨à¥‡ फोन लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा फोनका सबै डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ गलत पासवरà¥à¤¡ टाइप संखà¥à¤¯à¤¾ अनà¥à¤—मन गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥, र यदि निकै धेरै गलत पासवरà¥à¤¡à¤¹à¤°à¥‚ टाइप गरिà¤à¤®à¤¾ टà¥à¤¯à¤¾à¤¬à¥à¤²à¥‡à¤Ÿ लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•ो डेटा मेटाउनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ गलत पासवरà¥à¤¡ टाइप गरेको सङà¥à¤–à¥à¤¯à¤¾ निरीकà¥à¤·à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥, र धेरै पटक गलत पासवरà¥à¤¡à¤¹à¤°à¥‚ टाइप गरिà¤à¤•ो खणà¥à¤¡à¤®à¤¾ आफà¥à¤¨à¥‹ Android टिà¤à¥€ यनà¥à¤¤à¥à¤° लक गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•ो समà¥à¤ªà¥‚रà¥à¤£ डेटा मेटाउनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"सà¥à¤•à¥à¤°à¤¿à¤¨ अनलक गरà¥à¤¦à¤¾ कति पटक गलत पासवरà¥à¤¡ टाइप गरिनà¥à¤› à¤à¤¨à¥à¤¨à¥‡ कà¥à¤°à¤¾ निगरानी गरियोसॠर अतà¥à¤¯à¤¨à¥à¤¤à¥ˆ धेरै पटक गलत पासवरà¥à¤¡ टाइप गरिà¤à¤•ा खणà¥à¤¡à¤®à¤¾ यो इनà¥à¤«à¥‹à¤Ÿà¥‡à¤¨à¤®à¥‡à¤¨à¥à¤Ÿ पà¥à¤°à¤£à¤¾à¤²à¥€ लक गरियोसॠवा यस पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤•ा सबै डेटा मेटाइयोसà¥à¥¤"</string> @@ -820,10 +822,10 @@ <string name="policylab_forceLock" msgid="7360335502968476434">"सà¥à¤•à¥à¤°à¤¿à¤¨ लक गरà¥à¤¨à¥‡"</string> <string name="policydesc_forceLock" msgid="1008844760853899693">"कसरी र कहिले सà¥à¤•à¥à¤°à¤¿à¤¨ लक गरà¥à¤¨à¥‡ à¤à¤¨à¥à¤¨à¥‡ कà¥à¤°à¤¾ सेट गरà¥à¤¨"</string> <string name="policylab_wipeData" msgid="1359485247727537311">"सबै डेटा मेटà¥à¤¨à¥‡"</string> - <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"à¤à¤‰à¤Ÿà¤¾ फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¤¿ डेटा रिसेट गरेर चेतावनी नआउà¤à¤¦à¥ˆ टà¥à¤¯à¤¾à¤¬à¤²à¥à¤Ÿà¤•ो डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> + <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¥‚ी रिसेट गरेर चेतावनी नआउà¤à¤¦à¥ˆ टà¥à¤¯à¤¾à¤¬à¤²à¥à¤Ÿà¤•ो डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¥€ डेटा रिसेट गरेर चेतावनी नदिइकन आफà¥à¤¨à¥‹ Android टिà¤à¥€ डिà¤à¤¾à¤‡à¤¸à¤•ो डेटा मेटाउनà¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"यो इनà¥à¤«à¥‹à¤Ÿà¥‡à¤¨à¤®à¥‡à¤¨à¥à¤Ÿ पà¥à¤°à¤£à¤¾à¤²à¥€à¤•ो डेटा कà¥à¤¨à¥ˆ चेतावनीविनै फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¥€ डेटा रिसेट गरेर मेटाइयोसà¥à¥¤"</string> - <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"à¤à¤‰à¤Ÿà¤¾ फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¤¿ डेटा रिसेट गरेर चेतावनी नदिइकन फोनको डेटा मेटà¥à¤¨à¥¤"</string> + <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"फà¥à¤¯à¤¾à¤•à¥à¤Ÿà¥à¤°à¥‚ी रिसेट गरेर चेतावनी नदिइकन फोनको डेटा मेटà¥à¤¨à¥¤"</string> <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² डेटा मेटाइयोसà¥"</string> <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"चेतावनी बिना यो टà¥à¤¯à¤¾à¤¬à¥à¤²à¥‡à¤Ÿà¤®à¤¾ यस पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•ो डेटा मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 7d48a017b1be5dea630e7665cadc7b017eeeea2e..50e261fd3bbc55802fc383700b26ba92787b2178 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Deze gemachtigde app of systeem-app kan op elk gewenst moment foto\'s maken en video\'s opnemen met een systeemcamera. De app moet ook het recht android.permission.CAMERA hebben."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Een app of service toestaan callbacks te ontvangen over camera-apparaten die worden geopend of gesloten."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Deze app kan callbacks ontvangen als een camera-apparaat wordt geopend (en door welke app) of gesloten."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Toestaan dat een app of service toegang tot de camera heeft als gebruiker van een systeem zonder interface."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Deze app heeft toegang tot de camera als gebruiker van een systeem zonder interface."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"trilling beheren"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Hiermee kan de app de trilstand beheren."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Hiermee heeft de app toegang tot de status van de trilstand."</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 64736e556fbb6a6c40e6f1775576b162c01cb10d..898fab2c9323dac24d2b91145e43134410476300 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ବିଶà‡à¬· ଅଧିକାର ଥିବା à¬à¬¹à¬¿ ଆପà କିମàବା ସିଷàଟମà ଆପà à¬¯à‡ à¬•àŒà¬£à¬¸à¬¿ ସମàŸà¬°à‡ à¬à¬• ସିଷàଟମà କààŸà¬¾à¬®à‡à¬°à¬¾ ବààŸà¬¬à¬¹à¬¾à¬° କରି ଛବି ଉଠାଇପାରିବ à¬à¬¬à¬‚ à¬à¬¿à¬¡à¬¿à¬“ ରà‡à¬•ରàଡ କରିପାରିବ। à¬†à¬ªà¬°à‡ à¬®à¬§ààŸ android.permission.CAMERA ଅନàମତି ଆବଶààŸà¬•"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"କààŸà¬¾à¬®à‡à¬°à¬¾ ଡିà¬à¬¾à¬‡à¬¸à¬—àଡ଼ିକ ଖà‹à¬²à¬¿à¬¬à¬¾ କିମàବା ବନàଦ କରିବା ବିଷàŸà¬°à‡ କଲବààŸà¬¾à¬•ଗàଡ଼ିକ ପାଇବାକà à¬à¬• ଆପàଲିକà‡à¬¸à¬¨à କିମàବା ସà‡à¬¬à¬¾à¬•à ଅନàମତି ଦିଅନàତà।"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"à¬¯à‡ à¬•àŒà¬£à¬¸à¬¿ କààŸà¬¾à¬®à‡à¬°à¬¾ ଡିà¬à¬¾à¬‡à¬¸à ଖà‹à¬²à¬¾à¬—à¬²à‡ (କà‡à¬‰à¬ ଆପàଲିକà‡à¬¸à¬¨à ଦàà±à¬¾à¬°à¬¾) କିମàବା ବନàଦ à¬•à¬°à¬¾à¬—à¬²à‡ à¬à¬¹à¬¿ ଆପà କଲବààŸà¬¾à¬•à ପାଇପାରିବ।"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ହà‡à¬¡à¬²à‡à¬¸ ସିଷàଟମ àŸàଜର à¬à¬¾à¬¬à‡ କà‡à¬®à‡à¬°à¬¾à¬•à ଆକàସà‡à¬¸ କରିବା ପାଇଠà¬à¬• ଆପàଲିକà‡à¬¸à¬¨ କିମàବା ସà‡à¬¬à¬¾à¬•à ଅନàମତି ଦିଅନàତà।"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"à¬à¬¹à¬¿ ଆପ ହà‡à¬¡à¬²à‡à¬¸ ସିଷàଟମ àŸàଜର à¬à¬¾à¬¬à‡ କà‡à¬®à‡à¬°à¬¾à¬•à ଆକàସà‡à¬¸ କରିପାରିବ।"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"କମàପନ ନିàŸà¬¨àତàରଣ କରନàତà"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ଆପàâ€à¬•à, à¬à¬¾à¬‡à¬¬àରà‡à¬Ÿà¬°à†ନିàŸà¬¨àତàରଣ କରିବାକà ଦà‡à¬‡à¬¥à¬¾à¬à¥¤"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"à¬à¬¾à¬‡à¬¬àରà‡à¬Ÿà¬°à ସàଥିତି ଆକàସà‡à¬¸à କରିବାକà ଆପକà ଅନàମତି ଦିà¬à¥¤"</string> @@ -806,11 +808,11 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"àŸàଜର ଆକàସନ ବିନା ପà‚ରàବରà ଇନଷàଟଲ କରାଯାଇଥିବା ଆପକà ଅପଡà‡à¬Ÿ କରିବା ପାଇଠà¬à¬¹à¬¾ ହà‹à¬²àଡରକà ଅନàମତି ଦିà¬"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"ପାସà‌à±à¬°àଡ ନିàŸà¬®à¬¾à¬¬à¬³à€ ସà‡à¬Ÿà କରନàତà"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"ଲକà†ସàକàରà€à¬¨à†ପାସà‌à±à¬°àଡ ଓ PINà¬°à‡ à¬…à¬¨àମà‹à¬¦à¬¿à¬¤ ଦà€à¬°àଘତା ଓ ବରàଣàଣ ନିàŸà¬¨àତàରଣ କରନàତà।"</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"ସàକàରà€à¬¨à-ଅନଲକà କରିବା ଉଦààŸà¬® ନà€à¬°à¬¿à¬•àଷଣ କରନàତà"</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"ସàକàରିନ-ଅନଲକ କରିବା ଉଦààŸà¬® ନà€à¬°à¬¿à¬•àଷଣ କରିବା"</string> <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"ସàକàରà€à¬¨à†ଅନଲକà†କରିବାବà‡à¬³à‡ ଟାଇପà†କରିଥିବା à¬àଲ ପାସà±à¬°àଡର ସଂଖààŸà¬¾à¬•à ନà€à¬°à¬¿à¬•àଷଣ à¬•à¬°à‡ à¬à¬¬à¬‚ ଟାବଲà‡à¬Ÿàâ€à¬•à ଲକà†କରିଦିଠକିମàବା ଯଦି ଅନà‡à¬• à¬àଲ ପାସà±à¬°àଡ ଟାଇପà†କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ଟାବଲà‡à¬Ÿàâ€à¬° ସମସàତ ଡାଟା ଲିà¬à¬¾à¬‡à¬¦à¬¿à¬à¥¤"</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"ସàକàରିନà ଅନà‌ଲକà କରିବା ସମàŸà¬°à‡ ଟାଇପà କରାଯାଇଥିବା à¬àଲ ପାସà‌à±à¬¾à¬°àଡଗàଡ଼ିକର ସଂଖààŸà¬¾à¬•à ନିରà€à¬•àଷଣ କରନàତà à¬à¬¬à¬‚ ଆପଣଙàକର Android TV ଡିà¬à¬¾à¬‡à¬¸à‌କà ଲକà କରନàତà କିମàବା ଯଦି ଅନà‡à¬• à¬àଲ ପାସà‌à±à¬¾à¬°àଡ ଟାଇପà କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ଆପଣଙàକ Android TV ଡିà¬à¬¾à¬‡à¬¸à‌ର ସମସàତ ଡାଟା ଲିà¬à¬¾à¬‡ ଦିଅନàତà।"</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"ସàକàରିନ ଅନଲକ କରିବା ସମàŸà¬°à‡ ଟାଇପ କରାଯାଇଥିବା à¬àଲ ପାସà±à¬¾à¬°àଡର ସଂଖààŸà¬¾à¬•à ମନିଟର କରନàତà à¬à¬¬à¬‚ ଇନଫà‹à¬Ÿà‡à¬¨à¬®à‡à¬£àଟ ସିଷàଟମକà ଲକ କରନàତà କିମàବା ଯଦି ଅନà‡à¬•ଗàଡ଼ିଠà¬àଲ ପାସà±à¬¾à¬°àଡ ଟାଇପ କରାଯାଇଥାଠତà‡à¬¬à‡ ଇନଫà‹à¬Ÿà‡à¬¨à¬®à‡à¬£àଟ ସିଷàଟମର ସମସàତ ଡାଟା ଖାଲି କରନàତà।"</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"ସàକàରà€à¬¨à†ଅନଲକà†କରିବାବà‡à¬³à‡ ଟାଇପà†କରିଥିବା à¬àଲ ପାସà±à¬°àଡର ସଂଖààŸà¬¾à¬•à ନà€à¬°à¬¿à¬•àଷଣ à¬•à¬°à‡ à¬à¬¬à¬‚ ଫà‹à¬¨àâ€à¬•à ଲକà†କରିଦିଠକିମàବା ଯଦି ଅନà‡à¬• à¬àଲ ପାସà±à¬°àଡ ଟାଇପà†କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ଫà‹à¬¨àâ€à¬° ସମସàତ ଡାଟା ଲିà¬à¬¾à¬‡à¬¦à¬¿à¬à¥¤"</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"ଟାଇପ କରାଯାଇଥିବା à¬àଲ ପାସà±à¬°àଡର ସଂଖààŸà¬¾à¬•à ନà€à¬°à¬¿à¬•àଷଣ କରà‡à¥¤ ସàକàରିନ ଅନଲକ କରିବାବà‡à¬³à‡ à¬à¬¬à¬‚ ଫà‹à¬¨à¬•à ଲକ କରିବା ସମàŸà¬°à‡ ଯଦି ଅନà‡à¬• à¬àଲ ପାସà±à¬°àଡ ଟାଇପ କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ଫà‹à¬¨à¬° ସମସàତ ଡାଟା ଡିଲିଟ କରà‡à¥¤"</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"ସàକàରà€à¬¨à†ଅନଲକà†କରିବାବà‡à¬³à‡ ଟାଇପà†କରାଯାଇଥିବା à¬àଲ ପାସà‌à±à¬°àଡର ସଂଖààŸà¬¾à¬•à ନà€à¬°à¬¿à¬•àଷଣ à¬•à¬°à‡ à¬à¬¬à¬‚ ଟାବଲà‡à¬Ÿàâ€à¬•à ଲକà†କରିଦିଠକିମàବା ଯଦି ଅନà‡à¬• à¬àଲ ପାସà‌à±à¬°àଡ ଟାଇପà†କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ସମସàତ ଡାଟା ଲିà¬à¬¾à¬‡à¬¦à¬¿à¬à¥¤"</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"ସàକàରିନà ଅନà‌ଲକà କରିବା ସମàŸà¬°à‡ ଟାଇପà କରାଯାଇଥିବା à¬àଲ ପାସà‌à±à¬¾à¬°àଡଗàଡ଼ିକର ସଂଖààŸà¬¾à¬•à ନିରà€à¬•àଷଣ କରନàତà à¬à¬¬à¬‚ ଆପଣଙàକର Android TV ଡିà¬à¬¾à¬‡à¬¸à‌କà ଲକà କରନàତà କିମàବା ଯଦି ଅନà‡à¬• à¬àଲ ପାସà‌à±à¬¾à¬°àଡ ଟାଇପà କରାଯାଇଥାà¬, ତà‡à¬¬à‡ ସମସàତ ଡାଟା ଲିà¬à¬¾à¬‡ ଦିଅନàତà।"</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"ସàକàରିନ ଅନଲକ କରିବା ସମàŸà¬°à‡ ଟାଇପ କରାଯାଇଥିବା à¬àଲ ପାସà±à¬¾à¬°àଡର ସଂଖààŸà¬¾à¬•à ମନିଟର କରନàତà à¬à¬¬à¬‚ ଇନଫà‹à¬Ÿà‡à¬¨à¬®à‡à¬£àଟ ସିଷàଟମକà ଲକ କରନàତà କିମàବା ଯଦି ଅନà‡à¬•ଗàଡ଼ିଠà¬àଲ ପାସà±à¬¾à¬°àଡ ଟାଇପ କରାଯାଇଥାଠତà‡à¬¬à‡ à¬à¬¹à¬¿ ପàରà‹à¬«à¬¾à¬‡à¬²à¬° ସମସàତ ଡାଟା ଖାଲି କରନàତà।"</string> @@ -823,7 +825,7 @@ <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ ଫààŸà¬¾à¬•àଟà‹à¬°à€ ସà‡à¬Ÿà¬¿à¬™àଗ କରାଇ ଟାବàâ€à¬²à‡à¬Ÿàâ€à¬° ଡାଟା ଲିà¬à¬¾à¬‡à¬¥à¬¾à¬à¥¤"</string> <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"à¬à¬• ଫààŸà¬¾à¬•àଟà‹à¬°à€ ଡାଟା ରିସà‡à¬Ÿà କରି ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ ଆପଣଙàକର Android TV ଡିà¬à¬¾à¬‡à¬¸à‌ର ଡାଟା ଲିà¬à¬¾à¬¨àତà।"</string> <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"à¬à¬• ଫààŸà¬¾à¬•àଟà‹à¬°à€ ଡାଟା ରିସà‡à¬Ÿ କରି ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ ଇନଫà‹à¬Ÿà‡à¬¨à¬®à‡à¬£àଟ ସିଷàଟମର ଡାଟା ଖାଲି କରନàତà।"</string> - <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ ଫààŸà¬¾à¬•àଟà‹à¬°à€ ଡାଟା ରିସà‡à¬Ÿà କରି ଫà‹à¬¨àâ€à¬° ଡାଟା ଲିà¬à¬¾à¬‡à¬¥à¬¾à¬à¥¤"</string> + <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ ଫààŸà¬¾à¬•àଟà‹à¬°à€ ଡାଟା ରିସà‡à¬Ÿ କରି ଫà‹à¬¨à¬° ଡାଟା ଲିà¬à¬¾à¬‡à¬¥à¬¾à¬à¥¤"</string> <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"ପàରà‹à¬«à¬¾à¬‡à¬² ଡାଟା ଖାଲି କରନàତà"</string> <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"àŸàଜରà†ଡାଟା ଲିà¬à¬¾à¬¨àତà"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"ବିନା ଚà‡à¬¤à¬¾à¬¬à¬¨à€à¬°à‡ à¬à¬¹à¬¿ ଟାବଲà‡à¬Ÿà¬°à‡ ଥିବା à¬à¬¹à¬¿ àŸàଜରଙàକ ଡାଟା ଲିà¬à¬¾à¬‡ ଦିଅନàତà।"</string> @@ -2104,7 +2106,7 @@ <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ନିàŸà¬®à¬¿à¬¤ ମà‹à¬¡à†ସà‚ଚନା ବିଜàଞପàତି"</string> <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ବà‡à¬Ÿà‡à¬°à€ ସà‡à¬à¬° ଚାଲà କରାଯାଇଛି"</string> <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ବààŸà¬¾à¬Ÿà‡à¬°à€ ଲାଇଫ ବଢ଼ାଇବା ପାଇଠବààŸà¬¾à¬Ÿà‡à¬°à€ ବààŸà¬¬à¬¹à¬¾à¬° କମà କରିବା"</string> - <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"ବààŸà¬¾à¬Ÿà‡à¬°à€ ସà‡à¬à¬°à"</string> + <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"ବà‡à¬Ÿà‡à¬°à€ ସà‡à¬à¬°"</string> <string name="battery_saver_off_notification_title" msgid="7637255960468032515">"ବààŸà¬¾à¬Ÿà‡à¬°à€ ସà‡à¬à¬°à ବନàଦ ଅଛି"</string> <string name="battery_saver_charged_notification_summary" product="default" msgid="5544457317418624367">"ଫà‹à¬¨à¬°à‡ ଯଥà‡à¬·àଟ ଚାରàଜ ଅଛି। ଫିଚରଗàଡ଼ିକ ଆଉ ପàରତିବନàଧିତ ନàହà‡à¬à¥¤"</string> <string name="battery_saver_charged_notification_summary" product="tablet" msgid="4426317048139996888">"ଟାବଲà‡à¬Ÿà¬°à‡ ଯଥà‡à¬·àଟ ଚାରàଜ ଅଛି। ଫିଚରଗàଡ଼ିକ ଆଉ ପàରତିବନàଧିତ ନàହà‡à¬à¥¤"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 8cfc0e4279d1a0d22693da152c86134eb3143e20..8034be88dc74b34ca4a44f79d485abf76555ed36 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"ਇਹ ਵਿਸ਼ੇਸ਼ ਅਧਿਕà©à¨°à¨¿à¨¤ ਜਾਂ ਸਿਸਟਮ à¨à¨ª ਕਿਸੇ ਵੇਲੇ ਵੀ ਸਿਸਟਮ ਕੈਮਰੇ ਨੂੰ ਵਰਤ ਕੇ ਤਸਵੀਰਾਂ ਖਿੱਚ ਸਕਦੀ ਹੈ ਅਤੇ ਵੀਡੀਓ ਫ਼ਾਈਲਾਂ ਰਿਕਾਰਡ ਕਰ ਸਕਦੀ ਹੈ। à¨à¨ª ਨੂੰ ਵੀ android.permission.CAMERA ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"à¨à¨ªà¨²à©€à¨•ੇਸ਼ਨ ਜਾਂ ਸੇਵਾ ਨੂੰ ਕੈਮਰਾ ਡੀਵਾਈਸਾਂ ਦੇ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕੀਤੇ ਜਾਣ ਬਾਰੇ ਕਾਲਬੈਕ ਪà©à¨°à¨¾à¨ªà¨¤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ।"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ਇਹ à¨à¨ª ਕੋਈ ਵੀ ਕੈਮਰਾ ਡੀਵਾਈਸ ਚਾਲੂ ਹੋਣ (ਕਿਸ à¨à¨ªà¨²à©€à¨•ੇਸ਼ਨ ਰਾਹੀਂ) ਜਾਂ ਬੰਦ ਹੋਣ \'ਤੇ ਕਾਲਬੈਕ ਪà©à¨°à¨¾à¨ªà¨¤ ਕਰ ਸਕਦੀ ਹੈ।"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ਕਿਸੇ à¨à¨ªà¨²à©€à¨•ੇਸ਼ਨ ਜਾਂ ਸੇਵਾ ਨੂੰ Headless System ਦੇ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਕੈਮਰੇ ਤੱਕ ਪਹà©à©°à¨š ਕਰਨ ਦਿਓ।"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ਇਹ à¨à¨ª Headless System ਦੇ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਕੈਮਰੇ ਤੱਕ ਪਹà©à©°à¨š ਕਰ ਸਕਦੀ ਹੈ।"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ਵਾਈਬà©à¨°à©‡à¨¸à¨¼à¨¨ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"à¨à¨ª ਨੂੰ ਵਾਈਬà©à¨°à©‡à¨Ÿà¨° ਤੇ ਨਿਯੰਤਰਣ ਪਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"à¨à¨ª ਨੂੰ ਥਰਥਰਾਹਟ ਸਥਿਤੀ ਤੱਕ ਪਹà©à©°à¨š ਕਰਨ ਦਿੰਦਾ ਹੈ।"</string> @@ -810,7 +812,7 @@ <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਹੋਠਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਨਿਰੀਖਣ ਕਰੋ ਅਤੇ ਟੈਬਲੈੱਟ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਟੈਬਲੈੱਟ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ, ਜੇਕਰ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ।"</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਹੋਠਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਨਿਰੀਖਣ ਕਰੋ ਅਤੇ ਆਪਣੇ Android TV ਡੀਵਾਈਸ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਆਪਣੇ Android TV ਡੀਵਾਈਸ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ, ਜੇ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ।"</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਸਮੇਂ ਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦੀ ਨਿਗਰਾਨੀ ਕਰੋ ਅਤੇ ਜੇ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ, ਤਾਂ ਵਾਹਨ ਆਡੀਓ ਸਿਸਟਮ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਵਾਹਨ ਆਡੀਓ ਸਿਸਟਮ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ।"</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਸਮੇਂ ਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਨਿਰੀਖਣ ਕਰੋ ਅਤੇ ਫ਼ੋਨ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਫ਼ੋਨ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ ਜੇਕਰ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ।"</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਸਮੇਂ ਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਗਿਣਤੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰੋ ਅਤੇ ਜੇ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ, ਤਾਂ ਫ਼ੋਨ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਫ਼ੋਨ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ।"</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਹੋਠਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਨਿਰੀਖਣ ਕਰੋ ਅਤੇ ਟੈਬਲੈੱਟ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਟੈਬਲੈੱਟ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ, ਜੇਕਰ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ।"</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਹੋਠਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਨਿਰੀਖਣ ਕਰੋ ਅਤੇ ਆਪਣੇ Android TV ਡੀਵਾਈਸ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਇਸ ਵਰਤੋਂਕਾਰ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ, ਜੇ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ।"</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਸਮੇਂ ਟਾਈਪ ਕੀਤੇ ਗਲਤ ਪਾਸਵਰਡਾਂ ਦੀ ਸੰਖਿਆ ਦੀ ਨਿਗਰਾਨੀ ਕਰੋ ਅਤੇ ਜੇ ਬਹà©à¨¤ ਜ਼ਿਆਦਾ ਗਲਤ ਪਾਸਵਰਡ ਟਾਈਪ ਕੀਤੇ ਹਨ, ਤਾਂ ਵਾਹਨ ਆਡੀਓ ਸਿਸਟਮ ਨੂੰ ਲਾਕ ਕਰੋ ਜਾਂ ਇਸ ਪà©à¨°à©‹à¨«à¨¾à¨ˆà¨² ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਓ।"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index a40fae86a5f3ac9c990a82a58e6e1cc0d43db678..21e42aa6bad9c5d28011bfa40b0c469fc8de65a9 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -503,6 +503,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ta aplikacja systemowa z podwyższonymi uprawnieniami może w dowolnym momencie robić zdjÄ™cia i nagrywać filmy przy użyciu aparatu systemowego. Wymaga przyznania uprawnieÅ„ android.permission.CAMERA również aplikacji."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Zezwól na dostÄ™p aplikacji lub usÅ‚ugi na otrzymywanie wywoÅ‚ywania zwrotnego o urzÄ…dzeniach z aparatem, kiedy sÄ… one uruchamiane lub zamykane."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ta aplikacja może otrzymywać wywoÅ‚ania zwrotne, kiedy urzÄ…dzenie z aparatem jest uruchamiane (przez jakÄ… aplikacjÄ™) albo zamykane."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"sterowanie wibracjami"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Pozwala aplikacji na sterowanie wibracjami."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Zezwala aplikacji na dostÄ™p do stanu wibracji"</string> @@ -812,7 +816,7 @@ <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Przy odblokowywaniu ekranu monitoruj, ile razy wpisano nieprawidÅ‚owe hasÅ‚o i blokuj tablet lub usuÅ„ z niego wszystkie dane, jeÅ›li nieprawidÅ‚owe hasÅ‚o podano zbyt wiele razy."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Monitorowanie liczby nieudanych prób odblokowania ekranu za pomocÄ… hasÅ‚a oraz blokowanie urzÄ…dzenia z Androidem TV lub kasowanie z niego wszystkich danych w razie wpisania błędnego hasÅ‚a zbyt wiele razy."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Monitorowanie przypadków nieprawidÅ‚owego wpisania hasÅ‚a podczas odblokowywania ekranu i blokowanie systemu multimedialno-rozrywkowego lub usuwanie z niego wszystkich danych przy zbyt dużej liczbie błędnych prób."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Przy odblokowywaniu ekranu monitoruje, ile razy wpisano nieprawidÅ‚owe hasÅ‚o, i blokuje telefon lub usuwa z niego wszystkie dane, jeÅ›li nieprawidÅ‚owe hasÅ‚o podano zbyt wiele razy"</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Przy odblokowywaniu ekranu monitoruje, ile razy wpisano nieprawidÅ‚owe hasÅ‚o, i blokuje telefon lub usuwa z niego wszystkie dane, jeÅ›li nieprawidÅ‚owe hasÅ‚o podano zbyt wiele razy."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Monitorowanie, ile razy wpisano błędne hasÅ‚o podczas odblokowywania ekranu, oraz blokowanie tabletu albo kasowanie wszystkich danych tego użytkownika, gdy zbyt wiele razy wpisano błędne hasÅ‚o."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Monitorowanie, ile razy wpisano błędne hasÅ‚o podczas odblokowywania ekranu, oraz blokowanie urzÄ…dzenia z Androidem TV albo kasowanie wszystkich danych tego użytkownika, gdy błędne hasÅ‚o zostaÅ‚o wpisane zbyt wiele razy."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"Monitorowanie przypadków nieprawidÅ‚owego wpisania hasÅ‚a podczas odblokowywania ekranu i blokowanie systemu multimedialno-rozrywkowego lub usuwanie wszystkich danych z profilu przy zbyt dużej liczbie błędnych prób."</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 70f80a81750bf67e45eaa0a70b63b2806e80b7b3..eb7a802ee4be4169a34bf8b859f35ee5a6ac5416 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esse app do sistema ou com privilégios pode tirar fotos e gravar vÃdeos a qualquer momento usando a câmera do sistema. É necessário que o app tenha também a permissão android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permitir que um aplicativo ou serviço receba callbacks sobre dispositivos de câmera sendo abertos ou fechados."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esse app pode receber callbacks quando um dispositivo de câmera é aberto (por qualquer app) ou fechado."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permitir que um aplicativo ou serviço acesse a câmera como usuário do sistema headless."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Este app pode acessar a câmera como um usuário do sistema headless."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 7341500d8b4637194b8c53ef0a9d2f371ebc3dc7..c83491e8d760fb689d8b71daec67eec348104af5 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esta app do sistema ou privilegiada pode tirar fotos e gravar vÃdeos através de uma câmara do sistema em qualquer altura. Também necessita da autorização android.permission.CAMERA para a app."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permitir que uma app ou um serviço receba chamadas de retorno sobre dispositivos de câmara que estão a ser abertos ou fechados"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esta app pode receber chamadas de retorno quando qualquer dispositivo de câmara está a ser aberto (e por que app) ou fechado."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permita que uma aplicação ou um serviço aceda à câmara como utilizador do sistema sem interface."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Esta app pode aceder à câmara como utilizador do sistema sem interface."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite à app controlar o vibrador."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a app aceda ao estado de vibração."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 70f80a81750bf67e45eaa0a70b63b2806e80b7b3..eb7a802ee4be4169a34bf8b859f35ee5a6ac5416 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Esse app do sistema ou com privilégios pode tirar fotos e gravar vÃdeos a qualquer momento usando a câmera do sistema. É necessário que o app tenha também a permissão android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permitir que um aplicativo ou serviço receba callbacks sobre dispositivos de câmera sendo abertos ou fechados."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Esse app pode receber callbacks quando um dispositivo de câmera é aberto (por qualquer app) ou fechado."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permitir que um aplicativo ou serviço acesse a câmera como usuário do sistema headless."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Este app pode acessar a câmera como um usuário do sistema headless."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlar vibração"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index cf428b70b7c90d4cc5d8b5006a527c34617ca63f..3389c6356c363ef050ee06a88827a47ff4c62032 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Această aplicaÈ›ie de sistem privilegiată poate să fotografieze È™i să înregistreze videoclipuri folosind o cameră de sistem în orice moment. Necesită È™i permisiunea android.permission.CAMERA pentru aplicaÈ›ie"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permite unei aplicaÈ›ii sau unui serviciu să primească apeluri inverse atunci când sunt deschise sau închise dispozitive cu cameră."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Această aplicaÈ›ie poate primi apeluri inverse atunci când este deschis (de aplicaÈ›ie) sau închis orice dispozitiv cu cameră."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Permite unei aplicaÈ›ii sau unui serviciu să acceseze camera ca utilizator de sistem fără interfață grafică."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"AplicaÈ›ia poate accesa camera ca utilizator de sistem fără interfață grafică."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"controlează vibrarea"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite aplicaÈ›iei să controleze mecanismul de vibrare."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite aplicaÈ›iei să acceseze modul de vibraÈ›ii."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 4986c10f75221746d8a353af9f054437548c6583..dec9eb3a37ba5547ecc967fce6189ea4dceacf23 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -503,6 +503,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ðто привилегированное или ÑиÑтемное приложение может в любое Ð²Ñ€ÐµÐ¼Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ фотографии и запиÑывать видео Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ камеры. Ð”Ð»Ñ Ñтого приложению также требуетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Разрешить приложению или ÑервиÑу получать обратные вызовы при открытии и закрытии камер"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ðто приложение Ñможет получать обратные вызовы при открытии (Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ открывающего приложениÑ) и закрытии любых камер."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Разрешить приложению или ÑервиÑу доÑтуп к камере на правах конÑольного ÑиÑтемного пользователÑ"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"У Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐµÑть доÑтуп к камере на правах конÑольного ÑиÑтемного пользователÑ."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"Управление функцией виброÑигнала"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Приложение Ñможет контролировать виброÑигналы."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Приложение Ñможет получать доÑтуп к ÑоÑтоÑнию виброотклика."</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 1b6230d3d340f5f97a22a126f780ec852f60d840..1a71238ea7f4b89b8603d30b9bc44ed48d14c1b6 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"මෙම වරප්â€à¶»à·ƒà·à¶¯ à¶½à¶à·Š හ෠පද්ධà¶à·’ යෙදුමට ඕනෑම වේලà·à·€à¶š පද්ධà¶à·’ à¶šà·à¶¸à¶»à·à·€ à¶·à·à·€à·’à¶ à¶šà¶» පින්à¶à·–à¶» à¶œà·à¶±à·“මට සහ වීඩිය෠පටිගචකිරීමට à·„à·à¶šà·’ය. යෙදුම විසින් රඳව෠à¶à¶¶à· à¶œà·à¶±à·“මට android.permission.CAMERA à¶´à·Šâ€à¶»à·€à·šà·à¶ºà¶¯ à¶…à·€à·à·Šâ€à¶º වේ"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"විවෘචවෙමින් à·„à· à·€à·à·ƒà·™à¶¸à·’න් à¶´à·€à¶à·’à¶± à¶šà·à¶¸à¶»à· à¶‹à¶´à·à¶‚à¶œ à¶´à·’à·…à·’à¶¶à¶³ පසු ඇමà¶à·”ම් ලබ෠ගà·à¶±à·“මට යෙදුමකට හ෠සේවà·à·€à¶šà¶§ ඉඩ දෙන්න."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"මෙම යෙදුමට ඕනෑම à¶šà·à¶¸à¶»à· à¶‹à¶´à·à¶‚ගයක් විවෘචවෙමින් à¶´à·€à¶à·’à¶± විට (කුමන යෙදුමකින්) à·„à· à·€à·à·ƒà·™à¶¸à·’න් à¶´à·€à¶à·’à¶± විට පසු ඇමà¶à·”ම් ලබ෠ගà·à¶±à·“මට à·„à·à¶šà·’ය."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"කම්පනය à¶´à·à¶½à¶±à¶º කිරීම"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"කම්පකය à¶´à·à¶½à¶±à¶ºà¶§ යෙදුමට අවසර දෙන්න."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"යෙදුමට කම්පන à¶à¶à·Šà¶à·Šà·€à¶ºà¶§ à¶´à·Šâ€à¶»à·€à·šà· වීමට ඉඩ දෙන්න."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 9784308ca57f0c0eac9280f922fbe6c38cba35fb..37c1540a9ce33459a35640ff3b4ce250f9c1c053 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -503,6 +503,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Táto oprávnená alebo systémová aplikácia môže kedykoľvek fotiÅ¥ a nahrávaÅ¥ videá fotoaparátom systému. Aplikácia musà maÅ¥ tiež povolenie android.permission.CAMERA."</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"PovoliÅ¥ aplikácii alebo službe prijÃmaÅ¥ spätné volanie, keÄ sú zariadenia s kamerou otvorené alebo zatvorené."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Táto aplikácia môže prijÃmaÅ¥ spätné volania pri otváranà alebo zatváranà ľubovoľného fotoaparátu (s infomáciou o aplikácii, ktorá to robÃ)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Povoľte aplikácii alebo službe prÃstup ku kamere ako systém bez grafického rozhrania."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Táto aplikácia má prÃstup ku kamere ako systém bez grafického rozhrania."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ovládaÅ¥ vibrovanie"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikácii ovládaÅ¥ vibrácie."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Povoľuje aplikácii prÃstup k stavu vibrátora."</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 16ea77f1b0c61bf863c04732adb583a4bdff7628..3999f9f30cfeb03426251a3454fd40bc068f510a 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -503,6 +503,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ta prednostna ali sistemska aplikacija lahko z vgrajenim fotoaparatom kadar koli snema fotografije in videoposnetke. Aplikacija mora imeti omogoÄeno tudi dovoljenje android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Aplikaciji ali storitvi dovoli prejemanje povratnih klicev o odpiranju ali zapiranju naprav s fotoaparati."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ta aplikacija lahko prejema povratne klice, ko se odpira (s katero aplikacijo) ali zapira katera koli naprava s fotoaparatom."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Aplikaciji ali storitvi dovoli dostop do fotoaparata kot sistemskemu uporabniku brez grafiÄnega uporabniÅ¡kega vmesnika."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ta aplikacija lahko dostopa do fotoaparata kot sistemski uporabnik brez grafiÄnega uporabniÅ¡kega vmesnika."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"nadzor vibriranja"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogoÄa nadzor vibriranja."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji dovoljuje dostop do stanja vibriranja."</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index a3d648f204fad7cbafe9dc2ea7bbe4098e4bda24..a9d748687b5abebe3d65067c64d3f02d2306186a 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ky aplikacion sistemi ose i privilegjuar mund të nxjerrë fotografi dhe të regjistrojë video duke përdorur një kamerë në çdo moment. Kërkon që autorizimi i android.permission.CAMERA të mbahet edhe nga aplikacioni"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Lejo që një aplikacion ose shërbim të marrë telefonata mbrapsht për pajisjet e kamerës që hapen ose mbyllen."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ky aplikacion mund të marrë telefonata mbrapsht kur hapet ose mbyllet një pajisje e kamerës (nga një aplikacion)."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrollo dridhjen"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Lejon aplikacionin të kontrollojë dridhësin."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Lejon që aplikacioni të ketë qasje te gjendja e dridhësit."</string> @@ -806,11 +810,11 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Lejon zotëruesin të përditësojë aplikacionin që e ka instaluar më parë pa veprimin e përdoruesit"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"Cakto rregullat e fjalëkalimit"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrollo gjatësinë dhe karakteret e lejuara në fjalëkalimet dhe kodet PIN të kyçjes së ekranit."</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"Monitoro tentativat e shkyçjes së ekranit"</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"Monitoron tentativat e shkyçjes së ekranit"</string> <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Monitoro numrin e fjalëkalimeve të shkruar gabim kur shkyç ekranin. Kyç tabletin ose fshi të gjitha të dhënat e tij, nëse shkruhen shumë fjalëkalime të pasakta."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin dhe kyç pajisjen tënde Android TV ose spastro të gjitha të dhënat e pajisjes sate Android TV nëse shkruhen gabim shumë fjalëkalime."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin dhe kyç sistemin info-argëtues ose spastro të gjitha të dhënat e tij nëse shkruhen shumë fjalëkalime të gabuara."</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Monitoro numrin e fjalëkalimeve të shkruar gabim kur shkyç ekranin. Kyç telefonin ose fshi të gjitha të dhënat e tij, nëse shkruhen shumë fjalëkalime të pasakta."</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"Monitoron numrin e fjalëkalimeve të shkruar gabim kur shkyç ekranin. Kyç telefonin ose fshin të gjitha të dhënat e tij, nëse shkruhen shumë fjalëkalime të pasakta."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin. Kyçe tabletin ose spastro të gjitha të dhënat e këtij përdoruesi nëse shkruhen shumë fjalëkalime të gabuara."</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin dhe kyçe pajisjen tënde Android TV ose spastro të gjitha të dhënat e këtij përdoruesi nëse shkruhen shumë fjalëkalime të gabuara."</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin dhe kyç sistemin info-argëtues ose spastro të gjitha të dhënat e këtij profili nëse shkruhen shumë fjalëkalime të gabuara."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 712aeb99dd981f3fdc1aa336dd3cc6443d3d2d43..b5aefaafbec43cdf098984463e0674f4012c2e24 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -502,6 +502,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ова привилегована ÑиÑтемÑка апликација може да Ñнима Ñлике и видео Ñнимке помоћу камере ÑиÑтема у било ком тренутку. Ðпликација треба да има и дозволу android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Дозволите апликацији или уÑлузи да добија повратне позиве о отварању или затварању уређаја Ñа камером."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ова апликација може да добија повратне позиве када Ñе било који уређај Ñа камером отвара или затвара (помоћу неке апликације)."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Дозволите апликацији или уÑлузи да приÑтупа камери као кориÑник ÑиÑтема без графичког кориÑничког интерфејÑа."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Ова апликација може да приÑтупа камери као кориÑник ÑиÑтема без графичког кориÑничког интерфејÑа."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"контрола вибрације"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Дозвољава апликацији да контролише вибрацију."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дозвољава апликацији да приÑтупа Ñтању вибрирања."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 3624f71d1e7ef4d19f178b8ff130e1c53aa0da9d..1745ff00f82c6ef94d714491a90336889652222a 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Denna systemapp med särskild behörighet kan ta bilder och spela in videor med systemets kamera när som helst. Appen mÃ¥ste även ha behörigheten android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"TillÃ¥t att en app eller tjänst fÃ¥r Ã¥teranrop när en kameraenhet öppnas eller stängs."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Den här appen kan fÃ¥ Ã¥teranrop när en kameraenhet öppnas (efter app) eller stängs."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"styra vibration"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"TillÃ¥ter att appen styr vibrationen."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Appen beviljas Ã¥tkomst till vibrationsstatus."</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 1ec2eeff1575904ffdeed9f84c53958d278a77d4..341a8d322f7aaf8f87ccbed194891f09d9d48e20 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Programu hii ya mfumo au inayopendelewa inaweza kupiga picha na kurekodi video ikitumia kamera ya mfumo wakati wowote. Inahitaji ruhusa ya android.permission.CAMERA iwepo kwenye programu pia"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Ruhusu programu au huduma ipokee simu zinazopigwa tena kuhusu vifaa vya kamera kufunguliwa au kufungwa."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Programu hii inaweza kupokea misimbo ya kutekeleza wakati kifaa chochote cha kamera kinafunguliwa (na programu) au kufungwa."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"Kudhibiti mtetemo"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Inaruhusu programu kudhibiti kitingishi."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Huruhusu programu kufikia hali ya kitetemeshaji."</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 8c2ddb0cf39558276d592f5aaa402c4bb472e1ee..fa8f20d3558f2852d2d1c6049b23cf5ce1acd2f2 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"இநà¯à®¤ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ பெறà¯à®± அலà¯à®²à®¤à¯ சிஸà¯à®Ÿà®®à¯ ஆபà¯à®¸à®¾à®²à¯ சிஸà¯à®Ÿà®®à¯ கேமராவைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ எபà¯à®ªà¯‹à®¤à¯ வேணà¯à®Ÿà¯à®®à®¾à®©à®¾à®²à¯à®®à¯ படஙà¯à®•ளை எடà¯à®•à¯à®•வோ வீடியோகà¯à®•ளை ரெகà¯à®•ாரà¯à®Ÿà¯ செயà¯à®¯à®µà¯‹ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯. android.permission.CAMERA அனà¯à®®à®¤à®¿à®¯à¯à®®à¯ ஆபà¯à®¸à®¿à®±à¯à®•à¯à®¤à¯ தேவை"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"கேமரா சாதனஙà¯à®•ள௠திறகà¯à®•பà¯à®ªà®Ÿà¯à®®à¯à®ªà¯‹à®¤à¯‹ மூடபà¯à®ªà®Ÿà¯à®®à¯à®ªà¯‹à®¤à¯‹ அத௠கà¯à®±à®¿à®¤à¯à®¤ காலà¯à®ªà¯‡à®•à¯à®•à¯à®•ளைப௠பெற ஒர௠ஆபà¯à®¸à¯ˆà®¯à¯‹ சேவையையோ அனà¯à®®à®¤à®¿à®•à¯à®•வà¯à®®à¯."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"எநà¯à®¤à®•௠கேமரா சாதனமà¯à®®à¯ (எநà¯à®¤ ஆபà¯à®¸à®¾à®²à¯à®®à¯) திறகà¯à®•பà¯à®ªà®Ÿà¯à®®à¯à®ªà¯‹à®¤à¯‹ மூடபà¯à®ªà®Ÿà¯à®®à¯à®ªà¯‹à®¤à¯‹ இநà¯à®¤ ஆபà¯à®¸à®¾à®²à¯ காலà¯à®ªà¯‡à®•à¯à®•à¯à®•ளைப௠பெற à®®à¯à®Ÿà®¿à®¯à¯à®®à¯."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"அதிரà¯à®µà¯ˆà®•௠கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®¤à®²à¯"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"அதிரà¯à®µà¯ˆà®•௠கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯ ஆபà¯à®¸à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•ிறதà¯."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"அதிரà¯à®µà¯ நிலையை அணà¯à®• ஆபà¯à®¸à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à¯à®®à¯."</string> @@ -806,7 +810,7 @@ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"பயனர௠நடவடிகà¯à®•ை இலà¯à®²à®¾à®®à®²à¯ à®à®±à¯à®•ெனவே நிறà¯à®µà®ªà¯à®ªà®Ÿà¯à®Ÿ ஆபà¯à®¸à¯ˆà®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®• ஹோலà¯à®Ÿà®°à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à¯à®®à¯"</string> <string name="policylab_limitPassword" msgid="4851829918814422199">"கடவà¯à®šà¯à®šà¯Šà®²à¯ விதிகளை அமைகà¯à®•வà¯à®®à¯"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"திரைப௠பூடà¯à®Ÿà®¿à®©à¯ கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ள௠மறà¯à®±à¯à®®à¯ பினà¯à®•ளில௠அனà¯à®®à®¤à®¿à®•à¯à®•பà¯à®ªà®Ÿà¯à®®à¯ நீளதà¯à®¤à¯ˆà®¯à¯à®®à¯ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à¯à®±à®¿à®•ளையà¯à®®à¯ கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯."</string> - <string name="policylab_watchLogin" msgid="7599669460083719504">"திரையை அனà¯à®²à®¾à®•௠செயà¯à®µà®¤à®±à¯à®•ான à®®à¯à®¯à®±à¯à®šà®¿à®•ளைக௠கணà¯à®•ாணி"</string> + <string name="policylab_watchLogin" msgid="7599669460083719504">"திரையை அனà¯à®²à®¾à®•௠செயà¯à®µà®¤à®±à¯à®•ான à®®à¯à®¯à®±à¯à®šà®¿à®•ளைக௠கணà¯à®•ாணிதà¯à®¤à®²à¯"</string> <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"திரையைத௠திறகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ உளà¯à®³à®¿à®Ÿà¯à®Ÿ தவறான கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ளின௠எணà¯à®£à®¿à®•à¯à®•ையைக௠கணà¯à®•ாணிகà¯à®•à¯à®®à¯, மேலà¯à®®à¯ கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ள௠பலமà¯à®±à¯ˆ தவறாக உளà¯à®³à®¿à®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯, டேபà¯à®²à¯†à®Ÿà¯à®Ÿà¯ˆà®ªà¯ பூடà¯à®Ÿà¯à®®à¯ அலà¯à®²à®¤à¯ டேபà¯à®²à¯†à®Ÿà¯à®Ÿà®¿à®©à¯ எலà¯à®²à®¾ தரவையà¯à®®à¯ அழிகà¯à®•à¯à®®à¯."</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"திரையைத௠திறகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ எதà¯à®¤à®©à¯ˆ à®®à¯à®±à¯ˆ தவறான கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ளை உளà¯à®³à®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ள௠எனà¯à®ªà®¤à¯ˆà®•௠கணà¯à®•ாணிகà¯à®•à¯à®®à¯, பலமà¯à®±à¯ˆ தவறாக உளà¯à®³à®¿à®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯ Android TVயைப௠பூடà¯à®Ÿà¯à®®à¯ அலà¯à®²à®¤à¯ Android TVயின௠அனைதà¯à®¤à¯à®¤à¯ தரவையà¯à®®à¯ அழிகà¯à®•à¯à®®à¯."</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"திரையை அனà¯à®²à®¾à®•௠செயà¯à®¯à¯à®®à¯à®ªà¯‹à®¤à¯ உளà¯à®³à®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯ தவறான கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ளின௠எணà¯à®£à®¿à®•à¯à®•ையைக௠கணà¯à®•ாணிகà¯à®•à¯à®®à¯. மேலà¯à®®à¯ கடவà¯à®šà¯à®šà¯Šà®±à¯à®•ள௠பலமà¯à®±à¯ˆ தவறாக உளà¯à®³à®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯ இனà¯à®ƒà®ªà¯‹à®Ÿà¯†à®¯à®¿à®©à¯à®®à¯†à®©à¯à®Ÿà¯ சிஸà¯à®Ÿà®®à¯ˆà®ªà¯ பூடà¯à®Ÿà¯à®®à¯ அலà¯à®²à®¤à¯ அதன௠அனைதà¯à®¤à¯à®¤à¯ தரவையà¯à®®à¯ அழிகà¯à®•à¯à®®à¯."</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 4c7835f66b416fa0a3d12a74ef375390d9470473..8573c20c8021197c508ead520f41c4e45af2bcd2 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"à°ˆ విశేష లేదా సిసà±à°Ÿà°®à± యాపౠఎపà±à°ªà±à°¡à±ˆà°¨à°¾ సిసà±à°Ÿà°®à± కెమెరానౠఉపయోగించి ఫోటోలౠతీయగలదà±, వీడియోలనౠరికారà±à°¡à± చేయగలదà±. యాపà±â€Œà°•à± android.permission.CAMERA à°…à°¨à±à°®à°¤à°¿ ఇవà±à°µà°¡à°‚ కూడా అవసరం"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"కెమెరా పరికరాలౠతెరà±à°šà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°ªà±à°ªà±à°¡à± లేదా మూసà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°ªà±à°ªà±à°¡à± కాలà±â€Œà°¬à±à°¯à°¾à°•à±â€Œà°²à°¨à± à°¸à±à°µà±€à°•రించడానికి యాపà±â€Œà°¨à± లేదా సరà±à°µà±€à°¸à±â€Œà°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà°‚à°¡à°¿."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"à°à°¦à±ˆà°¨à°¾ కెమెరా పరికరం తెరà±à°šà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°ªà±à°ªà±à°¡à± (à°à°¦à±ˆà°¨à°¾ యాపౠదà±à°µà°¾à°°à°¾) లేదా మూసà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°ªà±à°ªà±à°¡à± à°ˆ యాపౠకాలà±â€Œà°¬à±à°¯à°¾à°•à±â€Œà°²à°¨à± à°…à°‚à°¦à±à°•ోగలదà±."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"హెడà±â€Œà°²à±†à°¸à± సిసà±à°Ÿà°®à± యూజరà±â€Œà°—à°¾ కెమెరానౠయాకà±à°¸à±†à°¸à± చేయడానికి à°…à°ªà±à°²à°¿à°•ేషనౠలేదా సరà±à°µà±€à°¸à±â€Œà°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà°‚à°¡à°¿."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"à°ˆ యాపౠహెడà±â€Œà°²à±†à°¸à± సిసà±à°Ÿà°®à± యూజరà±â€Œà°—à°¾ కెమెరానౠయాకà±à°¸à±†à°¸à± చేయగలదà±."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"వైబà±à°°à±‡à°·à°¨à±â€Œà°¨à± నియంతà±à°°à°¿à°‚à°šà°¡à°‚"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"వైబà±à°°à±‡à°Ÿà°°à±â€Œà°¨à± నియంతà±à°°à°¿à°‚చడానికి యాపà±â€Œà°¨à± à°…à°¨à±à°®à°¤à°¿à°¸à±à°¤à±à°‚ది."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"వైబà±à°°à±‡à°Ÿà°°à± à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ యాకà±à°¸à±†à°¸à± చేసేందà±à°•ౠయాపà±â€Œà°¨à± à°…à°¨à±à°®à°¤à°¿à°¸à±à°¤à±à°‚ది."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 804562a90f622212a78bf2ff6cfbb6d42a666773..eb4e2f71b08555611ae7cb748ee5062fe5f09b77 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"à¹à¸à¸›à¸‚à¸à¸‡à¸£à¸°à¸šà¸šà¸«à¸£à¸·à¸à¸—ี่ได้รับสิทธิ์นี้จะถ่ายภาพà¹à¸¥à¸°à¸šà¸±à¸™à¸—ึà¸à¸§à¸´à¸”ีโà¸à¹‚ดยใช้à¸à¸¥à¹‰à¸à¸‡à¸‚à¸à¸‡à¸£à¸°à¸šà¸šà¹„ด้ทุà¸à¹€à¸¡à¸·à¹ˆà¸ à¹à¸à¸›à¸•้à¸à¸‡à¸¡à¸µà¸ªà¸´à¸—ธิ์ android.permission.CAMERA ด้วย"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"à¸à¸™à¸¸à¸à¸²à¸•ให้à¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชันหรืà¸à¸šà¸£à¸´à¸à¸²à¸£à¹„ด้รับโค้ดเรียà¸à¸à¸¥à¸±à¸šà¹€à¸¡à¸·à¹ˆà¸à¸¡à¸µà¸à¸²à¸£à¹€à¸›à¸´à¸”หรืà¸à¸›à¸´à¸”à¸à¸¸à¸›à¸à¸£à¸“์à¸à¸¥à¹‰à¸à¸‡"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"à¹à¸à¸›à¸™à¸µà¹‰à¸ˆà¸°à¹„ด้รับโค้ดเรียà¸à¸à¸¥à¸±à¸šà¹€à¸¡à¸·à¹ˆà¸à¸¡à¸µà¸à¸²à¸£à¸›à¸´à¸”หรืà¸à¹€à¸›à¸´à¸”à¸à¸¸à¸›à¸à¸£à¸“์à¸à¸¥à¹‰à¸à¸‡ (โดยà¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชันที่เปิด)"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"à¸à¸™à¸¸à¸à¸²à¸•ให้à¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชันหรืà¸à¸šà¸£à¸´à¸à¸²à¸£à¹€à¸‚้าถึงà¸à¸¥à¹‰à¸à¸‡à¹ƒà¸™à¸à¸²à¸™à¸°à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸£à¸°à¸šà¸šà¹à¸šà¸šà¹„ม่มีส่วนหัว"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"à¹à¸à¸›à¸™à¸µà¹‰à¹€à¸‚้าถึงà¸à¸¥à¹‰à¸à¸‡à¹ƒà¸™à¸à¸²à¸™à¸°à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸£à¸°à¸šà¸šà¹à¸šà¸šà¹„ม่มีส่วนหัว"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ควบคุมà¸à¸²à¸£à¸ªà¸±à¹ˆà¸™à¹€à¸•ืà¸à¸™"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"à¸à¸™à¸¸à¸à¸²à¸•ให้à¹à¸à¸›à¸žà¸¥à¸´à¹€à¸„ชันควบคุมà¸à¸²à¸£à¸ªà¸±à¹ˆà¸™à¹€à¸•ืà¸à¸™"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"à¸à¸™à¸¸à¸à¸²à¸•ให้à¹à¸à¸›à¹€à¸‚้าถึงสถานะà¸à¸²à¸£à¸ªà¸±à¹ˆà¸™"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 51e7ec641e1bb528313a38e55d37b891f8ccdac6..7249c51ea9f50a672a59e56ff94feccd975707d5 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ang may pribilehiyong app o system app na ito ay makakakuha ng mga larawan at makakapag-record ng mga video gamit ang isang camera ng system anumang oras. Kinakailangang may android.permission.CAMERA na pahintulot din ang app"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Payagan ang isang application o serbisyo na makatanggap ng mga callback tungkol sa pagbubukas o pagsasara ng mga camera device."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Puwedeng makatanggap ang app na ito ng mga callback kapag binubuksan (kung anong application) o isinasara ang anumang camera device."</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"Payagan ang isang application o serbisyo na i-access ang camera bilang Headless System User."</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"Maa-access ng app na ito ang camera bilang Headless System User."</string> <string name="permlab_vibrate" msgid="8596800035791962017">"kontrolin ang pag-vibrate"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Pinapayagan ang app na kontrolin ang vibrator."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Pinapayagan ang app na ma-access ang naka-vibrate na status."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index ee45ede2df897070402fe736570443ce68abcaee..90035c6d5a764fec5b62cd8c494fb9a70fc4aa8a 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ayrıcalık tanınmış bu veya sistem uygulaması herhangi bir zamanda sistem kamerası kullanarak fotoÄŸraf çekebilir ve video kaydedebilir. Uygulamanın da bu ayrıcalığa sahip olması için android.permission.CAMERA izni gerektirir"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Bir uygulama veya hizmetin açılıp kapatılan kamera cihazları hakkında geri çağırmalar almasına izin verin."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Bu uygulama, herhangi bir kamera cihazı açıldığında (kamerayı açan uygulama tarafından) veya kapatıldığında geri çağırmalar alabilir."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"titreÅŸimi denetleme"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Uygulamaya, titreÅŸimi denetleme izni verir."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Uygulamanın titreÅŸim durumuna eriÅŸimesine izni verir."</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 63b7560140e748b38f0e44f37ef5374e11165a3c..bb578d8b831fdf0a9f77ce06706d238c15c595ee 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -503,6 +503,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Цей пріоритетний ÑиÑтемний додаток може будь-коли робити фото й запиÑувати відео, викориÑтовуючи камеру ÑиÑтеми. Додатку потрібен дозвіл android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Дозволити додатку або ÑервіÑу отримувати зворотні виклики щодо Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‡Ð¸ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐºÐ°Ð¼ÐµÑ€."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Цей додаток може отримувати зворотні виклики, коли одна з камер вмикаєтьÑÑ (певним додатком) чи вимикаєтьÑÑ."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"контролювати віброÑигнал"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ДозволÑÑ” програмі контролювати віброÑигнал."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ðадає додатку доÑтуп до Ñтану вібрації."</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index bd6ea76a820fb090c065237e98000fada037eec7..631a573cfcf4a7bf39ea3d238f1ea5705dff28f2 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"â€ÛŒÛ مراعات ÛŒØ§ÙØªÛ یا سسٹم ایپ کسی بھی وقت ایک سسٹم کیمرا استعمال کرتے Ûوئے تصاویر اور ویڈیوز ریکارڈ کر سکتی ÛÛ’Û” ایپ Ú©Û’ پاس android.permission.CAMERA Ú©Û’ ليے بھی اجازت Ûونا ضروری ÛÛ’Û”"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"ایپلیکیشن یا سروس Ú©Ùˆ کیمرا Ú©Û’ آلات Ú©Û’ Ú©Ùھلنے یا بند Ûونے سے متعلق کال بیکس موصول کرنے Ú©ÛŒ اجازت دیں۔"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"ÛŒÛ Ø§ÛŒÙ¾ کال بیکس موصول کر سکتی ÛÛ’ جب کوئی بھی کیمرا کا Ø¢Ù„Û (کسی ایپلیکیشن سے) کھولا جا Ø±ÛØ§ ÛÙˆ یا بند کیا جا Ø±ÛØ§ ÛÙˆÛ”"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"ایپلیکیشن یا سروس Ú©Ùˆ Ûیڈ لیس سسٹم صار٠کے طور پر کیمرا تک رسائی ØØ§ØµÙ„ کرنے Ú©ÛŒ اجازت دیں۔"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"ÛŒÛ Ø§ÛŒÙ¾ Ûیڈ لیس سسٹم صار٠کے طور پر کیمرے تک رسائی ØØ§ØµÙ„ کر سکتی ÛÛ’Û”"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"ارتعاش Ú©Ùˆ کنٹرول کریں"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"ایپ Ú©Ùˆ وائبریٹر کنٹرول کرنے Ú©ÛŒ اجازت دیتا ÛÛ’Û”"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ایپ Ú©Ùˆ وائبریٹر اسٹیٹ تک رسائی ØØ§ØµÙ„ کرنے Ú©ÛŒ اجازت دیتا ÛÛ’Û”"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 696edd3843095aefe9e576cbf74a0c8434560109..e480a3deb3397a49aafd8f08429f7b194f5a7538 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Bu imtiyozli yoki tizim ilovasi istalgan vaqtda tizim kamerasi orqali surat va videolar olishi mumkin. Ilovada android.permission.CAMERA ruxsati ham yoqilgan boÊ»lishi talab qilinadi"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Ilova yoki xizmatga kamera qurilmalari ochilayotgani yoki yopilayotgani haqida qayta chaqiruvlar qabul qilishi uchun ruxsat berish."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Bu ilova har qanday kamera qurilmasi ochilayotganda (istalgan ilova tarafidan) yoki yopilayotganda qayta chaqiruvlar qabul qilishi mumkin."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"tebranishni boshqarish"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ilova tebranishli signallarni boshqarishi mumkin."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ilovaga tebranish holatini aniqlash ruxsatini beradi."</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index c02adbc5d2c7980228cba8fb29ded3b7ae1c9730..b9ae37ce7e4a4a5426b45435be902d931d004aad 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Ứng dụng hệ thống có đặc quyá»n nà y có thể dùng máy ảnh hệ thống để chụp ảnh và quay video bất cứ lúc nà o. Ngoà i ra, ứng dụng nà y cÅ©ng cần có quyá»n android.permission.CAMERA"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Cho phép má»™t ứng dụng hoặc dịch vụ nháºn lệnh gá»i lại khi các thiết bị máy ảnh Ä‘ang được mở/đóng."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Ứng dụng nà y có thể nháºn các lệnh gá»i lại khi có bất kỳ thiết bị camera nà o Ä‘ang được mở (bằng ứng dụng) hoặc đóng."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"kiểm soát rung"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Cho phép ứng dụng kiểm soát bá»™ rung."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Cho phép ứng dụng truy cáºp và o trạng thái bá»™ rung."</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index f900b59c8eba0d3cddc3d99d1a372540bdb849bc..16c10138dfb6e114f8c1fd34d2363528964c15fd 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"这个具有特æƒçš„ç³»ç»Ÿåº”ç”¨éšæ—¶å¯ä»¥ä½¿ç”¨ç³»ç»Ÿç›¸æœºæ‹ç…§åŠå½•制视频。å¦å¤–,应用还需è¦èŽ·å– android.permission.CAMERA æƒé™"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"å…许应用或æœåŠ¡æŽ¥æ”¶ä¸Žæ‰“å¼€æˆ–å…³é—æ‘„åƒå¤´è®¾å¤‡æœ‰å…³çš„回调。"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"æ¤åº”用å¯åœ¨ä»»ä½•æ‘„åƒå¤´è®¾å¤‡ï¼ˆè¢«æŸäº›åº”ç”¨ï¼‰æ‰“å¼€æˆ–å…³é—æ—¶æ”¶åˆ°ç›¸åº”回调。"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"å…许应用或æœåŠ¡ä»¥æ— å¤´ç³»ç»Ÿç”¨æˆ·çš„èº«ä»½ä½¿ç”¨æ‘„åƒå¤´"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"æ¤åº”ç”¨èƒ½å¤Ÿä»¥æ— å¤´ç³»ç»Ÿç”¨æˆ·çš„èº«ä»½ä½¿ç”¨æ‘„åƒå¤´ã€‚"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"控制振动"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"å…许应用控制振动器。"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"å…许该应用访问振动器状æ€ã€‚"</string> @@ -807,10 +809,10 @@ <string name="policylab_limitPassword" msgid="4851829918814422199">"设置密ç 规则"</string> <string name="policydesc_limitPassword" msgid="4105491021115793793">"控制é”å±å¯†ç å’Œ PIN ç æ‰€å…许的长度和å—符。"</string> <string name="policylab_watchLogin" msgid="7599669460083719504">"监控å±å¹•è§£é”å°è¯•次数"</string> - <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"监视在解é”å±å¹•时输错密ç 的次数,如果输错次数过多,则é”定平æ¿ç”µè„‘或清除其所有数æ®ã€‚"</string> + <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"监控在解é”å±å¹•时输错密ç 的次数,并在输错次数过多时é”定平æ¿ç”µè„‘或清除其所有数æ®ã€‚"</string> <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"监控用户在解é”å±å¹•时输错密ç 的次数;如果用户输错密ç 的次数超出上é™ï¼Œç³»ç»Ÿå°±ä¼šé”定 Android TV 设备或清空 Android TV 设备上的所有数æ®ã€‚"</string> <string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"监控在解é”å±å¹•时输错密ç 的次数,并在输错次数过多时é”定信æ¯å¨±ä¹ç³»ç»Ÿæˆ–清除信æ¯å¨±ä¹ç³»ç»Ÿä¸Šçš„æ‰€æœ‰æ•°æ®ã€‚"</string> - <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"监视在解é”å±å¹•时输错密ç 的次数,如果输错次数过多,则é”定手机或清除其所有数æ®ã€‚"</string> + <string name="policydesc_watchLogin" product="default" msgid="4885030206253600299">"监控在解é”å±å¹•时输错密ç 的次数,并在输错次数过多时é”定手机或清除其所有数æ®ã€‚"</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="2049038943004297474">"监控在解é”å±å¹•时输错密ç 的次数,并在输错次数过多时é”定平æ¿ç”µè„‘或清空æ¤ç”¨æˆ·çš„æ‰€æœ‰æ•°æ®ã€‚"</string> <string name="policydesc_watchLogin_secondaryUser" product="tv" msgid="8965224107449407052">"监控用户在解é”å±å¹•时输错密ç 的次数;如果用户输错密ç 的次数超出上é™ï¼Œç³»ç»Ÿå°±ä¼šé”定 Android TV 设备或清空该用户的所有数æ®ã€‚"</string> <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"监控在解é”å±å¹•时输错密ç 的次数,并在输错次数过多时é”定信æ¯å¨±ä¹ç³»ç»Ÿæˆ–清除æ¤ä¸ªäººèµ„料的所有数æ®ã€‚"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 7140539391e7833bb4720fc298cd250dccda6e85..680b7168a3f558a5c2fddb6a53519446b1b66b25 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"這個ç²ç‰¹åˆ¥æ¬Šé™çš„系統應用程å¼å¯ä»¥åœ¨ä»»ä½•時候使用系統相機來æ‹ç…§å’Œæ”錄。æ¤å¤–,應用程å¼äº¦éœ€è¦ android.permission.CAMERA 權é™"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"å…è¨±æ‡‰ç”¨ç¨‹å¼æˆ–æœå‹™æŽ¥æ”¶ç›¸æ©Ÿè£ç½®é–‹å•Ÿæˆ–關閉的相關回電。"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"當任何相機è£ç½®åœ¨é–‹å•Ÿ (由應用程å¼) æˆ–é—œé–‰æ™‚ï¼Œæ¤æ‡‰ç”¨ç¨‹å¼å°±èƒ½æŽ¥æ”¶å›žé›»ã€‚"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"å…è¨±æ‡‰ç”¨ç¨‹å¼æˆ–æœå‹™ä»¥ç„¡ä½¿ç”¨è€…介é¢ç³»çµ±ä½¿ç”¨è€…權é™å˜å–相機。"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"這個應用程å¼å¯é‹ç”¨ç„¡ä½¿ç”¨è€…介é¢ç³»çµ±ä½¿ç”¨è€…權é™å˜å–相機。"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"控制震動"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"å…è¨±æ‡‰ç”¨ç¨‹å¼æŽ§åˆ¶éœ‡å‹•ã€‚"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"å…許應用程å¼å˜å–震動狀態。"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 61fe93977e9257e1b79c56d232f36ee86309b678..81bdc37309f549b38a62071618c35656f0861281 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -501,6 +501,8 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"這個具有特殊權é™çš„系統應用程å¼éš¨æ™‚å¯ä»¥ä½¿ç”¨ç³»çµ±æ”影機æ‹ç…§åŠéŒ„影。æ¤å¤–ï¼Œä½ ä¹Ÿå¿…é ˆå°‡ android.permission.CAMERA æ¬Šé™æŽˆäºˆé€™å€‹æ‡‰ç”¨ç¨‹å¼"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"å…è¨±æ‡‰ç”¨ç¨‹å¼æˆ–æœå‹™æŽ¥æ”¶ç›¸æ©Ÿè£ç½®é–‹å•Ÿæˆ–關閉的相關回呼。"</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"當任何相機è£ç½®åœ¨é–‹å•Ÿ (由應用程å¼) 或關閉時,這個應用程å¼å°±èƒ½æŽ¥æ”¶å›žå‘¼ã€‚"</string> + <string name="permlab_cameraHeadlessSystemUser" msgid="680194666834500050">"å…è¨±æ‡‰ç”¨ç¨‹å¼æˆ–æœå‹™ä»¥ç„¡ä½¿ç”¨è€…介é¢ç³»çµ±ä½¿ç”¨è€…權é™å˜å–相機。"</string> + <string name="permdesc_cameraHeadlessSystemUser" msgid="6963163319710996412">"這個應用程å¼å¯é‹ç”¨ç„¡ä½¿ç”¨è€…介é¢ç³»çµ±ä½¿ç”¨è€…權é™å˜å–相機。"</string> <string name="permlab_vibrate" msgid="8596800035791962017">"控制震動"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"å…è¨±æ‡‰ç”¨ç¨‹å¼æŽ§åˆ¶éœ‡å‹•ã€‚"</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"å…許應用程å¼å˜å–震動功能狀態。"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 77a41fce44e316ecd8bfae5bec1b328979a94528..2059430fd47af16cf82db470a52fbe67dac438af 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -501,6 +501,10 @@ <string name="permdesc_systemCamera" msgid="5938360914419175986">"Lolu hlelo lokusebenza oluhle noma lwesistimu lingathatha izithombe futhi lirekhode amavidiyo lisebenzisa ikhamera yesistimu noma kunini. Idinga imvume ye-android.permission.CAMERA ukuthi iphathwe nawuhlelo lokusebenza"</string> <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Vumela uhlelo lokusebenza noma isevisi ukwamukela ukuphinda ufonelwe mayelana namadivayisi wekhamera avuliwe noma avaliwe."</string> <string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Lolu hlelo lokusebenza lungakwazi ukuthola ukuphinda ufonelwe uma noma iyiphi idivayisi yekhamera ivulwa (ngephakheji yohlelo lokusebenza) noma ivalwa."</string> + <!-- no translation found for permlab_cameraHeadlessSystemUser (680194666834500050) --> + <skip /> + <!-- no translation found for permdesc_cameraHeadlessSystemUser (6963163319710996412) --> + <skip /> <string name="permlab_vibrate" msgid="8596800035791962017">"lawula ukudlidliza"</string> <string name="permdesc_vibrate" msgid="8733343234582083721">"Ivumela uhlelo lokusebenza ukulawula isidlidlizi."</string> <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ivumela uhlelo lokusebenza ukuthi lufinyelele kusimo sesidlidlizeli."</string> diff --git a/core/tests/coretests/src/android/colormodel/CamTest.java b/core/tests/coretests/src/android/colormodel/CamTest.java index 5bcc5930e9a65358bd01764ab2f31de4b5175fae..05fc0e04515cc5745dd70ed8d5fa670b41b3f83f 100644 --- a/core/tests/coretests/src/android/colormodel/CamTest.java +++ b/core/tests/coretests/src/android/colormodel/CamTest.java @@ -18,7 +18,7 @@ package com.android.internal.graphics.cam; import static org.junit.Assert.assertEquals; -import android.platform.test.annotations.LargeTest; +import androidx.test.filters.LargeTest; import org.junit.Assert; import org.junit.Test; diff --git a/core/tests/coretests/src/android/provider/NameValueCacheTest.java b/core/tests/coretests/src/android/provider/NameValueCacheTest.java index 87e4a42ae0adf12452dc7ee836d73fab2b563279..989c992de8558be7147fff16a6b2dd8821369592 100644 --- a/core/tests/coretests/src/android/provider/NameValueCacheTest.java +++ b/core/tests/coretests/src/android/provider/NameValueCacheTest.java @@ -55,7 +55,6 @@ import java.util.Map; * Due to how the classes are structured, we have to test it in a somewhat roundabout way. We're * mocking out the contentProvider and are handcrafting very specific Bundles to answer the queries. */ -@Ignore("b/297724333") @Presubmit @RunWith(AndroidJUnit4.class) @SmallTest @@ -229,6 +228,8 @@ public class NameValueCacheTest { @After public void cleanUp() throws IOException { + Settings.Config.clearProviderForTest(); + Settings.Secure.clearProviderForTest(); mConfigsStorage.clear(); mSettingsStorage.clear(); mSettingsCacheGenerationStore.close(); diff --git a/core/tests/vibrator/TEST_MAPPING b/core/tests/vibrator/TEST_MAPPING index f3333d82d2981464f64a4310d8ffa2588ae4e9e1..2f3afa6f63996a9b5ff99ecc54f149124495ad13 100644 --- a/core/tests/vibrator/TEST_MAPPING +++ b/core/tests/vibrator/TEST_MAPPING @@ -3,7 +3,7 @@ { "name": "FrameworksVibratorCoreTests", "options": [ - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"} diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml index 6622973007b48b3ffa4454d6f4c62ce7d7517081..202ea957971ec5fa1ec26880ff79b5dde9ea4093 100644 --- a/libs/WindowManager/Shell/res/values-af/strings.xml +++ b/libs/WindowManager/Shell/res/values-af/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Beweeg na regs bo"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Beweeg na links onder"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Beweeg na regs onder"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"vou <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> uit"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"vou <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> in"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-instellings"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Maak borrel toe"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Moenie dat gesprek \'n borrel word nie"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Het dit"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Geen onlangse borrels nie"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Onlangse borrels en borrels wat toegemaak is, sal hier verskyn"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Klets met borrels"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nuwe gesprekke verskyn as ikone in ’n hoek onderaan jou skerm. Tik om hulle uit te vou, of sleep om hulle toe te maak."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Beheer borrels enige tyd"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tik hier om te bestuur watter apps en gesprekke in borrels kan verskyn"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Borrel"</string> diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml index a3f77411b0f66965352ce0863158bbcddb45fb28..4071e790d55a5084fd8818a8bdbbf6d5cfd90dc4 100644 --- a/libs/WindowManager/Shell/res/values-am/strings.xml +++ b/libs/WindowManager/Shell/res/values-am/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ወደ ላá‹áŠ›á‹ á‰€áŠ áŠ áŠ•á‰€áˆ³á‰…áˆµ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"የáŒáˆáŒŒá‹áŠ• áŒáˆ« አንቀሳቅስ"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ታችኛá‹áŠ• ቀአያንቀሳቅሱ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ን ዘáˆáŒ‹"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ን ሰብስብ"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"የ<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ቅንብሮች"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"አረá‹áŠ• አሰናብት"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"á‹á‹á‹á‰¶á‰½áŠ• በአረዠአታሳá‹"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ገባáŠ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"áˆáŠ•áˆ á‹¨á‰…áˆá‰¥ ጊዜ አረá‹á‹Žá‰½ የሉáˆ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"የቅáˆá‰¥ ጊዜ አረá‹á‹Žá‰½ እና የተሰናበቱ አረá‹á‹Žá‰½ እዚህ ብቅ á‹áˆ‹áˆ‰"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"አረá‹á‹Žá‰½áŠ• በመጠቀሠá‹á‹ˆá‹«á‹©"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"አዲስ á‹á‹á‹á‰¶á‰½ በማያ ገá…ዎ የታችኛዠጥጠá‹áˆµáŒ¥ እንደ አዶዎች á‹á‰³á‹«áˆ‰á¢ ለመዘáˆáŒ‹á‰µ መታ ያድáˆáŒ“ቸዠወá‹áˆ ለማሰናበት á‹áŒŽá‰µá‰·á‰¸á‹á¢"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"በማንኛá‹áˆ ጊዜ ዓረá‹á‹Žá‰½áŠ• á‹á‰†áŒ£áŒ ሩ"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"የትኛዎቹ መተáŒá‰ ሪያዎች እና á‹á‹á‹á‰¶á‰½ ዓረዠመáጠሠእንደሚችሉ ለማስተዳደሠእዚህ ጋሠመታ ያድáˆáŒ‰"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"አረá‹"</string> diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml index ee4302e461dfb44112789f76750a1b60be7cf173..d3890a779f87fb93a2a4b3975b59ef8e4ed3d5bc 100644 --- a/libs/WindowManager/Shell/res/values-ar/strings.xml +++ b/libs/WindowManager/Shell/res/values-ar/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"الانتقال إلى أعلى اليسار"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"نقل إلى أسÙÙ„ يمين الشاشة"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"نقل إلى أسÙÙ„ اليسار"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"توسيع <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"تصغير <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"إعدادات <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"إغلاق Ùقاعة Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"عدم عرض Ø§Ù„Ù…ØØ§Ø¯Ø«Ø© ÙƒÙقاعة Ù…ØØ§Ø¯Ø«Ø©"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ØØ³Ù†Ù‹Ø§"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ليس هناك Ùقاعات Ù…ØØ§Ø¯Ø«Ø§Øª"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ستظهر هنا Ø£ØØ¯Ø« Ùقاعات Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª ÙˆÙقاعات Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª التي تم إغلاقها."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"الدردشة باستخدام Ùقاعات Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"تظهر Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª الجديدة ÙÙŠ شكل رموز بأسÙÙ„ Ø£ØØ¯ جانبَي الشاشة. انقر على الرمز لتوسيع Ø§Ù„Ù…ØØ§Ø¯Ø«Ø© أو Ø§Ø³ØØ¨Ù‡ Ù„Ø¥Ø®ÙØ§Ø¦Ù‡Ø§."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"التØÙƒÙ‘Ù… ÙÙŠ إظهار الÙقاعات ÙÙŠ أي وقت"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"انقر هنا للتØÙƒÙ‘Ù… ÙÙŠ إظهار Ùقاعات التطبيقات ÙˆØ§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª التي تريدها."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Ùقاعة"</string> diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml index a568d5841d326d7c8a40135bb3e110a55432e48e..05b8f7dca72996fbd2901ecb74c5c2a2e94f7282 100644 --- a/libs/WindowManager/Shell/res/values-as/strings.xml +++ b/libs/WindowManager/Shell/res/values-as/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"শীৰà§à¦·à§° সোà¦à¦«à¦¾à¦²à§‡ নিয়ক"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"বà§à¦Ÿà¦¾à¦®à¦Ÿà§‹ বাওà¦à¦«à¦¾à¦²à§‡ নিয়ক"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"তলৰ সোà¦à¦«à¦¾à¦²à§‡ নিয়ক"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> বিসà§à¦¤à¦¾à§° কৰক"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> সংকোচন কৰক"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ছেটিং"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"বাবল অগà§à§°à¦¾à¦¹à§à¦¯ কৰক"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"বাৰà§à¦¤à¦¾à¦²à¦¾à¦ª বাবল নকৰিব"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"বà§à¦œà¦¿ পালোà¦"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"কোনো শেহতীয়া bubbles নাই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"শেহতীয়া bubbles আৰৠঅগà§à§°à¦¾à¦¹à§à¦¯ কৰা bubbles ইয়াত পà§à§°à¦¦à¦°à§à¦¶à¦¿à¦¤ হ\'ব"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Bubbles বà§à¦¯à§±à¦¹à¦¾à§° কৰি চাট কৰক"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"নতà§à¦¨ বাৰà§à¦¤à¦¾à¦²à¦¾à¦ªà¦¸à¦®à§‚হ আপোনাৰ সà§à¦•à§à§°à§€à¦¨à§° à¦à¦•েবাৰে তলৰ à¦à¦Ÿà¦¾ কোণত চিহà§à¦¨ হিচাপে দেখা পোৱা যায়। সেইসমূহ বিসà§à¦¤à¦¾à§° কৰিবলৈ টিপক বা অগà§à§°à¦¾à¦¹à§à¦¯ কৰিবলৈ টানি আনি à¦à§°à¦•।"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"যিকোনো সময়তে বাবল নিয়নà§à¦¤à§à§°à¦£ কৰক"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"কোনবোৰ à¦à¦ªà§â€Œ আৰৠবাৰà§à¦¤à¦¾à¦²à¦¾à¦ª বাবল হ’ব পাৰে সেয়া পৰিচালনা কৰিবলৈ ইয়াত টিপক"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string> diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml index 1a681e1c63a6f6a365edfd7adfc63fd436ff9c87..108593e4b9487ea0bc5dc58cf026cae8e5891a0d 100644 --- a/libs/WindowManager/Shell/res/values-az/strings.xml +++ b/libs/WindowManager/Shell/res/values-az/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Yuxarıya saÄŸa köçürün"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"AÅŸağıya sola köçürün"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"AÅŸağıya saÄŸa köçürün"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"geniÅŸlÉ™ndirin: <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"yığcamlaÅŸdırın: <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ayarları"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"YumrucuÄŸu ləğv edin"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"SöhbÉ™ti yumrucuqda göstÉ™rmÉ™"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Anladım"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Yumrucuqlar yoxdur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Son yumrucuqlar vÉ™ buraxılmış yumrucuqlar burada görünÉ™cÉ™k"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Yumrucuqlar vasitÉ™silÉ™ söhbÉ™t edin"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Yeni söhbÉ™tlÉ™r ekranın aÅŸağı küncündÉ™ ikonalar kimi görünür. Toxunaraq geniÅŸlÉ™ndirin, yaxud sürüşdürÉ™rÉ™k imtina edin."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Yumrucuqları idarÉ™ edin"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Bura toxunaraq yumrucuq göstÉ™rÉ™cÉ™k tÉ™tbiq vÉ™ söhbÉ™tlÉ™ri idarÉ™ edin"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Qabarcıq"</string> diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml index cba293b20c3d33f2675f560b14e1f72fd523f8c2..76fd5b1c2d67711f710a43a191df15aa625aa633 100644 --- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml +++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Premesti gore desno"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Premesti dole levo"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premesti dole desno"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"proÅ¡irite oblaÄić <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"skupite oblaÄić <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"PodeÅ¡avanja za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblaÄić"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne koristi oblaÄiće za konverzaciju"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Važi"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblaÄića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ovde se prikazuju nedavni i odbaÄeni oblaÄići"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Ćaskajte u oblaÄićima"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nove konverzacije se pojavljuju kao ikone u donjem uglu ekrana. Dodirnite da biste ih proÅ¡irili ili prevucite da biste ih odbacili."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"KontroliÅ¡ite oblaÄiće u svakom trenutku"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovde i odredite koje aplikacije i konverzacije mogu da imaju oblaÄić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"OblaÄić"</string> diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml index 80e5a677e86d72286c5ec5a559bb25e51a687b3f..473d15acc632e261ba5ea8009d938649e747bf7e 100644 --- a/libs/WindowManager/Shell/res/values-be/strings.xml +++ b/libs/WindowManager/Shell/res/values-be/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПерамÑÑціце правей Ñ– вышÑй"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПерамÑÑціць лÑвей Ñ– ніжÑй"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПерамÑÑціць правей Ñ– ніжÑй"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>: разгарнуць"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>: згарнуць"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Ðалады \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\""</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ðдхіліць апавÑшчÑнне"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ðе паказваць размову Ñž выглÑдзе ÑžÑплывальных апавÑшчÑннÑÑž"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Зразумела"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ÐÑма нÑдаўніх уÑплывальных апавÑшчÑннÑÑž"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ÐÑÐ´Ð°ÑžÐ½Ñ–Ñ Ñ– Ð°Ð´Ñ…Ñ–Ð»ÐµÐ½Ñ‹Ñ ÑžÑÐ¿Ð»Ñ‹Ð²Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð°Ð¿Ð°Ð²ÑшчÑнні будуць паказаны тут"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Чат з выкарыÑтаннем уÑплывальных апавÑшчÑннÑÑž"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ÐÐ¾Ð²Ñ‹Ñ Ñ€Ð°Ð·Ð¼Ð¾Ð²Ñ‹ паказваюцца Ñž выглÑдзе значкоў у ніжнім вугле Ñкрана. ÐаціÑніце на Ñ–Ñ…, каб разгарнуць. ПерацÑгніце Ñ–Ñ…, калі хочаце закрыць."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Кіруйце наладамі ÑžÑплывальных апавÑшчÑннÑÑž у любы чаÑ"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Каб кіраваць уÑплывальнымі апавÑшчÑннÑмі Ð´Ð»Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼ Ñ– размоў, націÑніце тут"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"УÑплывальнае апавÑшчÑнне"</string> diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml index ca5923919d360eeefeb8bf5762710d92459725a1..7aa98e5bc218903c45d4dc6a190d8f45b22f6e23 100644 --- a/libs/WindowManager/Shell/res/values-bg/strings.xml +++ b/libs/WindowManager/Shell/res/values-bg/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПремеÑтване горе вдÑÑно"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПремеÑтване долу влÑво"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПремеÑтване долу вдÑÑно"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"разгъване на <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Ñвиване на <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"ÐаÑтройки за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ОтхвърлÑне на балончетата"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Без балончета за разговора"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Разбрах"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ÐÑма Ñкорошни балончета"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Скорошните и отхвърлените балончета ще Ñе показват тук"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Чат Ñ Ð±Ð°Ð»Ð¾Ð½Ñ‡ÐµÑ‚Ð°"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ðовите разговори Ñе показват като икони в Ð´Ð¾Ð»Ð½Ð¸Ñ ÑŠÐ³ÑŠÐ» на екрана ви. ДокоÑнете, за да ги разгънете, или ги плъзнете за отхвърлÑне."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Управление на балончетата по вÑÑко време"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ДокоÑнете тук, за да управл. кои прил. и разговори могат да показват балончета"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string> diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml index c1eb469f73a47d84e3cc2344d58fcfcd80b242d4..caad87e8f05ff85d237f6597f10565307cfc1bf4 100644 --- a/libs/WindowManager/Shell/res/values-bn/strings.xml +++ b/libs/WindowManager/Shell/res/values-bn/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"উপরে ডানদিকে সরান"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"নিচে বাà¦à¦¦à¦¿à¦•ে সরান"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"নিচে ডান দিকে সরান"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> বড় করà§à¦¨"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> আড়াল করà§à¦¨"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> সেটিংস"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"বাবল খারিজ করà§à¦¨"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"কথোপকথন বাবল হিসেবে দেখাবে না"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"বà§à¦à§‡à¦›à¦¿"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"কোনও সামà§à¦ªà§à¦°à¦¤à¦¿à¦• বাবল নেই"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"সামà§à¦ªà§à¦°à¦¤à¦¿à¦• ও বাতিল করা বাবল à¦à¦–ানে দেখা যাবে"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"বাবল বà§à¦¯à¦¬à¦¹à¦¾à¦° করে চà§à¦¯à¦¾à¦Ÿ করà§à¦¨"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"নতà§à¦¨ কথোপকথন, আপনার সà§à¦•à§à¦°à¦¿à¦¨à§‡à¦° নিচে কোণার দিকে আইকন হিসেবে দেখায়। সেটি বড় করতে টà§à¦¯à¦¾à¦ª করà§à¦¨ বা বাতিল করতে টেনে আনà§à¦¨à¥¤"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"যেকোনও সময় বাবল নিয়নà§à¦¤à§à¦°à¦£ করà§à¦¨"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"কোন অà§à¦¯à¦¾à¦ª ও কথোপকথনের জনà§à¦¯ বাবলের সà§à¦¬à¦¿à¦§à¦¾ চান তা মà§à¦¯à¦¾à¦¨à§‡à¦œ করতে à¦à¦–ানে টà§à¦¯à¦¾à¦ª করà§à¦¨"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string> diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml index c97fc3dffb6dbecb0397cf71fa914dea9a3cfb08..66e67b385cb8c43a3cd7300239ae7c014adb1fc1 100644 --- a/libs/WindowManager/Shell/res/values-bs/strings.xml +++ b/libs/WindowManager/Shell/res/values-bs/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Pomjerite gore desno"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Pomjeri dolje lijevo"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Pomjerite dolje desno"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"proÅ¡irivanje oblaÄića <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"sužavanje oblaÄića <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Postavke aplikacije <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblaÄić"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nemoj prikazivati razgovor u oblaÄićima"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Razumijem"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblaÄića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nedavni i odbaÄeni oblaÄići će se pojaviti ovdje"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatajte koristeći oblaÄiće"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Novi razgovori se pojavljuju kao ikone u donjem uglu ekrana. Dodirnite da ih proÅ¡irite ili prevucite da ih odbacite."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljajte oblaÄićima u svakom trenutku"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovdje da upravljate time koje aplikacije i razgovori mogu imati oblaÄić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"OblaÄić"</string> diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml index a9195e4dbc03e3135379879c30ac230b0a9f0371..62399ae07e7d4ef104b8f36ffbdec93d5b77d09e 100644 --- a/libs/WindowManager/Shell/res/values-ca/strings.xml +++ b/libs/WindowManager/Shell/res/values-ca/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mou a dalt a la dreta"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mou a baix a l\'esquerra"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mou a baix a la dreta"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"desplega <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"replega <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Configuració de l\'aplicació <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignora la bombolla"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostris la conversa com a bombolla"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entesos"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hi ha bombolles recents"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bombolles recents i les ignorades es mostraran aquÃ"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Xateja amb bombolles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Les converses noves es mostren com a icones en un extrem inferior de la pantalla. Toca per ampliar-les o arrossega per ignorar-les."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla les bombolles en qualsevol moment"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca aquà per gestionar quines aplicacions i converses poden fer servir bombolles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bombolla"</string> diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml index 89bd22203c8c92c32cea20f8f8ec0d402d57b158..8e0aba0fdec6723c3690cb487c0aacb277e0da0b 100644 --- a/libs/WindowManager/Shell/res/values-cs/strings.xml +++ b/libs/WindowManager/Shell/res/values-cs/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"PÅ™esunout vpravo nahoru"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"PÅ™esunout vlevo dolů"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"PÅ™esunout vpravo dolů"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"rozbalit <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"sbalit <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavenà <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ZavÅ™Ãt bublinu"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nezobrazovat konverzaci v bublinách"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Žádné nedávné bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Zde se budou zobrazovat nedávné bubliny a zavÅ™ené bubliny"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatujte pomocà bublin"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nové konverzace se zobrazà jako ikony v dolnÃm rohu obrazovky. KlepnutÃm je rozbalÃte, pÅ™etaženÃm zavÅ™ete."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Nastavenà bublin můžete kdykoli upravit"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"KlepnutÃm sem lze spravovat, které aplikace a konverzace mohou vytvářet bubliny"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string> diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml index fd880bcfbd0c916bce2b91eb9aa3174b43f3de98..d3989bcbd6f0e19324f2e2c61f1c4d06948d10c0 100644 --- a/libs/WindowManager/Shell/res/values-da/strings.xml +++ b/libs/WindowManager/Shell/res/values-da/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Flyt op til højre"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Flyt ned til venstre"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flyt ned til højre"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"udvid <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"skjul <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Indstillinger for <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Afvis boble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Vis ikke samtaler i bobler"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ingen seneste bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nye bobler og afviste bobler vises her"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat ved hjælp af bobler"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nye samtaler vises som ikoner nederst pÃ¥ din skærm. Tryk for at udvide dem, eller træk for at lukke dem."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Administrer bobler nÃ¥r som helst"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tryk her for at administrere, hvilke apps og samtaler der kan vises i bobler"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string> diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml index b28394d27e9aecb640e45972fa58436a5f69dd50..5d0ee2951e90fd1397b7fcb499ab4435cdf68632 100644 --- a/libs/WindowManager/Shell/res/values-de/strings.xml +++ b/libs/WindowManager/Shell/res/values-de/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Nach rechts oben verschieben"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Nach unten links verschieben"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Nach unten rechts verschieben"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> maximieren"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> minimieren"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Einstellungen für <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Bubble schließen"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Unterhaltung nicht als Bubble anzeigen"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Keine kürzlich geschlossenen Bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Hier werden aktuelle und geschlossene Bubbles angezeigt"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Bubbles zum Chatten verwenden"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Neue Unterhaltungen erscheinen als Symbole unten auf dem Display. Du kannst sie durch Antippen maximieren und durch Ziehen schließen."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bubble-Einstellungen festlegen"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tippe hier, um zu verwalten, welche Apps und Unterhaltungen als Bubble angezeigt werden können"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml index 684c3bbddd82a9039891947f055562f390d3aa03..2b73528f7aeffae76adbf5ecc4025a7027b4dc2c 100644 --- a/libs/WindowManager/Shell/res/values-el/strings.xml +++ b/libs/WindowManager/Shell/res/values-el/strings.xml @@ -66,20 +66,20 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Μετακίνηση επάνω δεξιά"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Μετακίνηση κάτω αÏιστεÏά"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Μετακίνηση κάτω δεξιά"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ανάπτυξη <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"σÏμπτυξη <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Ρυθμίσεις <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ΠαÏάβλ. για συννεφ."</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Îα μην γίνει Ï€Ïοβολή της συζήτησης σε συννεφάκια."</string> <string name="bubbles_user_education_title" msgid="2112319053732691899">"Συζητήστε χÏησιμοποιώντας συννεφάκια."</string> <string name="bubbles_user_education_description" msgid="4215862563054175407">"Οι νÎες συζητήσεις εμφανίζονται ως κινοÏμενα εικονίδια ή συννεφάκια. Πατήστε για να ανοίξετε το συννεφάκι. ΣÏÏετε για να το μετακινήσετε."</string> <string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"ΕλÎγξτε τα συννεφάκια ανά πάσα στιγμή."</string> - <string name="bubbles_user_education_manage" msgid="3460756219946517198">"Πατήστε ΔιαχείÏιση για να απενεÏγοποιήσετε τα συννεφάκια από αυτήν την εφαÏμογή."</string> + <string name="bubbles_user_education_manage" msgid="3460756219946517198">"Πατήστε ΔιαχείÏιση για να απενεÏγοποιήσετε τα συννεφάκια από αυτή την εφαÏμογή."</string> <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Το κατάλαβα"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Δεν υπάÏχουν Ï€Ïόσφατα συννεφάκια"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Τα Ï€Ïόσφατα συννεφάκια και τα συννεφάκια που παÏαβλÎψατε θα εμφανίζονται εδώ."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Συζητήστε χÏησιμοποιώντας συννεφάκια"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Οι νÎες συζητήσεις εμφανίζονται ως εικονίδια σε μια από τις κάτω γωνίες της οθόνης. Πατήστε για να τις αναπτÏξετε ή σÏÏετε για να τις παÏαβλÎψετε."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ΕλÎγξτε τα συννεφάκια ανά πάσα στιγμή."</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Πατήστε εδώ για τη διαχείÏιση εφαÏμογών και συζητήσεων που Ï€Ïοβάλλουν συννεφάκια"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Συννεφάκι"</string> diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml index 1890c3d28591d89153b44f70402bbc63fe4d04af..2f0e898d5db7d0d2744d2267fce72acc3801c01c 100644 --- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Move top right"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Move bottom left"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expand <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"collapse <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat using bubbles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"New conversations appear as icons in a bottom corner of your screen. Tap to expand them or drag to dismiss them."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml index 72189df6d65d0875c3f73ff7ef0a5eb7864f45da..a338905fa299a9b31454e0f952cc010d33214e74 100644 --- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Move top right"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Move bottom left"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expand <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"collapse <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string> diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml index 1890c3d28591d89153b44f70402bbc63fe4d04af..2f0e898d5db7d0d2744d2267fce72acc3801c01c 100644 --- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Move top right"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Move bottom left"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expand <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"collapse <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat using bubbles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"New conversations appear as icons in a bottom corner of your screen. Tap to expand them or drag to dismiss them."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml index 1890c3d28591d89153b44f70402bbc63fe4d04af..2f0e898d5db7d0d2744d2267fce72acc3801c01c 100644 --- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Move top right"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Move bottom left"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expand <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"collapse <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No recent bubbles"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recent bubbles and dismissed bubbles will appear here"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat using bubbles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"New conversations appear as icons in a bottom corner of your screen. Tap to expand them or drag to dismiss them."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Control bubbles at any time"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tap here to manage which apps and conversations can bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> diff --git a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml index 294bdb5edf3ba02d75aeaa5aac8277beb22e84be..20344389ddcc1cb3c572067ffcbf5789a97109e7 100644 --- a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml +++ b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€â€ŽMove top right‎â€â€Žâ€Žâ€â€Ž"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€Žâ€â€Žâ€â€â€â€â€Žâ€Žâ€â€â€Žâ€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€â€â€â€Žâ€Žâ€Žâ€â€â€Žâ€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€â€â€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€Žâ€â€Žâ€ŽMove bottom left‎â€â€Žâ€Žâ€â€Ž"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€â€â€â€â€Žâ€â€Žâ€Žâ€â€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€â€Žâ€â€â€â€â€â€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€â€â€â€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€ŽMove bottom right‎â€â€Žâ€Žâ€â€Ž"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€Žâ€â€Žâ€â€Žâ€â€â€â€Žâ€â€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žexpand ‎â€â€Žâ€Žâ€â€â€Ž<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>‎â€â€Žâ€Žâ€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Ž"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€Žâ€â€â€Žâ€Žâ€â€â€Žâ€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žcollapse ‎â€â€Žâ€Žâ€â€â€Ž<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>‎â€â€Žâ€Žâ€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Ž"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€â€â€â€â€Žâ€â€â€Žâ€â€â€â€Žâ€â€Žâ€â€Žâ€â€Žâ€â€â€Žâ€â€â€â€â€â€â€â€â€â€Žâ€â€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Ž<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>‎â€â€Žâ€Žâ€â€â€â€Ž settings‎â€â€Žâ€Žâ€â€Ž"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€â€â€â€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€â€â€Žâ€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€Žâ€â€â€Žâ€â€Žâ€â€Žâ€â€â€Žâ€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€â€Žâ€Žâ€â€Žâ€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€â€â€â€Žâ€ŽDismiss bubble‎â€â€Žâ€Žâ€â€Ž"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€Žâ€â€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€â€Žâ€â€Žâ€â€Žâ€â€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€â€Žâ€â€ŽDon’t bubble conversation‎â€â€Žâ€Žâ€â€Ž"</string> diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml index 54f2de06e5fb0be46eb4232d2d8deddace0a0147..ebf67f6e164ec0126a9d91edea79fa252a1be8a6 100644 --- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml +++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Ubicar arriba a la derecha"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Ubicar abajo a la izquierda"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Ubicar abajo a la derecha"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expandir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"contraer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Configuración de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Descartar burbuja"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostrar la conversación en burbuja"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Las burbujas recientes y las que se descartaron aparecerán aquÃ"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat con burbujas"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Las conversaciones nuevas aparecen como Ãconos en la esquina inferior de la pantalla. Presiona para expandirlas, o bien arrastra para descartarlas."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla las burbujas"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Presiona para administrar las apps y conversaciones que pueden mostrar burbujas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Cuadro"</string> diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml index 19a8a1402022589fb901e6f900b80b5ec1fc0aac..05171b2fc6dd8986763be4b5134dbaa2c33877b9 100644 --- a/libs/WindowManager/Shell/res/values-es/strings.xml +++ b/libs/WindowManager/Shell/res/values-es/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover arriba a la derecha"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover abajo a la izquierda."</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover abajo a la derecha"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"desplegar <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"contraer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Ajustes de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Cerrar burbuja"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostrar conversación en burbuja"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"No hay burbujas recientes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Las burbujas recientes y las cerradas aparecerán aquÃ"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatea con burbujas"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Las nuevas conversaciones aparecen como iconos en una esquina inferior de la pantalla. Tócalas para ampliarlas o arrástralas para cerrarlas."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controla las burbujas cuando quieras"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca aquà para gestionar qué aplicaciones y conversaciones pueden usar burbujas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuja"</string> diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml index c0558e4fc95e527f026cca6f04c75649ca02f492..3af3c16ede24182e366dbeb64d64ca9728935c5a 100644 --- a/libs/WindowManager/Shell/res/values-et/strings.xml +++ b/libs/WindowManager/Shell/res/values-et/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Teisalda üles paremale"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Teisalda alla vasakule"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Teisalda alla paremale"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"laienda <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"ahenda <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Rakenduse <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> seaded"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Sule mull"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ära kuva vestlust mullina"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Selge"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hiljutisi mulle pole"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Siin kuvatakse hiljutised ja suletud mullid."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Vestelge mullide abil"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Uued vestlused kuvatakse ekraanikuva alanurgas ikoonidena. Puudutage nende laiendamiseks või lohistage neist loobumiseks."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Juhtige mulle igal ajal"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Puudutage siin, et hallata, milliseid rakendusi ja vestlusi saab mullina kuvada"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Mull"</string> diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml index 7610f0dc431220098747ebb8c665ce609fe2b348..fae83883b7c4962bdd6708d7d2fe85d79af48fc6 100644 --- a/libs/WindowManager/Shell/res/values-eu/strings.xml +++ b/libs/WindowManager/Shell/res/values-eu/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Eraman goialdera, eskuinetara"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Eraman behealdera, ezkerretara"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Eraman behealdera, eskuinetara"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"zabaldu <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"tolestu <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> aplikazioaren ezarpenak"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Baztertu burbuila"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ez erakutsi elkarrizketak burbuila gisa"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ados"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ez dago azkenaldiko burbuilarik"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Azken burbuilak eta baztertutakoak agertuko dira hemen"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Txateatu burbuilak erabilita"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Elkarrizketa berriak ikono gisa agertzen dira pantailaren beheko izkinan. Zabaltzeko, saka itzazu. Baztertzeko, aldiz, arrasta itzazu."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrolatu burbuilak edonoiz"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Sakatu hau burbuiletan zein aplikazio eta elkarrizketa ager daitezkeen kudeatzeko"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuila"</string> diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml index f1fb51fa5ecea07aa6d774d3a97ea4bdbf794c3e..f7547602dcea1746a9d438c68cedc838556c5d31 100644 --- a/libs/WindowManager/Shell/res/values-fa/strings.xml +++ b/libs/WindowManager/Shell/res/values-fa/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"انتقال به بالا سمت Ú†Ù¾"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"انتقال به پایین سمت راست"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"انتقال به پایین سمت Ú†Ù¾"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ازهم باز کردن <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"جمع کردن <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"تنظیمات <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"رد کردن ØØ¨Ø§Ø¨Ú©"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"مکالمه در ØØ¨Ø§Ø¨ نشان داده نشود"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"متوجه‌ام"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"هیچ ØØ¨Ø§Ø¨Ú© جدیدی وجود ندارد"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ØØ¨Ø§Ø¨Ú©â€ŒÙ‡Ø§ÛŒ اخیر Ùˆ ØØ¨Ø§Ø¨Ú©â€ŒÙ‡Ø§ÛŒ ردشده اینجا ظاهر خواهند شد"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Ú¯Ù¾ زدن Ø¨Ø§Ø§Ø³ØªÙØ§Ø¯Ù‡ از ØØ¨Ø§Ø¨Ú©"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"مکالمه‌های جدید به‌صورت نماد در گوشه پایین ØµÙØÙ‡â€ŒÙ†Ù…Ø§ÛŒØ´ نشان داده می‌شود. برای ازهم بازکردن آن‌ها ضربه بزنید یا برای بستن، آن‌ها را بکشید."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"کنترل ØØ¨Ø§Ø¨Ú©â€ŒÙ‡Ø§ در هرزمانی"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"برای مدیریت اینکه کدام برنامه‌ها Ùˆ مکالمه‌ها ØØ¨Ø§Ø¨ داشته باشند، ضربه بزنید"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ØØ¨Ø§Ø¨"</string> diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml index 526925531ac040cac8f3713160ba0f82c1d3a85b..9094c73355717a93029b61dbab395fae4fdb94af 100644 --- a/libs/WindowManager/Shell/res/values-fi/strings.xml +++ b/libs/WindowManager/Shell/res/values-fi/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Siirrä oikeaan yläreunaan"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Siirrä vasempaan alareunaan"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Siirrä oikeaan alareunaan"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"laajenna <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"tiivistä <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: asetukset"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ohita kupla"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Älä näytä kuplia keskusteluista"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Okei"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ei viimeaikaisia kuplia"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Viimeaikaiset ja äskettäin ohitetut kuplat näkyvät täällä"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chattaile kuplien avulla"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Uudet keskustelut näkyvät kuvakkeina näytön alareunassa. Laajenna ne napauttamalla tai hylkää ne vetämällä."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Muuta kuplien asetuksia milloin tahansa"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Valitse napauttamalla tästä, mitkä sovellukset ja keskustelut voivat kuplia"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Kupla"</string> diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml index cd85f402cfab8d63608a384628a857205a376a48..b26c1b4e30180fd7e7f0734a3005df7993138c55 100644 --- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Déplacer dans coin sup. droit"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Déplacer dans coin inf. gauche"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Déplacer dans coin inf. droit"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"développer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"réduire <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Paramètres <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorer la bulle"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne pas afficher les conversations dans des bulles"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bulles récentes et les bulles ignorées s\'afficheront ici"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Clavarder en utilisant des bulles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Les nouvelles conversations apparaissent sous forme d\'icônes dans le coin inférieur de votre écran. Touchez-les icônes pour développer les conversations ou faites-les glisser pour les supprimer."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Gérez les bulles en tout temps"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Touchez ici pour gérer les applis et les conversations à inclure aux bulles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string> diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml index 23ba785363f70b019bf7db37ded1fec051ac9f4c..6e6420a22f5047438e29025fc84b42eba44dbd4b 100644 --- a/libs/WindowManager/Shell/res/values-fr/strings.xml +++ b/libs/WindowManager/Shell/res/values-fr/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Déplacer en haut à droite"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Déplacer en bas à gauche"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Déplacer en bas à droite"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"Développer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Réduire <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Paramètres <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Fermer la bulle"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne pas afficher la conversation dans une bulle"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Aucune bulle récente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Les bulles récentes et ignorées s\'afficheront ici"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatter via des bulles"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Les nouvelles conversations apparaissent sous forme d\'icônes dans l\'un des coins inférieurs de votre écran. Appuyez dessus pour les développer ou faites-les glisser pour les supprimer."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Contrôlez les bulles à tout moment"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Appuyez ici pour gérer les applis et conversations s\'affichant dans des bulles"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string> diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml index 8693e42118fcef164058ea48c68dd838e848674b..bf3a45b4648487e68abe78bc433c4fad5991e987 100644 --- a/libs/WindowManager/Shell/res/values-gl/strings.xml +++ b/libs/WindowManager/Shell/res/values-gl/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover á parte superior dereita"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover á parte infer. esquerda"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover á parte inferior dereita"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"despregar <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"contraer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Configuración de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorar burbulla"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Non mostrar a conversa como burbulla"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Entendido"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Non hai burbullas recentes"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"As burbullas recentes e ignoradas aparecerán aquÃ."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatea usando burbullas"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"As conversas novas móstranse como iconas nunha das esquinas inferiores da pantalla. Tócaas para amplialas ou arrástraas para pechalas."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controlar as burbullas"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toca para xestionar as aplicacións e conversas que poden aparecer en burbullas"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulla"</string> diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml index a7cdf7352189a0bfd31a519211942eb2f1b3ae9d..84c81823062192694a13f61006cf7cf74b12fb1a 100644 --- a/libs/WindowManager/Shell/res/values-gu/strings.xml +++ b/libs/WindowManager/Shell/res/values-gu/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ઉપર જમણે ખસેડો"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"નીચે ડાબે ખસેડો"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"નીચે જમણે ખસેડો"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> મોટà«àª‚ કરો"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> નાનà«àª‚ કરો"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> સેટિંગ"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"બબલને છોડી દો"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"વાતચીતને બબલ કરશો નહીં"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"સમજાઈ ગયà«àª‚"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"તાજેતરના કોઈ બબલ નથી"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"àªàª•દમ નવા બબલ અને છોડી દીધેલા બબલ અહીં દેખાશે"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"બબલનો ઉપયોગ કરીને ચૅટ કરો"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"નવી વાતચીતો તમારી સà«àª•à«àª°à«€àª¨àª¨àª¾ નીચેના ખૂણામાં આઇકન તરીકે દેખાય છે. તેમને મોટી કરવા માટે, તેમના પર ટૅપ કરો અથવા તેમને છોડી દેવા માટે, તેમને ખેંચો."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"બબલને કોઈપણ સમયે નિયંતà«àª°àª¿àª¤ કરે છે"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"કઈ àªàªª અને વાતચીતોને બબલ કરવા માગો છો તે મેનેજ કરવા માટે, અહીં ટૅપ કરો"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"બબલ"</string> diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml index 13e0258ce87b8b608ddfaa730be308afadbfa545..8068f50d9cf6f289294de0699409df518c36e28c 100644 --- a/libs/WindowManager/Shell/res/values-hi/strings.xml +++ b/libs/WindowManager/Shell/res/values-hi/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"सबसे ऊपर दाईं ओर ले जाà¤à¤‚"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"बाईं ओर सबसे नीचे ले जाà¤à¤‚"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"सबसे नीचे दाईं ओर ले जाà¤à¤‚"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> को बड़ा करें"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> को छोटा करें"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> की सेटिंग"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल खारिज करें"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"बातचीत को बबल न करें"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ठीक है"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"हाल ही के कोई बबलà¥à¤¸ नहीं हैं"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"हाल ही के बबलà¥à¤¸ और हटाठगठबबलà¥à¤¸ यहां दिखेंगे"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"बबलà¥à¤¸ का इसà¥à¤¤à¥‡à¤®à¤¾à¤² करके चैट करें"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"नई बातचीत, आपकी सà¥à¤•à¥à¤°à¥€à¤¨ पर सबसे नीचे आइकॉन के तौर पर दिखती हैं. किसी आइकॉन को बड़ा करने के लिठउस पर टैप करें या खारिज करने के लिठउसे खींचें और छोड़ें."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"जब चाहें, बबलà¥à¤¸ की सà¥à¤µà¤¿à¤§à¤¾ को कंटà¥à¤°à¥‹à¤² करें"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"किसी à¤à¤ªà¥à¤²à¤¿à¤•ेशन और बातचीत के लिठबबल की सà¥à¤µà¤¿à¤§à¤¾ को मैनेज करने के लिठयहां टैप करें"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml index 957e56c35e8793799e89d7203e4014a0c859e07d..5f0b866ee4ded2120f5846247dd703a462021a46 100644 --- a/libs/WindowManager/Shell/res/values-hr/strings.xml +++ b/libs/WindowManager/Shell/res/values-hr/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Premjesti u gornji desni kut"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Premjesti u donji lijevi kut"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premjestite u donji desni kut"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"proÅ¡irite oblaÄić <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"sažmite oblaÄić <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Postavke za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblaÄić"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Zaustavi razgovor u oblaÄićima"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Shvaćam"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nema nedavnih oblaÄića"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ovdje će se prikazivati nedavni i odbaÄeni oblaÄići"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"OblaÄići u chatu"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Novi se razgovori prikazuju kao ikone u donjem kutu zaslona. Dodirnite da biste ih proÅ¡irili ili ih povucite da biste ih odbacili."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljanje oblaÄićima u svakom trenutku"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dodirnite ovdje da biste odredili koje aplikacije i razgovori mogu imati oblaÄić"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"OblaÄić"</string> diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml index e9808ac6c2be7ec437906e941fd6f7d69147a242..d89e2923b5fe0a8d5cdac0b51419cb10570d6423 100644 --- a/libs/WindowManager/Shell/res/values-hu/strings.xml +++ b/libs/WindowManager/Shell/res/values-hu/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Ãthelyezés fel és jobbra"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Ãthelyezés le és balra"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Ãthelyezés le és jobbra"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> kibontása"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> összecsukása"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> beállÃtásai"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Buborék elvetése"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne jelenjen meg a beszélgetés buborékban"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Értem"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nincsenek buborékok a közelmúltból"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"A legutóbbi és az elvetett buborékok itt jelennek majd meg"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Buborékokat használó csevegés"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Az új beszélgetések ikonokként jelennek meg a képernyÅ‘ alsó sarkában. Koppintással kibonthatja, húzással pedig elvetheti Å‘ket."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Buborékok vezérlése bármikor"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ide koppintva jelenÃthetÅ‘k meg az alkalmazások és a beszélgetések buborékként"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Buborék"</string> diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml index 8a9d89bd879f9287024e5934f3b9cd77ef050fe1..9c517b29d29156a1f59ed5c398f823abb20998ba 100644 --- a/libs/WindowManager/Shell/res/values-hy/strings.xml +++ b/libs/WindowManager/Shell/res/values-hy/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ¾Õ¥Ö€Ö‡Õ Õ¡Õ»"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ¶Õ¥Ö€Ö„Ö‡Õ Õ±Õ¡Õ"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ¶Õ¥Ö€Ö„Ö‡Õ Õ¡Õ»"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>. Õ®Õ¡Õ¾Õ¡Õ¬Õ¥Õ¬"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>. Õ®Õ¡Õ¬Õ¥Õ¬"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> – Õ¯Õ¡Ö€Õ£Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Õ“Õ¡Õ¯Õ¥Õ¬ Õ¡Õ´ÕºÕ«Õ¯Õ¨"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ô¶Ö€Õ¸Ö‚ÕµÖÕ¨ Õ¹ÖÕ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ¡Õ´ÕºÕ«Õ¯Õ« Õ¿Õ¥Õ½Ö„Õ¸Õ¾"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ÔµÕ²Õ¡Õ¾"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ô±Õ´ÕºÕ«Õ¯Õ¶Õ¥Ö€ Õ¹Õ¯Õ¡Õ¶"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ô±ÕµÕ½Õ¿Õ¥Õ² Õ¯ÖÕ¸Ö‚ÖÕ¡Õ¤Ö€Õ¾Õ¥Õ¶ Õ¾Õ¥Ö€Õ»Õ¥Ö€Õ½ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¡Õ® Ö‡ ÖƒÕ¡Õ¯Õ¾Õ¡Õ® Õ¡Õ´ÕºÕ«Õ¯Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö„ Õ¯Õ¯Õ¡Ö€Õ¸Õ²Õ¡Õ¶Õ¡Ö„ Õ°Õ¥Õ·Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¾Õ¥Ö€Õ¡Õ¢Õ¡ÖÕ¥Õ¬"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Ô¶Ö€Õ¸Ö‚ÕµÖÕ« Õ¡Õ´ÕºÕ«Õ¯Õ¶Õ¥Ö€"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Õ†Õ¸Ö€ Õ¦Ö€Õ¸Ö‚ÕµÖÕ¶Õ¥Ö€Õ¨ Õ°Õ¡ÕµÕ¿Õ¶Õ¾Õ¸Ö‚Õ´ Õ¥Õ¶ Õ¸Ö€ÕºÕ¥Õ½ ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¡Õ¯Õ¶Õ¥Ö€ Õ§Õ¯Ö€Õ¡Õ¶Õ« Õ¶Õ¥Ö€Ö„Ö‡Õ« Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¸Ö‚Õ´Ö‰ Õ€ÕºÕ¥Ö„Õ Õ¤Ö€Õ¡Õ¶Ö„ Õ®Õ¡Õ¾Õ¡Õ¬Õ¥Õ¬Õ¸Ö‚, Õ¯Õ¡Õ´ Ö„Õ¡Õ·Õ¥Ö„Õ Õ´Õ¥Ö€ÕªÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ô±Õ´ÕºÕ«Õ¯Õ¶Õ¥Ö€Õ« Õ¯Õ¡Ö€Õ£Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Õ€ÕºÕ¥Ö„ Õ¡ÕµÕ½Õ¿Õ¥Õ²Õ Õ¨Õ¶Õ¿Ö€Õ¥Õ¬Õ¸Ö‚, Õ©Õ¥ Õ¸Ö€ Õ°Õ¡Õ¾Õ¥Õ¬Õ¾Õ¡Õ®Õ¶Õ¥Ö€Õ« Ö‡ Õ¦Ö€Õ¸Ö‚ÕµÖÕ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€ Õ¡Õ´ÕºÕ«Õ¯Õ¶Õ¥Ö€ ÖÕ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ÕŠÕ²ÕºÕ»Õ¡Õ¯"</string> diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml index 6b84a1d9bdacb2b84f944f99dc0114cc40758c5e..3dbd75087382653e6af7b7312c837858d6bf8c8d 100644 --- a/libs/WindowManager/Shell/res/values-in/strings.xml +++ b/libs/WindowManager/Shell/res/values-in/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Pindahkan ke kanan atas"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Pindahkan ke kiri bawah"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Pindahkan ke kanan bawah"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"luaskan <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"ciutkan <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Setelan <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Tutup balon"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Jangan gunakan percakapan balon"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Oke"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Tidak ada balon baru-baru ini"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Balon yang baru dipakai dan balon yang telah ditutup akan muncul di sini"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat dalam tampilan balon"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Percakapan baru muncul sebagai ikon di bagian pojok bawah layar. Ketuk untuk meluaskan percakapan atau tarik untuk menutup percakapan."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrol balon kapan saja"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ketuk di sini untuk mengelola balon aplikasi dan percakapan"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string> diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml index 913e1964c4dfdd914f63890e5244b81f97bdf3a5..2927d6a0d8ecacefd6da54511b26705e3e43e981 100644 --- a/libs/WindowManager/Shell/res/values-is/strings.xml +++ b/libs/WindowManager/Shell/res/values-is/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Færa efst til hægri"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Færa neðst til vinstri"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Færðu neðst til hægri"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"stækka <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"minnka <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Stillingar <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Loka blöðru"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ekki setja samtal à blöðru"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ég skil"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Engar nýlegar blöðrur"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nýlegar blöðrur og blöðrur sem þú hefur lokað birtast hér"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Spjall með blöðrum"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ný samtöl birtast sem tákn neðst á horni skjásins. Ãttu til að stækka þau eða dragðu til að hunsa þau."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Hægt er að stjórna blöðrum hvenær sem er"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ãttu hér til að stjórna þvà hvaða forrit og samtöl mega nota blöðrur."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Blaðra"</string> diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml index 575210bffc7d73281679b090ef188ce53a48d754..938a814663814629b76a2ea91ac312f5666670f5 100644 --- a/libs/WindowManager/Shell/res/values-it/strings.xml +++ b/libs/WindowManager/Shell/res/values-it/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Sposta in alto a destra"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Sposta in basso a sinistra"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Sposta in basso a destra"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"espandi <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"comprimi <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Impostazioni <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignora bolla"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Non mettere la conversazione nella bolla"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nessuna bolla recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Le bolle recenti e ignorate appariranno qui"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatta utilizzando le bolle"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Le nuove conversazioni vengono visualizzate sotto forma di icone in un angolo inferiore dello schermo. Tocca per espanderle o trascina per chiuderle."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Gestisci le bolle in qualsiasi momento"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tocca qui per gestire le app e le conversazioni per cui mostrare le bolle"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Fumetto"</string> diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml index fbc384f1be67d5e41b1d59acd25d712b93d16a8a..aaa0a38660310fce71d705b43f34b1b995240ec3 100644 --- a/libs/WindowManager/Shell/res/values-iw/strings.xml +++ b/libs/WindowManager/Shell/res/values-iw/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"העברה ×œ×¤×™× ×” ×”×™×ž× ×™×ª ×”×¢×œ×™×•× ×”"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"העברה ×œ×¤×™× ×” השמ×לית ×”×ª×—×ª×•× ×”"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"העברה ×œ×¤×™× ×” ×”×™×ž× ×™×ª ×”×ª×—×ª×•× ×”"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"הרחבה של <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"כיווץ של <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"הגדרות <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"סגירת בועה"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"×ין להציג בועות לשיחה"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"×”×‘× ×ª×™"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"×ין בועות מהזמן ×”×חרון"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"בועות ××—×¨×•× ×•×ª ובועות ×©× ×¡×’×¨×• יופיעו ×›×ן"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"צ\'×ט בבועות"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"שיחות חדשות מופיעות ×›×¡×ž×œ×™× ×‘×¤×™× ×” ×”×ª×—×ª×•× ×” של המסך. ×פשר להקיש כדי להרחיב ×ותן ×ו לגרור כדי לסגור ×ותן."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"שליטה בבועות בכל זמן"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"×פשר להקיש ×›×ן כדי לקבוע ×ילו ×פליקציות ושיחות יוכלו להופיע בבועות"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"בועה"</string> diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml index dce3a18f8cd08d853a80124415ba5013ceb7abc7..1979fd52e5bb4b0c4559bb7e16671a32a7c2871e 100644 --- a/libs/WindowManager/Shell/res/values-ja/strings.xml +++ b/libs/WindowManager/Shell/res/values-ja/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"å³ä¸Šã«ç§»å‹•"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"左下ã«ç§»å‹•"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"å³ä¸‹ã«ç§»å‹•"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ã‚’é–‹ãã¾ã™"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ã‚’é–‰ã˜ã¾ã™"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ã®è¨å®š"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ãƒãƒ–ルを閉ã˜ã‚‹"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"会話をãƒãƒ–ルã§è¡¨ç¤ºã—ãªã„"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"最近閉ã˜ãŸãƒãƒ–ルã¯ã‚りã¾ã›ã‚“"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近表示ã•れãŸãƒãƒ–ルや閉ã˜ãŸãƒãƒ–ルãŒã€ã“ã“ã«è¡¨ç¤ºã•れã¾ã™"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ãƒãƒ£ãƒƒãƒˆã§ãƒãƒ–ルを使ã†"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"æ–°ã—ã„会話ãŒã‚¢ã‚¤ã‚³ãƒ³ã¨ã—ã¦ç”»é¢ä¸‹éƒ¨ã«è¡¨ç¤ºã•れã¾ã™ã€‚タップã™ã‚‹ã¨é–‹ãã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é–‰ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ãƒãƒ–ルã¯ã„ã¤ã§ã‚‚管ç†å¯èƒ½"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ãƒãƒ–ルã§è¡¨ç¤ºã™ã‚‹ã‚¢ãƒ—リや会話を管ç†ã™ã‚‹ã«ã¯ã€ã“ã“をタップã—ã¾ã™"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ãƒãƒ–ル"</string> diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml index b396c8c89046388dfef46fa06e137eca4aa50e27..ce1ce64026376d76cad98b4c2ba27f60215ca5c5 100644 --- a/libs/WindowManager/Shell/res/values-ka/strings.xml +++ b/libs/WindowManager/Shell/res/values-ka/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"გáƒáƒ“áƒáƒáƒœáƒáƒªáƒ•ლეთ ზევით დრმáƒáƒ ჯვნივ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ქვევით დრმáƒáƒ ცხნივ გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"გáƒáƒ“áƒáƒáƒœáƒáƒªáƒ•. ქვემáƒáƒ— დრმáƒáƒ ჯვნივ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>-ის გáƒáƒ¤áƒáƒ თáƒáƒ”ბáƒ"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>-ის ჩáƒáƒ™áƒ”ცვáƒ"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-ის პáƒáƒ áƒáƒ›áƒ”ტრები"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ბუშტის დáƒáƒ®áƒ£áƒ ვáƒ"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"áƒáƒ˜áƒ™áƒ ძáƒáƒšáƒáƒ¡ სáƒáƒ£áƒ‘რის ბუშტები"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"გáƒáƒ¡áƒáƒ’ებიáƒ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ბáƒáƒšáƒ დრáƒáƒ¡ გáƒáƒ›áƒáƒ§áƒ”ნებული ბუშტები áƒáƒ áƒáƒ ის"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"áƒáƒ¥ გáƒáƒ›áƒáƒ©áƒœáƒ“ებრბáƒáƒšáƒáƒ“რáƒáƒ˜áƒœáƒ“ელი ბუშტები დრუáƒáƒ ყáƒáƒ¤áƒ˜áƒšáƒ˜ ბუშტები"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ჩეთი ბუშტების გáƒáƒ›áƒáƒ§áƒ”ნებით"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"áƒáƒ®áƒáƒšáƒ˜ სáƒáƒ£áƒ‘რები ხáƒáƒ¢áƒ£áƒšáƒáƒ¡ სáƒáƒ®áƒ˜áƒ— გáƒáƒ›áƒáƒ©áƒœáƒ“ებრთქვენი ეკრáƒáƒœáƒ˜áƒ¡ ქვედრკუთხეში. შეეხეთ გáƒáƒ¡áƒáƒ¤áƒáƒ თáƒáƒ”ბლáƒáƒ“ დრჩáƒáƒáƒ•ლეთ მáƒáƒ— დáƒáƒ¡áƒáƒ®áƒ£áƒ áƒáƒ“."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"áƒáƒ›áƒáƒ®áƒ¢áƒáƒ›áƒ˜áƒ¡ გáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ”ბრნებისმიერდრáƒáƒ¡"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"áƒáƒ¥ შეეხეთ იმის სáƒáƒ›áƒáƒ თáƒáƒ•áƒáƒ“, თუ რáƒáƒ›áƒ”ლი áƒáƒžáƒ”ბი დრსáƒáƒ£áƒ‘რები áƒáƒ›áƒáƒ®áƒ¢áƒ”ს"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ბუშტი"</string> diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml index 63ef3d2000ddd5cf71d1ceb26af71de10f688ba5..b4b05072f4a4d10762ee694ed97d3168921e2c86 100644 --- a/libs/WindowManager/Shell/res/values-kk/strings.xml +++ b/libs/WindowManager/Shell/res/values-kk/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Жоғары оң жаққа жылжыту"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Төменгі Ñол жаққа жылжыту"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Төменгі оң жаққа жылжыту"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>: жаю"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>: жию"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> параметрлері"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Қалқымалы хабарды жабу"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Әңгіменің қалқыма хабары көрÑетілмеÑін"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ТүÑінікті"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Жақындағы қалқыма хабарлар жоқ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Соңғы және жабылған қалқыма хабарлар оÑÑ‹ жерде көрÑетіледі."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Қалқыма хабарлар арқылы чатта ÑөйлеÑу"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Жаңа әңгімелер Ñкранның төменгі бөлігінде белгіше түрінде көрÑетіледі. Оларды жаю үшін түртіңіз, ал жабу үшін Ñүйреңіз."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Қалқыма хабарларды кез келген уақытта баÑқарыңыз"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Қалқыма хабарда көрÑетілетін қолданбалар мен әңгімелерді реттеу үшін оÑÑ‹ жерді түртіңіз."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Көпіршік"</string> diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml index 2ce8ba37b3bfe474b08d18c030661de8dc94a103..9b0a0dad57821bc6c26bf2cda88a23afa50f5728 100644 --- a/libs/WindowManager/Shell/res/values-km/strings.xml +++ b/libs/WindowManager/Shell/res/values-km/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ផ្លាស់ទីទៅផ្នែកážáž¶áž„លើážáž¶áž„ស្ដាំ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ផ្លាស់ទីទៅផ្នែកážáž¶áž„ក្រោមážáž¶áž„ឆ្វáŸáž„​"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ផ្លាស់ទីទៅផ្នែកážáž¶áž„ក្រោម​ážáž¶áž„ស្ដាំ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ពង្រីក <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"បង្រួម <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"ការកំណážáŸ‹ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ច្រានចោល​ពពុះ"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"កុំបង្ហាញ​ការសន្ទនា​ជាពពុះ"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"យល់ហើយ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"មិនមាន​ពពុះ​ážáŸ’មីៗ​ទáŸ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ពពុះážáŸ’មីៗ​ និង​ពពុះដែលបានបិទ​​នឹង​បង្ហាញ​នៅទីនáŸáŸ‡"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ជជែក​ដោយប្រើ​ផ្ទាំងអណ្ដែáž"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ការសន្ទនាážáŸ’មីៗបង្ហាញជារូបážáŸ†ážŽáž¶áž„នៅជ្រុងážáž¶áž„ក្រោមនៃអáŸáž€áŸ’រង់របស់អ្នក។ សូមចុច ដើម្បីពង្រីកការសន្ទនាទាំងនោះ ឬអូស ដើម្បីច្រានចោល។"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"គ្រប់គ្រង​ផ្ទាំងអណ្ដែážáž“ៅពáŸáž›ážŽáž¶áž€áŸáž”áž¶áž“"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ចុចážáŸ’រង់នáŸáŸ‡ ដើម្បីគ្រប់គ្រងកម្មវិធី និងការសន្ទនាដែលអាចបង្ហាញជាផ្ទាំងអណ្ដែáž"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ពពុះ"</string> diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml index 4b8aaa93b2a7b201fbfaa4c950382ca1954dc5d8..b19978aa09d7ecb11808b73d0fc2a752a3cf470e 100644 --- a/libs/WindowManager/Shell/res/values-kn/strings.xml +++ b/libs/WindowManager/Shell/res/values-kn/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ಬಲ ಮೇಲà³à²à²¾à²—ಕà³à²•ೆ ಸರಿಸಿ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ಸà³à²•à³à²°à³€à²¨à³â€Œà²¨ ಎಡ ಕೆಳà²à²¾à²—ಕà³à²•ೆ ಸರಿಸಿ"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ಕೆಳಗಿನ ಬಲà²à²¾à²—ಕà³à²•ೆ ಸರಿಸಿ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ಅನà³à²¨à³ ವಿಸà³à²¤à³ƒà²¤à²—ೊಳಿಸಿ"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ಅನà³à²¨à³ ಕà³à²—à³à²—ಿಸಿ"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ಸೆಟà³à²Ÿà²¿à²‚ಗà³â€Œà²—ಳà³"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ಬಬಲೠವಜಾಗೊಳಿಸಿ"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ಸಂà²à²¾à²·à²£à³†à²¯à²¨à³à²¨à³ ಬಬಲೠಮಾಡಬೇಡಿ"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ಅರà³à²¥à²µà²¾à²¯à²¿à²¤à³"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ಯಾವà³à²¦à³‡ ಇತà³à²¤à³€à²šà²¿à²¨ ಬಬಲà³à²¸à³ ಇಲà³à²²"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ಇತà³à²¤à³€à²šà²¿à²¨ ಬಬಲà³à²¸à³ ಮತà³à²¤à³ ವಜಾಗೊಳಿಸಿದ ಬಬಲà³à²¸à³ ಇಲà³à²²à²¿ ಗೋಚರಿಸà³à²¤à³à²¤à²µà³†"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ಬಬಲà³à²¸à³ ಬಳಸಿ ಚಾಟೠಮಾಡಿ"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ಹೊಸ ಸಂà²à²¾à²·à²£à³†à²—ಳೠನಿಮà³à²® ಸà³à²•à³à²°à³€à²¨à³ ಕೆಳಗಿನ ಮೂಲೆಯಲà³à²²à²¿ à²à²•ಾನà³â€Œà²—ಳಾಗಿ ಗೋಚರಿಸà³à²¤à³à²¤à²µà³†. ವಿಸà³à²¤à²°à²¿à²¸à²²à³ ಅವà³à²—ಳನà³à²¨à³ ಟà³à²¯à²¾à²ªà³ ಮಾಡಿ ಅಥವಾ ವಜಾಗೊಳಿಸಲೠಡà³à²°à³à²¯à²¾à²—ೠಮಾಡಿ."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ಯಾವà³à²¦à³‡ ಸಮಯದಲà³à²²à²¿ ಬಬಲà³à²¸à³ ಅನà³à²¨à³ ನಿಯಂತà³à²°à²¿à²¸à²¿"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ಯಾವ ಆà³à²¯à²ªà³â€Œà²—ಳೠಮತà³à²¤à³ ಸಂà²à²¾à²·à²£à³†à²—ಳನà³à²¨à³ ಬಬಲೠಮಾಡಬಹà³à²¦à³ ಎಂಬà³à²¦à²¨à³à²¨à³ ನಿರà³à²µà²¹à²¿à²¸à²²à³ ಟà³à²¯à²¾à²ªà³ ಮಾಡಿ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ಬಬಲà³"</string> diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml index ffa77b0dc0e2c13f0fa3dc1891b82d1ea58321cc..af08da9d6e655914ba2acb31857f76b8a1dfa1f7 100644 --- a/libs/WindowManager/Shell/res/values-ko/strings.xml +++ b/libs/WindowManager/Shell/res/values-ko/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"오른쪽 ìƒë‹¨ìœ¼ë¡œ ì´ë™"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"왼쪽 하단으로 ì´ë™"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"오른쪽 하단으로 ì´ë™"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> 펼치기"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ì ‘ê¸°"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ì„¤ì •"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"대화창 닫기"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"대화를 대화창으로 표시하지 않기"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"확ì¸"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"최근 대화창 ì—†ìŒ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"최근 대화창과 ë‚´ê°€ ë‹«ì€ ëŒ€í™”ì°½ì´ ì—¬ê¸°ì— í‘œì‹œë©ë‹ˆë‹¤."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"대화창으로 채팅하기"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"새 대화는 화면 í•˜ë‹¨ì— ì•„ì´ì½˜ìœ¼ë¡œ 표시ë©ë‹ˆë‹¤. ì•„ì´ì½˜ì„ íƒí•˜ì—¬ 펼치거나 드래그하여 닫습니다."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ì–¸ì œë“ ì§€ ëŒ€í™”ì°½ì„ ì œì–´í•˜ì„¸ìš”"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ëŒ€í™”ì°½ì„ ë§Œë“¤ 수 있는 앱과 대화를 ê´€ë¦¬í•˜ë ¤ë©´ 여기를 íƒí•˜ì„¸ìš”."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"버블"</string> diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml index b74875c5885a23ba8c0c5fa4991811c8e937f352..be24cefbaf914bf382782d48303348a314f3eaf5 100644 --- a/libs/WindowManager/Shell/res/values-ky/strings.xml +++ b/libs/WindowManager/Shell/res/values-ky/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Жогорку оң жакка жылдыруу"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Төмөнкү Ñол жакка жылдыруу"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Төмөнкү оң жакка жылдыруу"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> жайып көрÑөтүү"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> жыйыштыруу"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> параметрлери"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Калкып чыкма билдирмени жабуу"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Жазышууда калкып чыкма билдирмелер көрүнбөÑүн"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Түшүндүм"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ðзырынча Ñч нерÑе жок"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ðкыркы жана жабылган калкып чыкма билдирмелер ушул жерде көрүнөт"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Калкып чыкма билдирмелер аркылуу маектешүү"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Жаңы Ñүйлөшүүлөр Ñкраныңыздын төмөнкү бурчунда Ñүрөтчөлөр катары көрүнөт. Ðларды жайып көрÑөтүү үчүн таптап же четке кагуу үчүн Ñүйрөңүз."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Калкып чыкма билдирмелерди каалаган убакта көзөмөлдөңүз"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Калкып чыкма билдирме түрүндө көрүнө турган колдонмолор менен маектерди тандоо үчүн бул жерди таптаңыз"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Көбүк"</string> diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml index 3e1ab6d28eebc95e7f5a5c7485746bbf3c29ec52..41219eec986cbc3c05d74f579b90911aa2423916 100644 --- a/libs/WindowManager/Shell/res/values-lo/strings.xml +++ b/libs/WindowManager/Shell/res/values-lo/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"àºà»‰àº²àºàº‚ວາເທິງ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"àºà»‰àº²àºàºŠà»‰àº²àºàº¥àº¸à»ˆàº¡"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"àºà»‰àº²àºàº‚ວາລຸ່ມ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ຂະຫàºàº²àº <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"ຫàºà»à»‰ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ລົງ"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"àºàº²àº™àº•ັ້ງຄ່າ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ປິດຟàºàº‡à»„ວ້"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ຢ່າໃຊ້ຟàºàº‡à»ƒàº™àºàº²àº™àºªàº»àº™àº—ະນາ"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ເຂົ້າໃຈà»àº¥à»‰àº§"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ບà»à»ˆàº¡àºµàºŸàºàº‡àº«àº¼à»‰àº²àºªàº¸àº”"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ຟàºàº‡àº«àº¼à»‰àº²àºªàº¸àº” à»àº¥àº° ຟàºàº‡àº—ີ່ປິດໄປຈະປາàºàº»àº”ຢູ່ບ່àºàº™àº™àºµà»‰"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ສົນທະນາໂດàºà»ƒàºŠà»‰àºŸàºàº‡"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"àºàº²àº™àºªàº»àº™àº—ະນາໃà»à»ˆà»†àºˆàº°àº›àº²àºàº»àº”ເປັນໄàºàº„àºàº™àº¢àº¹à»ˆàº¡àº¸àº¡àº¥àº¸à»ˆàº¡àºªàº¸àº”ຂàºàº‡à»œà»‰àº²àºˆà»àº‚àºàº‡àº—່ານ. à»àº•ະເພື່àºàº‚ະຫàºàº²àº ຫຼື ລາàºà»€àºžàº·à»ˆàºàº›àº´àº”ໄວ້."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ຄວບຄຸມຟàºàº‡à»„ດ້ທຸàºà»€àº§àº¥àº²"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"à»àº•ະບ່àºàº™àº™àºµà»‰à»€àºžàº·à»ˆàºàºˆàº±àº”àºàº²àº™à»àºàº±àºš à»àº¥àº° àºàº²àº™àºªàº»àº™àº—ະນາທີ່ສາມາດສະà»àº”ງເປັນà»àºšàºšàºŸàºàº‡à»„ດ້"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ຟàºàº‡"</string> diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml index f4751aae323d0b4ef7499bffb710cee4031947cc..b98fce8f8a3f69bdf1b36e168d7967de9ad82b02 100644 --- a/libs/WindowManager/Shell/res/values-lt/strings.xml +++ b/libs/WindowManager/Shell/res/values-lt/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Perkelti į viršų deÅ¡inÄ—je"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Perkelti į apaÄiÄ… kairÄ—je"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Perkelti į apaÄiÄ… deÅ¡inÄ—je"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"iÅ¡skleisti „<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>“"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"sutraukti „<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>“"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"„<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>“ nustatymai"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Atsisakyti burbulo"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nerodyti pokalbio burbule"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Supratau"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"NÄ—ra naujausių burbulų"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Naujausi ir atsisakyti burbulai bus rodomi Äia"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Pokalbis naudojant burbulus"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nauji pokalbiai rodomi kaip piktogramos apatiniame ekrano kampe. Palieskite piktogramÄ…, jei norite iÅ¡plÄ—sti pokalbį, arba nuvilkite, kad atsisakytumÄ—te."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bet kada valdyti burbulus"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"PalietÄ™ Äia valdykite, kurie pokalbiai ir programos gali bÅ«ti rodomi burbuluose"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"DebesÄ—lis"</string> diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml index 5fab5778d3d540b073b380bf11e2138a7ded9d2c..11b645ef80b777e9eee616bea4875addb5728481 100644 --- a/libs/WindowManager/Shell/res/values-lv/strings.xml +++ b/libs/WindowManager/Shell/res/values-lv/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"PÄrvietot augÅ¡pusÄ“ pa labi"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"PÄrvietot apakÅ¡pusÄ“ pa kreisi"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"PÄrvietot apakÅ¡pusÄ“ pa labi"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"IzvÄ“rst “<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>â€"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Sakļaut “<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>â€"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Lietotnes <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> iestatÄ«jumi"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"NerÄdÄ«t burbuli"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"NerÄdÄ«t sarunu burbuļos"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Labi"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nav nesen aizvÄ“rtu burbuļu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Å eit bÅ«s redzami nesen rÄdÄ«tie burbuļi un aizvÄ“rtie burbuļi"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"TÄ“rzēšana, izmantojot burbuļus"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Jaunas sarunas tiek parÄdÄ«tas kÄ ikonas jÅ«su ekrÄna apakšējÄ stÅ«rÄ«. Varat pieskarties, lai tÄs izvÄ“rstu, vai vilkt, lai tÄs noraidÄ«tu."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"PÄrvaldÄ«t burbuļus jebkurÄ laikÄ"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Pieskarieties Å¡eit, lai pÄrvaldÄ«tu, kuras lietotnes un sarunas var rÄdÄ«t burbulÄ«"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulis"</string> diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml index 906fc094ea5a93f93864026649df96c45e550341..ba2c97a4f29f57ed71699d2ff0573c5cba07f505 100644 --- a/libs/WindowManager/Shell/res/values-mk/strings.xml +++ b/libs/WindowManager/Shell/res/values-mk/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПремеÑти горе деÑно"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПремеÑти долу лево"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПремеÑти долу деÑно"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"прошири <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Ñобери <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"ПоÑтавки за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Отфрли балонче"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ðе прикажувај го разговорот во балончиња"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Сфатив"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ðема неодамнешни балончиња"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Ðеодамнешните и отфрлените балончиња ќе Ñе појавуваат тука"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Разговор Ñо балончиња"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ðовите разговори Ñе појавуваат како икони во долниот агол од екранот. Допрете за да ги проширите или повлечете за да ги отфрлите."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контролирајте ги балончињата во Ñекое време"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Допрете тука за да одредите на кои апл. и разговори може да Ñе појават балончиња"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string> diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml index 65e6d2c4c8e7007d2de297002aa20022c34d8fa7..8a95d7ef157c3de9089bd5a36ef38716ec30bfcc 100644 --- a/libs/WindowManager/Shell/res/values-ml/strings.xml +++ b/libs/WindowManager/Shell/res/values-ml/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"à´®àµà´•ളിൽ വലതàµà´à´¾à´—à´¤àµà´¤àµ‡à´•àµà´•ൠനീകàµà´•àµà´•"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"à´šàµà´µà´Ÿàµ† ഇടതàµà´à´¾à´—à´¤àµà´¤àµ‡à´•àµà´•ൠനീകàµà´•àµà´•"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"à´šàµà´µà´Ÿàµ† വലതàµà´à´¾à´—à´¤àµà´¤àµ‡à´•àµà´•ൠനീകàµà´•àµà´•"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> വികസിപàµà´ªà´¿à´•àµà´•àµà´•"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> à´šàµà´°àµà´•àµà´•àµà´•"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> à´•àµà´°à´®àµ€à´•രണം"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ബബിൾ à´¡à´¿à´¸àµà´®à´¿à´¸àµ ചെയàµà´¯àµ‚"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"സംà´à´¾à´·à´£à´‚ ബബിൾ ചെയàµà´¯à´°àµà´¤àµ"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"മനസàµà´¸à´¿à´²à´¾à´¯à´¿"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"à´…à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµ†à´¯àµà´³àµà´³ ബബിളàµà´•ൾ à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"à´…à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµ†à´¯àµà´³àµà´³ ബബിളàµà´•ൾ, à´¡à´¿à´¸àµà´®à´¿à´¸àµ ചെയàµà´¤ ബബിളàµà´•ൾ à´Žà´¨àµà´¨à´¿à´µ ഇവിടെ ദൃശàµà´¯à´®à´¾à´µàµà´‚"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ബബിളàµà´•ൾ ഉപയോഗിചàµà´šàµ ചാറàµà´±àµ ചെയàµà´¯àµà´•"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"à´ªàµà´¤à´¿à´¯ സംà´à´¾à´·à´£à´™àµà´™àµ¾, നിങàµà´™à´³àµà´Ÿàµ† à´¸àµà´•àµà´°àµ€à´¨à´¿à´¨àµà´±àµ† താഴെ മൂലയിൽ à´à´•àµà´•à´£àµà´•ളായി ദൃശàµà´¯à´®à´¾à´•àµà´‚. വികസിപàµà´ªà´¿à´•àµà´•ാൻ അവയിൽ ടാപàµà´ªàµ ചെയàµà´¯àµà´• à´…à´²àµà´²àµ†à´™àµà´•ിൽ à´¡à´¿à´¸àµâ€Œà´®à´¿à´¸àµ ചെയàµà´¯à´¾àµ» വലിചàµà´šà´¿à´Ÿàµà´•."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ബബിളàµà´•ൾ à´à´¤àµà´¸à´®à´¯à´¤àµà´¤àµà´‚ നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´•"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"à´à´¤àµŠà´•àµà´•െ ആപàµà´ªàµà´•à´³àµà´‚ സംà´à´¾à´·à´£à´™àµà´™à´³àµà´‚ ബബിൾ ചെയàµà´¯à´¾à´¨à´¾à´•àµà´®àµ†à´¨àµà´¨à´¤àµ മാനേജൠചെയàµà´¯à´¾àµ» ഇവിടെ ടാപàµà´ªàµ ചെയàµà´¯àµà´•"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ബബിൾ"</string> diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml index 44c594691e365228ac64a8e65ea40e0e0d145099..bead7fe0d1c79d9ce4730f87c9126790f9656901 100644 --- a/libs/WindowManager/Shell/res/values-mn/strings.xml +++ b/libs/WindowManager/Shell/res/values-mn/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Баруун дÑÑш зөөх"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Зүүн доош зөөх"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Баруун доош зөөх"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>-г дÑлгÑÑ…"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>-г хураах"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-н тохиргоо"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Бөмбөлгийг хаах"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Харилцан Ñриаг бүү бөмбөлөг болго"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ойлголоо"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"СаÑхны бөмбөлөг алга байна"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"СаÑхны бөмбөлгүүд болон үл Ñ…ÑÑ€ÑгÑÑÑн бөмбөлгүүд Ñнд харагдана"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Бөмбөлгүүд ашиглан чатлах"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ð¨Ð¸Ð½Ñ Ñ…Ð°Ñ€Ð¸Ð»Ñ†Ð°Ð½ Ñрианууд таны дÑлгÑцийн доод буланд Ð´Ò¯Ñ€Ñ Ñ‚ÑмдÑг байдлаар харагдана. ТÑдгÑÑрийг дÑлгÑхийн тулд товших ÑÑвÑл хаахын тулд Ñ‡Ð¸Ñ€Ð½Ñ Ò¯Ò¯."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Бөмбөлгүүдийг Ñ…Ò¯ÑÑÑн үедÑÑ Ñ…Ñнах"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ямар апп болон харилцан Ñрианууд бөмбөлгөөр харагдахыг Ñнд удирдана уу"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Бөмбөлөг"</string> diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml index bd898c4395eefad0d5c3c0ddcf6910bad361b085..ca0e15a0241b1f83eb1cadbb64ca170e28b58046 100644 --- a/libs/WindowManager/Shell/res/values-mr/strings.xml +++ b/libs/WindowManager/Shell/res/values-mr/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"वर उजवीकडे हलवा"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"तळाशी डावीकडे हलवा"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"तळाशी उजवीकडे हलवा"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> विसà¥à¤¤à¤¾à¤° करा"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> कोलॅपà¥à¤¸ करा"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> सेटिंगà¥à¤œ"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल डिसमिस करा"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"संà¤à¤¾à¤·à¤£à¤¾à¤²à¤¾ बबल करू नका"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"समजले"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"अलीकडील कोणतेही बबल नाहीत"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"अलीकडील बबल आणि डिसमिस केलेले बबल येथे दिसतील"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"बबल वापरून चॅट करा"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"नवीन संà¤à¤¾à¤·à¤£à¥‡ ही तà¥à¤®à¤šà¥à¤¯à¤¾ सà¥à¤•à¥à¤°à¥€à¤¨à¤šà¥à¤¯à¤¾ तळाशी असलेलà¥à¤¯à¤¾ कोपऱà¥à¤¯à¤¾à¤¤ आयकनचà¥à¤¯à¤¾ सà¥à¤µà¤°à¥‚पात दिसतात. तà¥à¤¯à¤¾à¤‚चा विसà¥à¤¤à¤¾à¤° करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी टॅप करा किंवा ती डिसमिस करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी डà¥à¤°à¥…ग करा."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"बबल कधीही नियंतà¥à¤°à¤¿à¤¤ करा"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"कोणती ॲपà¥à¤¸ आणि संà¤à¤¾à¤·à¤£à¥‡ बबल होऊ शकतात हे वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी येथे टॅप करा"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml index 86a7025f5e39443d327249873d246c2935f0bff1..fd9fb87b918cfc6ce5c74b4c169b8d50cc615c4b 100644 --- a/libs/WindowManager/Shell/res/values-ms/strings.xml +++ b/libs/WindowManager/Shell/res/values-ms/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Alihkan ke atas sebelah kanan"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Alihkan ke bawah sebelah kiri"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Alihkan ke bawah sebelah kanan"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"kembangkan <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"kuncupkan <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Tetapan <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ketepikan gelembung"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Jangan jadikan perbualan dalam bentuk gelembung"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Tiada gelembung terbaharu"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Gelembung baharu dan gelembung yang diketepikan akan dipaparkan di sini"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Bersembang menggunakan gelembung"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Perbualan baharu dipaparkan sebagai ikon pada penjuru sebelah bawah skrin anda. Ketik untuk mengembangkan perbualan atau seret untuk mengetepikan perbualan."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kawal gelembung pada bila-bila masa"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Ketik di sini untuk mengurus apl dan perbualan yang boleh menggunakan gelembung"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Gelembung"</string> diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml index 4c494eb586a2564de51bfb8f641b5f2d7b3f5edf..42bce8104a5cb4ea21fd9870af685d97724f6d38 100644 --- a/libs/WindowManager/Shell/res/values-my/strings.xml +++ b/libs/WindowManager/Shell/res/values-my/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ညာဘက်ထá€á€•်သá€á€¯á€· ရွှေ့ပါ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ဘယ်အောက်á€á€¼á€±á€žá€á€¯á€· ရွှေ့ရန်"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ညာအောက်á€á€¼á€±á€žá€á€¯á€· ရွှေ့ပါ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ကá€á€¯ á€á€»á€²á€·á€›á€”်"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ကá€á€¯ á€á€»á€¯á€¶á€·á€›á€”်"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ဆက်á€á€„်များ"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ပူဖောင်းကွက် ပယ်ရန်"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"စကားá€á€á€¯á€„်းကá€á€¯ ပူဖောင်းကွက် မပြုလုပ်ပါနှင့်"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"နားလည်ပြီ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"လá€á€ºá€á€œá€±á€¬ ပူဖောင်းကွက်များ မရှá€á€•ါ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"လá€á€ºá€á€œá€±á€¬ ပူဖောင်းကွက်များနှင့် ပá€á€á€ºá€œá€á€¯á€€á€ºá€žá€±á€¬ ပူဖောင်းကွက်များကá€á€¯ ဤနေရာá€á€½á€„် မြင်ရပါမည်"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ပူဖောင်းကွက်သုံးá á€á€»á€á€ºá€œá€¯á€•်á€á€¼á€„်း"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"စကားá€á€á€¯á€„်းအသစ်များကá€á€¯ သင့်ဖန်သားပြင် အောက်á€á€¼á€±á€‘ောင့်á€á€½á€„် သင်္ကေá€á€™á€»á€¬á€¸á€¡á€–ြစ် မြင်ရပါမည်ዠáŽá€„်းá€á€á€¯á€·á€€á€á€¯ ဖြန့်ရန်á€á€á€¯á€·á€•ါ (သá€á€¯á€·) ပယ်ရန်ဖá€á€†á€½á€²á€•ါá‹"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ပူဖောင်းကွက်ကá€á€¯ အá€á€»á€á€”်မရွေး ထá€á€”်းá€á€»á€¯á€•်ရန်"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ပူဖောင်းကွက်သုံးနá€á€¯á€„်သည့် အက်ပ်နှင့် စကားá€á€á€¯á€„်းများ စီမံရန် ဤနေရာကá€á€¯ á€á€á€¯á€·á€•ါ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ပူဖောင်းဖောက်သံ"</string> diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml index e9f90c0cb0ea598e207e016a8382c11e317237b1..cd656b846ccfabbcff1aa106721854b507c5b930 100644 --- a/libs/WindowManager/Shell/res/values-nb/strings.xml +++ b/libs/WindowManager/Shell/res/values-nb/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Flytt til øverst til høyre"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Flytt til nederst til venstre"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flytt til nederst til høyre"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"vis <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"skjul <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-innstillinger"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Lukk boblen"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ikke vis samtaler i bobler"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Greit"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ingen nylige bobler"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Nylige bobler og avviste bobler vises her"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat med bobler"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nye samtaler vises som ikoner i et hjørne nede pÃ¥ skjermen. Trykk for Ã¥ Ã¥pne dem, eller dra for Ã¥ lukke dem."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontroller bobler nÃ¥r som helst"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Trykk her for Ã¥ administrere hvilke apper og samtaler som kan vises i bobler"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string> diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml index dcfff7c30a1a86472d744c4b5b44fe6ec184c118..3300bc68c0849ac0a339aef6c57ee0523664c704 100644 --- a/libs/WindowManager/Shell/res/values-ne/strings.xml +++ b/libs/WindowManager/Shell/res/values-ne/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"सिरानमा दायाà¤à¤¤à¤¿à¤° सारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"पà¥à¤›à¤¾à¤°à¤®à¤¾ बायाà¤à¤¤à¤¿à¤° सारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"पà¥à¤›à¤¾à¤°à¤®à¤¾ दायाà¤à¤¤à¤¿à¤° सारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> à¤à¤•à¥à¤¸à¥à¤ªà¤¾à¤¨à¥à¤¡ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> कोलà¥à¤¯à¤¾à¤ªà¥à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> का सेटिङहरू"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल खारेज गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"वारà¥à¤¤à¤¾à¤²à¤¾à¤ª बबलको रूपमा नदेखाइयोसà¥"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"बà¥à¤à¥‡à¤"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"हालैका बबलहरू छैननà¥"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"हालैका बबल र खारेज गरिà¤à¤•ा बबलहरू यहाठदेखिने छनà¥"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"बबल पà¥à¤°à¤¯à¥‹à¤— गरी कà¥à¤°à¤¾à¤•ानी गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"नयाठवारà¥à¤¤à¤¾à¤²à¤¾à¤ªà¤¹à¤°à¥‚ तपाईंको डिà¤à¤¾à¤‡à¤¸à¤•ो सà¥à¤•à¥à¤°à¤¿à¤¨à¤•ो पà¥à¤›à¤¾à¤°à¤•ो कà¥à¤¨à¤¾à¤®à¤¾ आइकनका रूपमा देखिनà¥à¤›à¤¨à¥à¥¤ ती आइकन ठà¥à¤²à¥‹ बनाउन टà¥à¤¯à¤¾à¤ª गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा ती आइकन हटाउन डà¥à¤°à¥à¤¯à¤¾à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"जà¥à¤¨à¤¸à¥à¤•ै बेला बबलसमà¥à¤¬à¤¨à¥à¤§à¥€ सà¥à¤µà¤¿à¤§à¤¾ नियनà¥à¤¤à¥à¤°à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"कà¥à¤¨ à¤à¤ª र कà¥à¤°à¤¾à¤•ानी बबल पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨ सकà¥à¤›à¤¨à¥ à¤à¤¨à¥à¤¨à¥‡ कà¥à¤°à¤¾à¤•ो वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ गरà¥à¤¨ यहाठटà¥à¤¯à¤¾à¤ª गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string> diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml index 2f560f04205c2cc610393b9c40e541465e893a51..0d174049dc1512fba6ca7e8eeb23d2c3a16d6a6b 100644 --- a/libs/WindowManager/Shell/res/values-nl/strings.xml +++ b/libs/WindowManager/Shell/res/values-nl/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Naar rechtsboven verplaatsen"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Naar linksonder verplaatsen"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Naar rechtsonder verplaatsen"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> uitvouwen"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> samenvouwen"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Instellingen voor <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Bubbel sluiten"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Gesprekken niet in bubbels tonen"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Geen recente bubbels"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recente bubbels en gesloten bubbels zie je hier"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatten met bubbels"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nieuwe gesprekken verschijnen als iconen in een benedenhoek van je scherm. Tik om ze uit te vouwen of sleep om ze te sluiten."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bubbels beheren wanneer je wilt"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tik hier om te beheren welke apps en gesprekken als bubbel kunnen worden getoond"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbel"</string> diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml index ad25de51a3e742901121a4c473cea6bdf643b79a..916d8638436cde38edc7623682c2939a80f7ad7c 100644 --- a/libs/WindowManager/Shell/res/values-or/strings.xml +++ b/libs/WindowManager/Shell/res/values-or/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ଉପର-ଡାହାଣକà ନିଅନàତà"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ତଳ ବାମକà ନିଅନàତà"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ତଳ ଡାହାଣକà ନିଅନàତà"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ବିସàତାର କରନàତà"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ସଙàକàଚିତ କରନàତà"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ସà‡à¬Ÿà¬¿à¬‚ସà"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ବବଲà ଖାରଜ କରନàତà"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ବାରàତàତାଳାପକà ବବଲà କରନàତà ନାହିà¬"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ବàà¬à¬¿à¬—ଲି"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ବରàତàତମାନ କàŒà¬£à¬¸à¬¿ ବବଲà ନାହିà¬"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ବରàତàତମାନର à¬à¬¬à¬‚ ଖାରଜ କରାଯାଇଥିବା ବବଲଗàଡ଼ିକ à¬à¬ à¬¾à¬°à‡ à¬¦à‡à¬–ାଯିବ"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ବବଲଗàଡ଼ିକà ବààŸà¬¬à¬¹à¬¾à¬° କରି ଚାଟà କରନàତà"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ନà‚ଆ ବାରàତàତାଳାପଗàଡ଼ିକ ଆପଣଙàକ ସàକàରିନର à¬à¬• ନିମàନ କà‹à¬£à¬°à‡ ଆଇକନଗàଡ଼ିକ à¬à¬¾à¬¬à‡ ଦà‡à¬–ାଯାà¬à¥¤ ସà‡à¬—àଡ଼ିକà ବିସàତାର କରିବା ପାଇଠଟାପ କରନàତà କିମàବା ସà‡à¬—àଡ଼ିକà ଖାରଜ କରିବା ପାଇଠଡàରାଗ କରନàତà।"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"à¬¯à‡ à¬•àŒà¬£à¬¸à¬¿ ସମàŸà¬°à‡ ବବଲଗàଡ଼ିକ ନିàŸà¬¨àତàରଣ କରନàତà"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"କà‡à¬‰à¬ ଆପàସ ଓ ବାରàତàତାଳାପଗàଡ଼ିକ ବବଲ ହà‹à¬‡à¬ªà¬¾à¬°à¬¿à¬¬ ତାହା ପରିଚାଳନା କରିବାକà à¬à¬ à¬¾à¬°à‡ à¬Ÿà¬¾à¬ª କରନàତà"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ବବଲà"</string> diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml index 4bd9d6b9d21481cf3ebfa050f59305ffb7ebfcf6..5c936e069f9e08966fa69d143c47d241da36f652 100644 --- a/libs/WindowManager/Shell/res/values-pa/strings.xml +++ b/libs/WindowManager/Shell/res/values-pa/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ਉੱਪਰ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ਹੇਠਾਂ ਵੱਲ ਖੱਬੇ ਲਿਜਾਓ"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ਹੇਠਾਂ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ਨੂੰ ਸਮੇਟੋ"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ਸੈਟਿੰਗਾਂ"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ਬਬਲ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ਗੱਲਬਾਤ \'ਤੇ ਬਬਲ ਨਾ ਲਾਓ"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ਸਮਠਲਿਆ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ਕੋਈ ਹਾਲੀਆ ਬਬਲ ਨਹੀਂ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ਹਾਲੀਆ ਬਬਲ ਅਤੇ ਖਾਰਜ ਕੀਤੇ ਬਬਲ ਇੱਥੇ ਦਿਸਣਗੇ"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ਬਬਲ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਚੈਟ ਕਰੋ"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ਨਵੀਂਆਂ ਗੱਲਾਂਬਾਤਾਂ ਤà©à¨¹à¨¾à¨¡à©€ ਸਕà©à¨°à©€à¨¨ ਦੇ ਹੇਠਲੇ ਕੋਨੇ ਵਿੱਚ ਪà©à¨°à¨¤à©€à¨•ਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਦਿਖਦੀਆਂ ਹਨ। ਉਨà©à¨¹à¨¾à¨‚ ਦਾ ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਜਾਂ ਉਨà©à¨¹à¨¾à¨‚ ਨੂੰ ਖਾਰਜ ਕਰਨ ਲਈ ਘਸੀਟੋ।"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ਬਬਲ ਦੀ ਸà©à¨µà¨¿à¨§à¨¾ ਨੂੰ ਕਿਸੇ ਵੀ ਵੇਲੇ ਕੰਟਰੋਲ ਕਰੋ"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ਇਹ ਪà©à¨°à¨¬à©°à¨§à¨¨ ਕਰਨ ਲਈ ਇੱਥੇ ਟੈਪ ਕਰੋ ਕਿ ਕਿਹੜੀਆਂ à¨à¨ªà¨¾à¨‚ ਅਤੇ ਗੱਲਾਂਬਾਤਾਂ ਬਬਲ ਹੋ ਸਕਦੀਆਂ ਹਨ"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"ਬà©à¨²à¨¬à©à¨²à¨¾"</string> diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml index d98be758c97e2aa31227e15f75f6f339f8c67b1b..abdb5f7eb7acf829c9960db7fe11197c72feefa7 100644 --- a/libs/WindowManager/Shell/res/values-pl/strings.xml +++ b/libs/WindowManager/Shell/res/values-pl/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"PrzenieÅ› w prawy górny róg"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"PrzenieÅ› w lewy dolny róg"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"PrzenieÅ› w prawy dolny róg"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"rozwiÅ„ dymek <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"zwiÅ„ dymek <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> – ustawienia"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Zamknij dymek"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nie wyÅ›wietlaj rozmowy jako dymka"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Brak ostatnich dymków"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tutaj bÄ™dÄ… pojawiać siÄ™ ostatnie i odrzucone dymki"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Czatuj, korzystajÄ…c z dymków"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nowe rozmowy pojawiajÄ… siÄ™ jako ikony w dolnym rogu ekranu. Kliknij, aby je rozwinąć, lub przeciÄ…gnij, aby je zamknąć."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ZarzÄ…dzaj dymkami, kiedy chcesz"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Kliknij tutaj, aby zarzÄ…dzać wyÅ›wietlaniem aplikacji i rozmów jako dymków"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Dymek"</string> diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml index 81d325a7ec58c9c754f69a248c0a10a8b779c641..bb68b28075bb00d84a3b60e72609d50b87fc24b2 100644 --- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover para canto superior direito"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover para canto inferior esquerdo"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover para canto inferior direito"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"abrir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"fechar <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Configurações de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dispensar balão"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não criar balões de conversa"</string> @@ -76,17 +78,15 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ok"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e dispensados aparecerão aqui"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Converse usando balões"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Novas conversas aparecem como Ãcones no canto inferior da tela. Toque neles para abrir ou arraste para dispensar."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões a qualquer momento"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerenciar quais apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string> <string name="restart_button_description" msgid="4564728020654658478">"Toque para reiniciar o app e atualizar a visualização"</string> - <string name="user_aspect_ratio_settings_button_hint" msgid="734835849600713016">"Mude a proporção deste app nas Configurações"</string> + <string name="user_aspect_ratio_settings_button_hint" msgid="734835849600713016">"Mude o tamanho da janela deste app nas Configurações"</string> <string name="user_aspect_ratio_settings_button_description" msgid="4315566801697411684">"Mudar a proporção"</string> <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string> diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml index 7fa592afbbe31bffb6cc74fac110dde7195c688d..2c03c543d1dc6450b0f93904b9a583d17a56c16a 100644 --- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover parte superior direita"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover p/ parte infer. esquerda"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover parte inferior direita"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expandir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"reduzir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Definições de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorar balão"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não apresentar a conversa em balões"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e ignorados vão aparecer aqui."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Converse no chat através de balões"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"As novas conversas aparecem como Ãcones no canto inferior do ecrã. Toque para as expandir ou arraste para as ignorar."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões em qualquer altura"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerir que apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balão"</string> diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml index 81d325a7ec58c9c754f69a248c0a10a8b779c641..bb68b28075bb00d84a3b60e72609d50b87fc24b2 100644 --- a/libs/WindowManager/Shell/res/values-pt/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover para canto superior direito"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover para canto inferior esquerdo"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover para canto inferior direito"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"abrir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"fechar <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Configurações de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Dispensar balão"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não criar balões de conversa"</string> @@ -76,17 +78,15 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ok"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nenhum balão recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Os balões recentes e dispensados aparecerão aqui"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Converse usando balões"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Novas conversas aparecem como Ãcones no canto inferior da tela. Toque neles para abrir ou arraste para dispensar."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controle os balões a qualquer momento"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Toque aqui para gerenciar quais apps e conversas podem aparecer em balões"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string> <string name="restart_button_description" msgid="4564728020654658478">"Toque para reiniciar o app e atualizar a visualização"</string> - <string name="user_aspect_ratio_settings_button_hint" msgid="734835849600713016">"Mude a proporção deste app nas Configurações"</string> + <string name="user_aspect_ratio_settings_button_hint" msgid="734835849600713016">"Mude o tamanho da janela deste app nas Configurações"</string> <string name="user_aspect_ratio_settings_button_description" msgid="4315566801697411684">"Mudar a proporção"</string> <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string> <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string> diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml index 0341667be3e31b89daad4e99fee9a6fb9a46a2ec..579046b3a45f27d0376d06b041c45253e7a94d41 100644 --- a/libs/WindowManager/Shell/res/values-ro/strings.xml +++ b/libs/WindowManager/Shell/res/values-ro/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mută în dreapta sus"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mută în stânga jos"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mută în dreapta jos"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"extinde <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"restrânge <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Setări <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ÃŽnchide balonul"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nu afiÈ™a conversaÈ›ia în balon"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nu există baloane recente"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Baloanele recente È™i baloanele respinse vor apărea aici"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chat cu baloane"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ConversaÈ›iile noi apar ca pictograme în colÈ›ul de jos al ecranului. Atinge pentru a le extinde sau trage pentru a le închide."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Controlează baloanele oricând"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Atinge aici pentru a gestiona aplicaÈ›iile È™i conversaÈ›iile care pot apărea în balon"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string> diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml index da234c71a0095cdec279d38bc96a465ec97040af..a8a914cbf9fc61aad5fd3006be27704c3dc21259 100644 --- a/libs/WindowManager/Shell/res/values-ru/strings.xml +++ b/libs/WindowManager/Shell/res/values-ru/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПеренеÑти в правый верхний угол"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПеренеÑти в левый нижний угол"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПеренеÑти в правый нижний угол"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"Развернуть <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Свернуть <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: наÑтройки"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Скрыть вÑплывающий чат"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ðе показывать вÑплывающий чат Ð´Ð»Ñ Ñ€Ð°Ð·Ð³Ð¾Ð²Ð¾Ñ€Ð°"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"ОК"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ðет недавних вÑплывающих чатов"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ЗдеÑÑŒ будут поÑвлÑтьÑÑ Ð½ÐµÐ´Ð°Ð²Ð½Ð¸Ðµ и Ñкрытые вÑплывающие чаты."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Ð’Ñплывающие чаты"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ðовые чаты поÑвлÑÑŽÑ‚ÑÑ Ð² виде значков в нижней чаÑти Ñкрана. КоÑнитеÑÑŒ их, чтобы развернуть. Перетащите их, еÑли хотите закрыть."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ð’Ñплывающие чаты"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Укажите Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ разговоры, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… разрешены вÑплывающие чаты."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Ð’ÑÐ¿Ð»Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñказка"</string> diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml index 236da5d67fc9a5d6391ced0da02a6d5ac58352e0..968bc2c3b862d74ceb5c1252363e7e422b332ba3 100644 --- a/libs/WindowManager/Shell/res/values-si/strings.xml +++ b/libs/WindowManager/Shell/res/values-si/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ඉහළ දකුණට ගෙන යන්න"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"à¶´à·„à·… වමට ගෙන යන්න"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"à¶´à·„à·… දකුණට ගෙන යන්න"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> දිග හරින්න"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> හකුළන්න"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> à·ƒà·à¶šà·ƒà·“ම්"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"බුබුලු ඉවචලන්න"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"සංවà·à¶¯à¶º බුබුලු නොදමන්න"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"à¶à·šà¶»à·”à¶«à·"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"මෑචබුබුලු à¶±à·à¶"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"මෑචබුබුලු සහ ඉවචලූ බුබුලු මෙහි දිස් වනු ඇà¶"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"බුබුලු à¶·à·à·€à·’à¶à¶ºà·™à¶±à·Š à¶šà¶à·à¶¶à·„ කරන්න"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"නව සංවà·à¶¯ ඔබේ à¶à·’රයෙහි à¶´à·„à·… කෙළවරේ නිරූපක ලෙස දිස් වේ. ඒව෠පුළුල් කිරීමට à¶à¶§à·Šà¶§à·” කරන්න හ෠ඒව෠ඉවචදà·à¶¸à·“මට අදින්න."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ඕනෑම වේලà·à·€à¶š බුබුලු à¶´à·à¶½à¶±à¶º කරන්න"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"බුබුලු à¶šà·… à·„à·à¶šà·’ යෙදුම් සහ සංවà·à¶¯ කළමනà·à¶šà¶»à¶«à¶º කිරීමට මෙහි à¶à¶§à·Šà¶§à·” කරන්න"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"බුබුළු"</string> diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml index eaabdabb0285b30249fd00b64e91958a2864fb8b..303d81b17568a383916446bdb9c33e3e4e1589b6 100644 --- a/libs/WindowManager/Shell/res/values-sk/strings.xml +++ b/libs/WindowManager/Shell/res/values-sk/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Presunúť doprava nahor"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Presunúť doľava nadol"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Presunúť doprava nadol"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"rozbaliÅ¥ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"zbaliÅ¥ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavenia aplikácie <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ZavrieÅ¥ bublinu"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"NezobrazovaÅ¥ konverzáciu ako bublinu"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Dobre"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Žiadne nedávne bubliny"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tu sa budú zobrazovaÅ¥ nedávne a zavreté bubliny"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ÄŒet pomocou bublÃn"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nové konverzácie sa zobrazujú ako ikony v dolnom rohu obrazovky. KlepnutÃm ich rozbalÃte a presunutÃm zavriete."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Ovládajte bubliny kedykoľvek"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Klepnite tu a spravujte, ktoré aplikácie a konverzácie môžu ovládaÅ¥ bubliny"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string> diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml index 514a0b3548dba77ca845f0fa6fdbf6a626526dd0..6178a1a9a489d1a3901acc27d44d0a8ebd292d8c 100644 --- a/libs/WindowManager/Shell/res/values-sl/strings.xml +++ b/libs/WindowManager/Shell/res/values-sl/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Premakni zgoraj desno"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Premakni spodaj levo"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premakni spodaj desno"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"razÅ¡iritev oblaÄka <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"strnitev oblaÄka <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavitve za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Opusti oblaÄek"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Pogovora ne prikaži v oblaÄku"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"V redu"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ni nedavnih oblaÄkov"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Tukaj bodo prikazani tako nedavni kot tudi opuÅ¡Äeni oblaÄki"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Klepet z oblaÄki"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Novi pogovori so prikazani kot ikone v enem od spodnjih kotov zaslona. Z dotikom pogovore razÅ¡irite, z vleÄenjem jih opustite."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Upravljanje oblaÄkov"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Dotaknite se tukaj za upravljanje aplikacij in pogovorov, ki so lahko prikazani v oblaÄkih"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"MehurÄek"</string> diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml index 790119b8e9cc31683e86b71976d87bc90e04dc11..e155c72bf2971f914522806826a310b8dbe44046 100644 --- a/libs/WindowManager/Shell/res/values-sq/strings.xml +++ b/libs/WindowManager/Shell/res/values-sq/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Lëviz lart djathtas"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Zhvendos poshtë majtas"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Lëvize poshtë djathtas"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"zgjero <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"palos <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Cilësimet e <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Hiqe flluskën"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Mos e vendos bisedën në flluskë"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"E kuptova"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Nuk ka flluska të fundit"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Flluskat e fundit dhe flluskat e hequra do të shfaqen këtu"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Bisedo duke përdorur flluskat"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Bisedat e reja shfaqen si ikona në këndin e poshtëm të ekranit tënd. Trokit për t\'i zgjeruar ose zvarrit për t\'i hequr ato."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrollo flluskat në çdo moment"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Trokit këtu për të menaxhuar aplikacionet e bisedat që do të shfaqen në flluska"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Flluskë"</string> diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml index 9fd9f3ed18a900a8a0911412edfb2662b9371131..0e70a47f3fcb0059f2f570f7df143c5b389b38a5 100644 --- a/libs/WindowManager/Shell/res/values-sr/strings.xml +++ b/libs/WindowManager/Shell/res/values-sr/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПремеÑти горе деÑно"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПремеÑти доле лево"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПремеÑти доле деÑно"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"проширите облачић <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Ñкупите облачић <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Подешавања за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Одбаци облачић"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ðе кориÑти облачиће за конверзацију"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Важи"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ðема недавних облачића"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Овде Ñе приказују недавни и одбачени облачићи"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ЋаÑкајте у облачићима"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ðове конверзације Ñе појављују као иконе у доњем углу екрана. Додирните да биÑте их проширили или превуците да биÑте их одбацили."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контролишите облачиће у Ñваком тренутку"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Додирните овде и одредите које апликације и конверзације могу да имају облачић"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Облачић"</string> diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml index f7f218e4ded75c91accedc57cea7f78c40ac9973..4c22964e125fe7f362b2cb705cf781fbef226169 100644 --- a/libs/WindowManager/Shell/res/values-sv/strings.xml +++ b/libs/WindowManager/Shell/res/values-sv/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Flytta högst upp till höger"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Flytta längst ned till vänster"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flytta längst ned till höger"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"utöka <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"komprimera <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Inställningar för <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Stäng bubbla"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Visa inte konversationen i bubblor"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Inga nya bubblor"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"De senaste bubblorna och ignorerade bubblor visas här"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Chatta med bubblor"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Nya konversationer visas som ikoner nere i hörnet pÃ¥ skärmen. Tryck för att utöka eller dra för att stänga dem."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Styr bubblor när som helst"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Tryck här för att hantera vilka appar och konversationer som fÃ¥r visas i bubblor"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbla"</string> diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml index 83173f3649c02b73e922efdf03d342843f3f6336..71aeb61538cdad9347e13eeea1e67775855051f4 100644 --- a/libs/WindowManager/Shell/res/values-sw/strings.xml +++ b/libs/WindowManager/Shell/res/values-sw/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Sogeza juu kulia"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Sogeza chini kushoto"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Sogeza chini kulia"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"panua <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"kunja <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Mipangilio ya <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ondoa kiputo"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Usiweke viputo kwenye mazungumzo"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Nimeelewa"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hakuna viputo vya hivi majuzi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Viputo vya hivi karibuni na vile vilivyoondolewa vitaonekana hapa"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Piga gumzo ukitumia viputo"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Mazungumzo mapya huonekana kama aikoni katika kona ya chini ya skrini yako. Gusa ili uyapanue au buruta ili uyaondoe."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Dhibiti viputo wakati wowote"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Gusa hapa ili udhibiti programu na mazungumzo yanayoweza kutumia viputo"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Kiputo"</string> diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml index ea2ee9c22c08dd133a1c5cdb5de8947df1e33d5a..aab05daca0aeac61f6d6f1b4987569a5a2c4e1e8 100644 --- a/libs/WindowManager/Shell/res/values-ta/strings.xml +++ b/libs/WindowManager/Shell/res/values-ta/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"மேலே வலபà¯à®ªà¯à®±à®®à®¾à®• நகரà¯à®¤à¯à®¤à¯"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"கீழே இடபà¯à®ªà¯à®±à®®à®¾à®• நகரà¯à®¤à¯à®¤à¯"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"கீழே வலதà¯à®ªà¯à®±à®®à®¾à®• நகரà¯à®¤à¯à®¤à¯"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> ஠விரிவாகà¯à®•à¯à®®à¯"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> à®à®šà¯ சà¯à®°à¯à®•à¯à®•à¯à®®à¯"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> அமைபà¯à®ªà¯à®•ளà¯"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"கà¯à®®à®¿à®´à¯ˆ அகறà¯à®±à¯"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"உரையாடலைக௠கà¯à®®à®¿à®´à®¾à®•à¯à®•ாதே"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"சரி"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"சமீபதà¯à®¤à®¿à®¯ கà¯à®®à®¿à®´à¯à®•ள௠இலà¯à®²à¯ˆ"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"சமீபதà¯à®¤à®¿à®¯ கà¯à®®à®¿à®´à¯à®•ளà¯à®®à¯ நிராகரிகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿ கà¯à®®à®¿à®´à¯à®•ளà¯à®®à¯ இஙà¯à®•ே தோனà¯à®±à¯à®®à¯"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"கà¯à®®à®¿à®´à¯à®•ளைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ உரையாடà¯à®™à¯à®•ளà¯"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"பà¯à®¤à®¿à®¯ உரையாடலà¯à®•ள௠உஙà¯à®•ள௠திரையின௠கீழ௠மூலையில௠à®à®•ானà¯à®•ளாகத௠தோனà¯à®±à¯à®®à¯. அவறà¯à®±à¯ˆ விரிவாகà¯à®• தடà¯à®Ÿà®µà¯à®®à¯ அலà¯à®²à®¤à¯ நிராகரிகà¯à®• இழà¯à®•à¯à®•வà¯à®®à¯."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"எபà¯à®ªà¯‹à®¤à¯ வேணà¯à®Ÿà¯à®®à®¾à®©à®¾à®²à¯à®®à¯ கà¯à®®à®¿à®´à¯à®•ளைக௠கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®™à¯à®•ளà¯"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"எநà¯à®¤à¯†à®¨à¯à®¤ ஆபà¯à®¸à¯à®®à¯ உரையாடலà¯à®•ளà¯à®®à¯ கà¯à®®à®¿à®´à®¿à®¯à®¾à®•லாம௠எனà¯à®ªà®¤à¯ˆ நிரà¯à®µà®•ிகà¯à®• இஙà¯à®•ே தடà¯à®Ÿà¯à®™à¯à®•ளà¯"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"பபிளà¯"</string> diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml index e2772bf7311e8ccc40a849f9062c2943105e979b..1e407bf255defab28fed03b561d18abe4677a75f 100644 --- a/libs/WindowManager/Shell/res/values-te/strings.xml +++ b/libs/WindowManager/Shell/res/values-te/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"à°Žà°—à±à°µ à°•à±à°¡à°¿à°µà±ˆà°ªà±à°¨à°•ౠజరà±à°ªà±"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"దిగà±à°µ ఎడమవైపà±à°¨à°•ౠతరలించà±"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"దిగవౠకà±à°¡à°¿à°µà±ˆà°ªà±à°¨à°•ౠజరà±à°ªà±"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> విసà±à°¤à°°à°¿à°‚à°šà°‚à°¡à°¿"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>‌నౠకà±à°¦à°¿à°‚à°šà°‚à°¡à°¿"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> సెటà±à°Ÿà°¿à°‚à°—à±â€Œà°²à±"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"బబà±à°²à±â€Œà°¨à± విసà±à°®à°°à°¿à°‚à°šà±"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"సంà°à°¾à°·à°£à°¨à± బబà±à°²à± చేయవదà±à°¦à±"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"à°…à°°à±à°¥à°®à±ˆà°‚ది"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ఇటీవలి బబà±à°²à±à°¸à± à°à°µà±€ లేవà±"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ఇటీవలి బబà±à°²à±à°¸à± మరియౠతీసివేసిన బబà±à°²à±à°¸à± ఇకà±à°•à°¡ కనిపిసà±à°¤à°¾à°¯à°¿"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"బబà±à°²à±à°¸à±â€Œà°¨à± ఉపయోగించి చాటౠచేయండి"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"కొతà±à°¤ సంà°à°¾à°·à°£à°²à± మీ à°¸à±à°•à±à°°à±€à°¨à± à°•à°¿à°‚à°¦ మూలన à°šà°¿à°¹à±à°¨à°¾à°²à±à°—à°¾ కనిపిసà±à°¤à°¾à°¯à°¿. à°Ÿà±à°¯à°¾à°ªà± చేసి వాటిని విసà±à°¤à°°à°¿à°‚à°šà°‚à°¡à°¿ లేదా లాగి విసà±à°®à°°à°¿à°‚à°šà°‚à°¡à°¿."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"బబà±à°²à±à°¸à±â€Œà°¨à± à°Žà°ªà±à°ªà±à°¡à±ˆà°¨à°¾ à°•à°‚à°Ÿà±à°°à±‹à°²à± చేయండి"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ఠయాపà±â€Œà°²à±, సంà°à°¾à°·à°£à°²à°¨à± బబà±à°²à± చేయాలో మేనేజౠచేయడానికి ఇకà±à°•à°¡ à°Ÿà±à°¯à°¾à°ªà± చేయండి"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"బబà±à°²à±"</string> diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml index 14bdc4bb040f24ed4ddc5b128d0f7d124ec480c1..77a9f4b3ec767a2980eda7c5b96183bfe21c9fa5 100644 --- a/libs/WindowManager/Shell/res/values-th/strings.xml +++ b/libs/WindowManager/Shell/res/values-th/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ย้ายไปด้านขวาบน"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ย้ายไปด้านซ้ายล่าง"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ย้ายไปด้านขาวล่าง"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ขยาย <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"ยุบ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"à¸à¸²à¸£à¸•ั้งค่า <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"ปิดบับเบิล"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ไม่ต้à¸à¸‡à¹à¸ªà¸”งà¸à¸²à¸£à¸ªà¸™à¸—นาเป็นบับเบิล"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"รับทราบ"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"ไม่มีบับเบิลเมื่à¸à¹€à¸£à¹‡à¸§à¹† นี้"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"บับเบิลที่à¹à¸ªà¸”งà¹à¸¥à¸°à¸—ี่ปิดไปเมื่à¸à¹€à¸£à¹‡à¸§à¹† นี้จะปราà¸à¸à¸—ี่นี่"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"à¹à¸Šà¸—โดยใช้บับเบิล"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"à¸à¸²à¸£à¸ªà¸™à¸—นาครั้งใหม่ๆ จะปราà¸à¸à¹€à¸›à¹‡à¸™à¹„à¸à¸„à¸à¸™à¸—ี่มุมล่างขà¸à¸‡à¸«à¸™à¹‰à¸²à¸ˆà¸ โดยสามารถà¹à¸•ะเพื่à¸à¸‚ยายหรืà¸à¸¥à¸²à¸à¹€à¸žà¸·à¹ˆà¸à¸›à¸´à¸”"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ควบคุมบับเบิลได้ทุà¸à¹€à¸¡à¸·à¹ˆà¸"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"à¹à¸•ะที่นี่เพื่à¸à¸ˆà¸±à¸”à¸à¸²à¸£à¹à¸à¸›à¹à¸¥à¸°à¸à¸²à¸£à¸ªà¸™à¸—นาที่à¹à¸ªà¸”งเป็นบับเบิลได้"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"บับเบิล"</string> diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml index 208e8cbc2277178f1144d47884a28f0b5ed19aeb..757da92ef72c1a58a59d3a4cc0d87613148f244c 100644 --- a/libs/WindowManager/Shell/res/values-tl/strings.xml +++ b/libs/WindowManager/Shell/res/values-tl/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Ilipat sa kanan sa itaas"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Ilipat sa kaliwa sa ibaba"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Ilipat sa kanan sa ibaba"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"I-expand ang <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"i-collapse ang <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Mga setting ng <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"I-dismiss ang bubble"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Huwag ipakita sa bubble ang mga pag-uusap"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Walang kamakailang bubble"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Lalabas dito ang mga kamakailang bubble at na-dismiss na bubble"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Mag-chat gamit ang mga bubble"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Lalabas ang mga bagong pag-uusap bilang mga icon sa sulok sa ibaba ng iyong screen. I-tap para i-expand ang mga ito o i-drag para i-dismiss ang mga ito."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kontrolin ang mga bubble anumang oras"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Mag-tap dito para pamahalaan ang mga app at conversion na puwedeng mag-bubble"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string> diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml index b6c0d6864d1ce208edece7c934e02399881b0f91..9c4bf8df93083bb0fa769166e4bad92debe164fe 100644 --- a/libs/WindowManager/Shell/res/values-tr/strings.xml +++ b/libs/WindowManager/Shell/res/values-tr/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"SaÄŸ üste taşı"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Sol alta taşı"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"SaÄŸ alta taşı"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"geniÅŸlet: <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"daralt: <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ayarları"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"BaloncuÄŸu kapat"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Görüşmeyi baloncuk olarak görüntüleme"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Anladım"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Son kapatılan baloncuk yok"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Son baloncuklar ve kapattığınız baloncuklar burada görünür"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Baloncukları kullanarak sohbet edin"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Yeni görüşmeler, ekranınızın alt köşesinde simge olarak görünür. Bunları dokunarak geniÅŸletebilir veya sürükleyerek kapatabilirsiniz."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Baloncukları istediÄŸiniz zaman kontrol edin"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Buraya dokunarak baloncuk olarak gösterilecek uygulama ve görüşmeleri yönetin"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Baloncuk"</string> diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml index 6a119881518af4fe0122c2a445e6b179bbb2d17c..753fe29ebd418c89635dcec969b2c813b1b9a1b2 100644 --- a/libs/WindowManager/Shell/res/values-uk/strings.xml +++ b/libs/WindowManager/Shell/res/values-uk/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ПереміÑтити праворуч угору"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ПереміÑтити ліворуч униз"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ПереміÑтити праворуч униз"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"розгорнути \"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>\""</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"згорнути \"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>\""</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\""</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Закрити підказку"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ðе показувати Ñпливаючі чати Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ð¾Ð²"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Зрозуміло"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Ðемає нещодавніх Ñпливаючих чатів"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Тут з\'ÑвлÑтимутьÑÑ Ð½ÐµÑ‰Ð¾Ð´Ð°Ð²Ð½Ñ– й закриті Ñпливаючі чати"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Спливаючий чат"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Ðові розмови відображаютьÑÑ Ñƒ виглÑді значків у нижньому куті екрана. ТоркнітьÑÑ, щоб розгорнути Ñ—Ñ…, або перетÑгніть, щоб закрити."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Контроль Ñпливаючих чатів"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ÐатиÑніть тут, щоб вибрати, Ð´Ð»Ñ Ñких додатків Ñ– розмов дозволити Ñпливаючі чати"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Спливаюче ÑповіщеннÑ"</string> diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml index 292cabae3cdb08b5ace679e09247166354f0a678..fb01376585600a24a322bd555ea150d1965d0f12 100644 --- a/libs/WindowManager/Shell/res/values-ur/strings.xml +++ b/libs/WindowManager/Shell/res/values-ur/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"اوپر دائیں جانب Ù„Û’ جائيں"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"نیچے بائیں جانب Ù„Û’ جائیں"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"نیچے دائیں جانب Ù„Û’ جائیں"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> Ú©Ùˆ پھیلائیں"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> Ú©Ùˆ سکیڑیں"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ترتیبات"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Ø¨Ù„Ø¨Ù„Û Ø¨Ø±Ø®Ø§Ø³Øª کریں"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ú¯ÙØªÚ¯Ùˆ Ø¨Ù„Ø¨Ù„Û Ù†Û Ú©Ø±ÛŒÚº"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"سمجھ Ø¢ گئی"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"کوئی ØØ§Ù„ÛŒÛ Ø¨Ù„Ø¨Ù„Û Ù†Ûیں"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"ØØ§Ù„ÛŒÛ Ø¨Ù„Ø¨Ù„Û’ اور برخاست Ø´Ø¯Û Ø¨Ù„Ø¨Ù„Û’ ÛŒÛØ§Úº Ø¸Ø§ÛØ± ÛÙˆÚº Ú¯Û’"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"بلبلے Ú©Û’ ذریعے چیٹ کریں"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"نئی Ú¯ÙØªÚ¯ÙˆØ¦ÛŒÚº آپ Ú©ÛŒ اسکرین Ú©Û’ نیچے کونے میں آئیکنز Ú©Û’ طور پر Ø¸Ø§ÛØ± Ûوتی Ûیں۔ انÛیں پھیلانے Ú©Û’ لیے تھپتھپائیں یا انÛیں برخاست کرنے Ú©Û’ لیے گھسیٹیں۔"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"کسی بھی وقت بلبلے Ú©Ùˆ کنٹرول کریں"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"ÛŒÛ Ù†Ø¸Ù… کرنے Ú©Û’ لیے ÛŒÛØ§Úº تھپتھپائیں Ú©Û Ú©ÙˆÙ† سی ایپس اور Ú¯ÙØªÚ¯ÙˆØ¦ÛŒÚº Ø¨Ù„Ø¨Ù„Û Ø³Ú©ØªÛŒ Ûیں"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"بلبلÛ"</string> diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml index 5f33fe9410401bcefaf497ea369a60519b1a7844..81e63de9767c6b1b14df18d1277fcb3de8a0f5b2 100644 --- a/libs/WindowManager/Shell/res/values-uz/strings.xml +++ b/libs/WindowManager/Shell/res/values-uz/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Yuqori oÊ»ngga surish"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Quyi chapga surish"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Quyi oÊ»ngga surish"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ni yoyish"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ni yopish"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> sozlamalari"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Bulutchani yopish"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Suhbatlar bulutchalar shaklida chiqmasin"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Hech qanday bulutcha topilmadi"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Eng oxirgi va yopilgan bulutchali chatlar shu yerda chiqadi"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Bulutchalar yordamida suhbatlashish"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Yangi suhbatlar ekraningizning pastki burchagida belgilar shaklida koÊ»rinadi. Ochish uchun bosing yoki yopish uchun torting"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Bulutchalardagi bildirishnomalar"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Bulutchalarda bildirishnomalar chiqishiga ruxsat beruvchi ilova va suhbatlarni tanlang."</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Pufaklar"</string> diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml index 29b3b854e3c3b8de118f31de0b06f3c3c9c97150..16bbd5eda23eac7c4ce1b4684a10896770456f44 100644 --- a/libs/WindowManager/Shell/res/values-vi/strings.xml +++ b/libs/WindowManager/Shell/res/values-vi/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Chuyển lên trên cùng bên phải"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Chuyển tá»›i dưới cùng bên trái"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Chuyển tá»›i dưới cùng bên phải"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"mở rá»™ng <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"thu gá»n <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Cà i đặt <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Äóng bong bóng"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Dừng sá» dụng bong bóng cho cuá»™c trò chuyện"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Äã hiểu"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Không có bong bóng trò chuyện nà o gần đây"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Bong bóng trò chuyện đã đóng và bong bóng trò chuyện gần đây sẽ xuất hiện ở đây"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Trò chuyện bằng bong bóng trò chuyện"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Các cuá»™c trò chuyện má»›i sẽ xuất hiện dưới dạng biểu tượng ở góc dưới mà n hình. Hãy nhấn và o các cuá»™c trò chuyện đó để mở rá»™ng hoặc kéo để bá» qua."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Kiểm soát bong bóng bất cứ lúc nà o"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Nhấn và o đây để quản lý việc dùng bong bóng cho các ứng dụng và cuá»™c trò chuyện"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bong bóng"</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml index 7820965a81c19f16c6d9206393f931c5017e6558..c12ec8423858a5dda3b11b0adbab0f9ffa18c957 100644 --- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"移至å³ä¸Šè§’"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"移至左下角"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移至å³ä¸‹è§’"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"展开“<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>â€"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"收起“<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>â€"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>设置"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"å…³é—å¯¹è¯æ³¡"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ä¸ä»¥å¯¹è¯æ³¡å½¢å¼æ˜¾ç¤ºå¯¹è¯"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"知é“了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"æœ€è¿‘æ²¡æœ‰å¯¹è¯æ³¡"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"æ¤å¤„ä¼šæ˜¾ç¤ºæœ€è¿‘çš„å¯¹è¯æ³¡å’Œå·²å…³é—çš„å¯¹è¯æ³¡"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"ä½¿ç”¨å¯¹è¯æ³¡èŠå¤©"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"新对è¯ä¼šä»¥å›¾æ ‡å½¢å¼æ˜¾ç¤ºåœ¨å±å¹•底部的角è½ä¸ã€‚ç‚¹æŒ‰å›¾æ ‡å³å¯å±•开对è¯ï¼Œæ‹–åŠ¨å›¾æ ‡å³å¯å…³é—对è¯ã€‚"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"éšæ—¶æŽ§åˆ¶å¯¹è¯æ³¡"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"点按æ¤å¤„å³å¯ç®¡ç†å“ªäº›åº”用和对è¯å¯ä»¥æ˜¾ç¤ºå¯¹è¯æ³¡"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"气泡"</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml index f0df04a1ea53ef2f9503e92f715294630b8741e4..c9543488688b024187bf5d4e47aa51a3eff00ad7 100644 --- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"移去å³ä¸Šè§’"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"移去左下角"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移去å³ä¸‹è§’"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"打開<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"收埋<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"「<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>ã€è¨å®š"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"關閉å°è¦–窗氣泡"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ä¸è¦é€éŽå°è¦–窗顯示å°è©±"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"知é“了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"沒有最近曾使用的å°è¦–窗"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近使用和關閉的å°è¦–窗會在這裡顯示"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"使用å°è©±æ°£æ³¡é€²è¡Œå³æ™‚通訊"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ç•«é¢åº•éƒ¨çš„è§’è½æœƒé¡¯ç¤ºæ–°å°è©±åœ–示。輕按å³å¯å±•開圖示;拖曳å³å¯é—œé–‰ã€‚"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"隨時控制å°è©±æ°£æ³¡"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"輕按這裡å³å¯ç®¡ç†å“ªäº›æ‡‰ç”¨ç¨‹å¼å’Œå°è©±å¯ä»¥ä½¿ç”¨å°è©±æ°£æ³¡"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"氣泡"</string> diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml index a9773634ea3db634461d37f143c1b4422424281f..d25bfd74ca0442b3bb069aa8f8b789ebe69f8a78 100644 --- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml +++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"移至å³ä¸Šæ–¹"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"移至左下方"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移至å³ä¸‹æ–¹"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"展開「<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ã€"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"æ”¶åˆã€Œ<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>ã€"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"「<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>ã€è¨å®š"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"關閉å°è©±æ¡†"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ä¸è¦ä»¥å°è©±æ¡†å½¢å¼é¡¯ç¤ºå°è©±"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"我知é“了"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"最近沒有任何å°è©±æ¡†"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"最近的å°è©±æ¡†å’Œå·²é—œé–‰çš„å°è©±æ¡†æœƒé¡¯ç¤ºåœ¨é€™è£¡"</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"é€éŽå°è©±æ¡†é€²è¡Œå³æ™‚通訊"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"ç•«é¢åº•éƒ¨çš„è§’è½æœƒé¡¯ç¤ºæ–°å°è©±åœ–示。輕觸å¯å±•開圖示,拖曳å³å¯é—œé–‰ã€‚"</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"ä½ éš¨æ™‚å¯ä»¥æŽ§ç®¡å°è©±æ¡†çš„å„é …è¨å®š"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"輕觸這裡å³å¯ç®¡ç†å“ªäº›æ‡‰ç”¨ç¨‹å¼å’Œå°è©±å¯é¡¯ç¤ºå°è©±æ¡†"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"泡泡"</string> diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml index a6903a38ecf4bdf397ffccaa44e8e4a3f970258e..bd62b65ccdf24439d0901a90a423a287746b6498 100644 --- a/libs/WindowManager/Shell/res/values-zu/strings.xml +++ b/libs/WindowManager/Shell/res/values-zu/strings.xml @@ -66,6 +66,8 @@ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Hambisa phezulu ngakwesokudla"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Hambisa inkinobho ngakwesokunxele"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Hambisa inkinobho ngakwesokudla"</string> + <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"nweba <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> + <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"goqa <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> izilungiselelo"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Cashisa ibhamuza"</string> <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ungayibhamuzi ingxoxo"</string> @@ -76,10 +78,8 @@ <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"Ngiyezwa"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Awekho amabhamuza akamuva"</string> <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Amabhamuza akamuva namabhamuza asusiwe azobonakala lapha."</string> - <!-- no translation found for bubble_bar_education_stack_title (2486903590422497245) --> - <skip /> - <!-- no translation found for bubble_bar_education_stack_text (2446934610817409820) --> - <skip /> + <string name="bubble_bar_education_stack_title" msgid="2486903590422497245">"Xoxa usebenzisa amabhamuza"</string> + <string name="bubble_bar_education_stack_text" msgid="2446934610817409820">"Izingxoxo ezintsha zivela njengezithonjana ekhoneni eliphansi lesikrini sakho. Thepha ukuze uzikhulise noma uhudule ukuze uzichithe."</string> <string name="bubble_bar_education_manage_title" msgid="6148404487810835924">"Lawula amabhamuza noma nini"</string> <string name="bubble_bar_education_manage_text" msgid="3199732148641842038">"Thepha lapha ukuze ulawule ukuthi yimaphi ama-app kanye nezingxoxo ezingenza amabhamuza"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Ibhamuza"</string> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java index 13c0ac4bbaa7dac559c9ac9bdf5657aad72fe11c..b71c48e16acb945bd29bc4e5d2655d0a278a6200 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java @@ -76,6 +76,10 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler private IRemoteTransition mOccludeByDreamTransition = null; private IRemoteTransition mUnoccludeTransition = null; + // While set true, Keyguard has created a remote animation runner to handle the open app + // transition. + private boolean mIsLaunchingActivityOverLockscreen; + private final class StartedTransition { final TransitionInfo mInfo; final SurfaceControl.Transaction mFinishT; @@ -120,7 +124,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull TransitionFinishCallback finishCallback) { - if (!handles(info)) { + if (!handles(info) || mIsLaunchingActivityOverLockscreen) { return false; } @@ -313,5 +317,11 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler mUnoccludeTransition = unoccludeTransition; }); } + + @Override + public void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { + mMainExecutor.execute(() -> + mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen); + } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java index b4b327f0eff24c2228d80d64c03c10c582fadd6c..33c299f0b1618e2bf1b38f79a847257490f6f3ba 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java @@ -38,4 +38,9 @@ public interface KeyguardTransitions { @NonNull IRemoteTransition occludeTransition, @NonNull IRemoteTransition occludeByDreamTransition, @NonNull IRemoteTransition unoccludeTransition) {} + + /** + * Notify whether keyguard has created a remote animation runner for next app launch. + */ + default void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {} } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java index 00f6a1cc1167d3290c4ce84261cd2ae71b21ef10..83dc7fa5e869aaa478e505ad2d52983d088e4fd8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java @@ -110,6 +110,14 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, Transitions.TransitionHandler mLeftoversHandler = null; WindowContainerTransaction mFinishWCT = null; + /** + * Whether the transition has request for remote transition while mLeftoversHandler + * isn't remote transition handler. + * If true and the mLeftoversHandler can handle the transition, need to notify remote + * transition handler to consume the transition. + */ + boolean mHasRequestToRemote; + /** * Mixed transitions are made up of multiple "parts". This keeps track of how many * parts are currently animating. @@ -200,6 +208,10 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, MixedTransition.TYPE_OPTIONS_REMOTE_AND_PIP_CHANGE, transition); mixed.mLeftoversHandler = handler.first; mActiveTransitions.add(mixed); + if (mixed.mLeftoversHandler != mPlayer.getRemoteTransitionHandler()) { + mixed.mHasRequestToRemote = true; + mPlayer.getRemoteTransitionHandler().handleRequest(transition, request); + } return handler.second; } else if (mSplitHandler.isSplitScreenVisible() && isOpeningType(request.getType()) @@ -316,12 +328,22 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, // the time of handleRequest, but we need more information than is available at that time. if (KeyguardTransitionHandler.handles(info)) { if (mixed != null && mixed.mType != MixedTransition.TYPE_KEYGUARD) { - ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, - "Converting mixed transition into a keyguard transition"); - onTransitionConsumed(transition, false, null); + final MixedTransition keyguardMixed = + new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition); + mActiveTransitions.add(keyguardMixed); + final boolean hasAnimateKeyguard = animateKeyguard(keyguardMixed, info, + startTransaction, finishTransaction, finishCallback); + if (hasAnimateKeyguard) { + ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, + "Converting mixed transition into a keyguard transition"); + // Consume the original mixed transition + onTransitionConsumed(transition, false, null); + return true; + } else { + // Keyguard handler cannot handle it, process through original mixed + mActiveTransitions.remove(keyguardMixed); + } } - mixed = new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition); - mActiveTransitions.add(mixed); } if (mixed == null) return false; @@ -332,8 +354,17 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, } else if (mixed.mType == MixedTransition.TYPE_DISPLAY_AND_SPLIT_CHANGE) { return false; } else if (mixed.mType == MixedTransition.TYPE_OPTIONS_REMOTE_AND_PIP_CHANGE) { - return animateOpenIntentWithRemoteAndPip(mixed, info, startTransaction, - finishTransaction, finishCallback); + final boolean handledToPip = animateOpenIntentWithRemoteAndPip(mixed, info, + startTransaction, finishTransaction, finishCallback); + // Consume the transition on remote handler if the leftover handler already handle this + // transition. And if it cannot, the transition will be handled by remote handler, so + // don't consume here. + // Need to check leftOverHandler as it may change in #animateOpenIntentWithRemoteAndPip + if (handledToPip && mixed.mHasRequestToRemote + && mixed.mLeftoversHandler != mPlayer.getRemoteTransitionHandler()) { + mPlayer.getRemoteTransitionHandler().onTransitionConsumed(transition, false, null); + } + return handledToPip; } else if (mixed.mType == MixedTransition.TYPE_RECENTS_DURING_SPLIT) { for (int i = info.getChanges().size() - 1; i >= 0; --i) { final TransitionInfo.Change change = info.getChanges().get(i); @@ -799,5 +830,8 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, } else if (mixed.mType == MixedTransition.TYPE_UNFOLD) { mUnfoldHandler.onTransitionConsumed(transition, aborted, finishT); } + if (mixed.mHasRequestToRemote) { + mPlayer.getRemoteTransitionHandler().onTransitionConsumed(transition, aborted, finishT); + } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index 7df658e6c9dbc2b019baa6ef632737c1ea0535f5..de03f5826925615a47e9778cc329cb616b7a48ae 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -99,7 +99,6 @@ import android.window.WindowContainerTransaction; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.policy.AttributeCache; import com.android.internal.policy.ScreenDecorationsUtils; import com.android.internal.policy.TransitionAnimation; import com.android.internal.protolog.common.ProtoLog; @@ -182,7 +181,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { /* broadcastPermission = */ null, mMainHandler); - AttributeCache.init(mContext); + TransitionAnimation.initAttributeCache(mContext, mMainHandler); } private void updateEnterpriseThumbnailDrawable() { diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt index 77f14f1b66a328ad09146d4e367fd33a42956277..adf92d8854ff2c4be2cc7eced0ed53b1285702a4 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt @@ -50,7 +50,7 @@ abstract class BaseAppCompat(flicker: LegacyFlickerTest) : BaseTest(flicker) { } @Before - fun before() { + fun setUp() { Assume.assumeTrue(tapl.isTablet && letterboxRule.isIgnoreOrientationRequest) } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/RotateImmersiveAppInFullscreenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/RotateImmersiveAppInFullscreenTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..ba2b3e7e27817b45f800fac2e47b3101379cbf09 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/RotateImmersiveAppInFullscreenTest.kt @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.wm.shell.flicker.appcompat + +import android.os.Build +import android.tools.common.datatypes.Rect +import android.platform.test.annotations.Postsubmit +import android.system.helpers.CommandsHelper +import android.tools.common.NavBar +import android.tools.common.Rotation +import android.tools.common.flicker.assertions.FlickerTest +import android.tools.common.traces.component.ComponentNameMatcher +import android.tools.device.flicker.junit.FlickerParametersRunnerFactory +import android.tools.device.flicker.legacy.FlickerBuilder +import android.tools.device.flicker.legacy.LegacyFlickerTest +import android.tools.device.flicker.legacy.LegacyFlickerTestFactory +import android.tools.device.helpers.FIND_TIMEOUT +import android.tools.device.traces.parsers.toFlickerComponent +import androidx.test.uiautomator.By +import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until +import com.android.server.wm.flicker.helpers.LetterboxAppHelper +import com.android.server.wm.flicker.testapp.ActivityOptions +import org.junit.Assume +import org.junit.Before +import org.junit.Ignore +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +/** + * Test rotating an immersive app in fullscreen. + * + * To run this test: `atest WMShellFlickerTestsOther:RotateImmersiveAppInFullscreenTest` + * + * Actions: + * ``` + * Rotate the device by 90 degrees to trigger a rotation through sensors + * Verify that the button exists + * ``` + * + * Notes: + * ``` + * Some default assertions that are inherited from + * the `BaseTest` are ignored due to the nature of the immersive apps. + * + * This test only works with Cuttlefish devices. + * ``` + */ +@RunWith(Parameterized::class) +@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) +class RotateImmersiveAppInFullscreenTest(flicker: LegacyFlickerTest) : BaseAppCompat(flicker) { + + private val immersiveApp = LetterboxAppHelper(instrumentation, + launcherName = ActivityOptions.PortraitImmersiveActivity.LABEL, + component = + ActivityOptions.PortraitImmersiveActivity.COMPONENT.toFlickerComponent()) + + private val cmdHelper: CommandsHelper = CommandsHelper.getInstance(instrumentation) + private val execAdb: (String) -> String = { cmd -> cmdHelper.executeShellCommand(cmd) } + + protected val uiDevice: UiDevice = UiDevice.getInstance(instrumentation) + + private val isCuttlefishDevice: Boolean = Build.MODEL.contains("Cuttlefish") + + /** {@inheritDoc} */ + override val transition: FlickerBuilder.() -> Unit + get() = { + setup { + setStartRotation() + immersiveApp.launchViaIntent(wmHelper) + startDisplayBounds = + wmHelper.currentState.layerState.physicalDisplayBounds + ?: error("Display not found") + } + transitions { + if (isCuttlefishDevice) { + // Simulates a device rotation through sensors because the rotation button + // only appears in a rotation event through sensors + execAdb("/vendor/bin/cuttlefish_sensor_injection rotate 0") + // verify rotation button existence + val rotationButtonSelector = By.res(LAUNCHER_PACKAGE, "rotate_suggestion") + uiDevice.wait(Until.hasObject(rotationButtonSelector), FIND_TIMEOUT) + uiDevice.findObject(rotationButtonSelector) + ?: error("rotation button not found") + } + } + teardown { + immersiveApp.exit(wmHelper) + } + } + + @Before + fun setUpForImmersiveAppTests() { + Assume.assumeTrue(isCuttlefishDevice) + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun taskBarLayerIsVisibleAtStartAndEnd() { + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun navBarLayerIsVisibleAtStartAndEnd() { + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun statusBarLayerIsVisibleAtStartAndEnd() { + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun taskBarWindowIsAlwaysVisible() { + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun navBarWindowIsAlwaysVisible() { + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun statusBarWindowIsAlwaysVisible() { + } + + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun statusBarLayerPositionAtStartAndEnd() { + } + + @Test + @Ignore("Not applicable to this CUJ. App is in immersive mode.") + override fun visibleWindowsShownMoreThanOneConsecutiveEntry() { + } + + /** Test that app is fullscreen by checking status bar and task bar visibility. */ + @Postsubmit + @Test + fun appWindowFullScreen() { + flicker.assertWmEnd { + this.isAppWindowInvisible(ComponentNameMatcher.STATUS_BAR) + .isAppWindowInvisible(ComponentNameMatcher.TASK_BAR) + .visibleRegion(immersiveApp).coversExactly(startDisplayBounds) + } + } + + /** Test that app is in the original rotation we have set up. */ + @Postsubmit + @Test + fun appInOriginalRotation() { + flicker.assertWmEnd { + this.hasRotation(Rotation.ROTATION_90) + } + } + + companion object { + private var startDisplayBounds = Rect.EMPTY + const val LAUNCHER_PACKAGE = "com.google.android.apps.nexuslauncher" + + /** + * Creates the test configurations. + * + * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and + * navigation modes. + */ + @Parameterized.Parameters(name = "{0}") + @JvmStatic + fun getParams(): Collection<FlickerTest> { + return LegacyFlickerTestFactory.nonRotationTests( + supportedRotations = listOf(Rotation.ROTATION_90), + // TODO(b/292403378): 3 button mode not added as rotation button is hidden in taskbar + supportedNavigationModes = listOf(NavBar.MODE_GESTURAL) + + ) + } + } +} diff --git a/packages/BackupRestoreConfirmation/res/values-el/strings.xml b/packages/BackupRestoreConfirmation/res/values-el/strings.xml index cd325ef88aee35e844a6a6aed333b8c8045df1ad..02234990606c3949f94b4062390dc4e526ec0045 100644 --- a/packages/BackupRestoreConfirmation/res/values-el/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-el/strings.xml @@ -21,7 +21,7 @@ <string name="backup_confirm_text" msgid="1878021282758896593">"Έχει ζητηθεί Îνα πλήÏες αντίγÏαφο ασφαλείας όλων των δεδομÎνων σε Îναν συνδεδεμÎνο επιτÏαπÎζιο υπολογιστή. ΘÎλετε να επιτÏαπεί αυτή η ενÎÏγεια;\n\nΑν δεν Îχετε ζητήσει οι ίδιοι αυτό το αντίγÏαφο ασφαλείας, μην επιτÏÎψετε την ενÎÏγεια."</string> <string name="allow_backup_button_label" msgid="4217228747769644068">"ΔημιουÏγία αντιγÏάφων ασφαλείας για τα δεδομÎνα μου"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Îα μην δημιουÏγείται αντίγÏαφο ασφαλείας"</string> - <string name="restore_confirm_text" msgid="7499866728030461776">"Έχει ζητηθεί πλήÏης επαναφοÏά όλων των δεδομÎνων από Îναν συνδεδεμÎνο επιτÏαπÎζιο υπολογιστή. ΘÎλετε να επιτÏÎψετε αυτήν την ενÎÏγεια;\n\nΑν δεν Îχετε ζητήσει οι ίδιοι αυτήν την επαναφοÏά, μην επιτÏÎψετε την ενÎÏγεια. Θα γίνει αντικατάσταση τυχόν δεδομÎνων τα οποία υπάÏχουν αυτήν τη στιγμή στη συσκευή σας!"</string> + <string name="restore_confirm_text" msgid="7499866728030461776">"Έχει ζητηθεί πλήÏης επαναφοÏά όλων των δεδομÎνων από Îναν συνδεδεμÎνο επιτÏαπÎζιο υπολογιστή. ΘÎλετε να επιτÏÎψετε αυτή την ενÎÏγεια;\n\nΑν δεν Îχετε ζητήσει οι ίδιοι αυτή την επαναφοÏά, μην επιτÏÎψετε την ενÎÏγεια. Θα γίνει αντικατάσταση τυχόν δεδομÎνων τα οποία υπάÏχουν αυτήν τη στιγμή στη συσκευή σας!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"Αποκατάσταση των δεδομÎνων μου"</string> <string name="deny_restore_button_label" msgid="1724367334453104378">"Îα μην γίνει επαναφοÏά"</string> <string name="current_password_text" msgid="8268189555578298067">"Εισαγάγετε τον Ï„ÏÎχοντα κωδικό Ï€Ïόσβασής αντιγÏάφων ασφαλείας παÏακάτω:"</string> diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml index 1c8ecb710a26b74964fc764fbb931c16c169e8ba..201a392b2fbd8f87dad271a325e3fa6d22e2e7ae 100644 --- a/packages/CompanionDeviceManager/res/values-el/strings.xml +++ b/packages/CompanionDeviceManager/res/values-el/strings.xml @@ -34,7 +34,7 @@ <string name="summary_computer" msgid="3798467601598297062"></string> <string name="helper_title_computer" msgid="4671071173916176037">"ΥπηÏεσίες Google Play"</string> <string name="helper_summary_computer" msgid="8774832742608187072">"Η εφαÏμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μÎÏους της συσκευής σας <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> άδεια για Ï€Ïόσβαση στις φωτογÏαφίες, τα αÏχεία μÎσων και τις ειδοποιήσεις του τηλεφώνου σας"</string> - <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Îα επιτÏÎπεται στη συσκευή <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> να εκτελεί αυτήν την ενÎÏγεια;"</string> + <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Îα επιτÏÎπεται στη συσκευή <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> να εκτελεί αυτή την ενÎÏγεια;"</string> <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Η εφαÏμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά άδεια εκ μÎÏους της συσκευής σας <xliff:g id="DEVICE_NAME">%2$s</xliff:g> για Ïοή εφαÏμογών και άλλων λειτουÏγιών του συστήματος σε συσκευÎÏ‚ σε κοντινή απόσταση"</string> <string name="profile_name_generic" msgid="6851028682723034988">"συσκευή"</string> <string name="summary_generic" msgid="1761976003668044801">"Αυτή η εφαÏμογή θα μποÏεί να συγχÏονίζει πληÏοφοÏίες Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï… τηλεφώνου και της επιλεγμÎνης συσκευής σας, όπως το όνομα ενός ατόμου που σας καλεί."</string> diff --git a/packages/CredentialManager/res/values-af/strings.xml b/packages/CredentialManager/res/values-af/strings.xml index 0c13cb245caca043a49a1f33ebd97b7d767b9402..a2d2a96fe591188fec1ccec7bfce0c68a11a893a 100644 --- a/packages/CredentialManager/res/values-af/strings.xml +++ b/packages/CredentialManager/res/values-af/strings.xml @@ -24,42 +24,42 @@ <string name="string_learn_more" msgid="4541600451688392447">"Kom meer te wete"</string> <string name="content_description_show_password" msgid="3283502010388521607">"Wys wagwoord"</string> <string name="content_description_hide_password" msgid="6841375971631767996">"Versteek wagwoord"</string> - <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Veiliger met wagwoordsleutels"</string> - <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Met wagwoordsleutels hoef jy nie komplekse wagwoorde te skep of te onthou nie"</string> + <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Veiliger met toegangsleutels"</string> + <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Met toegangsleutels hoef jy nie komplekse wagwoorde te skep of te onthou nie"</string> <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Wagwoordsleutels is geënkripteerde digitale sleutels wat jy met jou vingerafdruk, gesig of skermslot skep"</string> <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Hulle word in ’n wagwoordbestuurder gestoor sodat jy op ander toestelle kan aanmeld"</string> - <string name="more_about_passkeys_title" msgid="7797903098728837795">"Meer oor wagwoordsleutels"</string> + <string name="more_about_passkeys_title" msgid="7797903098728837795">"Meer oor toegangsleutels"</string> <string name="passwordless_technology_title" msgid="2497513482056606668">"Wagwoordlose tegnologie"</string> - <string name="passwordless_technology_detail" msgid="6853928846532955882">"Met wagwoordsleutels kan jy aanmeld sonder om op wagwoorde staat te maak. Jy moet net jou vingerafdruk, gesigherkenning, PIN of swieppatroon gebruik om jou identiteit te verifieer en ’n wagwoordsleutel te skep."</string> + <string name="passwordless_technology_detail" msgid="6853928846532955882">"Met toegangsleutels kan jy aanmeld sonder om op wagwoorde staat te maak. Jy moet net jou vingerafdruk, gesigherkenning, PIN of swieppatroon gebruik om jou identiteit te verifieer en ’n toegangsleutel te skep."</string> <string name="public_key_cryptography_title" msgid="6751970819265298039">"Publiekesleutelkriptografie"</string> - <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Gegrond op FIDO Alliance (wat Google, Apple, Microsoft en meer insluit) en W3C-standaarde, gebruik wagwoordsleutels kriptografiese sleutelpare. Anders as die gebruikernaam en string karakters wat ons vir wagwoorde gebruik, word ’n private-publieke-sleutelpaar vir ’n app of webwerf geskep. Die private sleutel word veilig op jou toestel of wagwoordbestuurder geberg en bevestig jou identiteit. Die publieke sleutel word met die app of webwerfbediener gedeel. Met passende sleutels kan jy dadelik registreer en aanmeld."</string> + <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Gegrond op FIDO Alliance (wat Google, Apple, Microsoft en meer insluit) en W3C-standaarde, gebruik toegangsleutels kriptografiese sleutelpare. Anders as die gebruikernaam en string karakters wat ons vir wagwoorde gebruik, word ’n private-publieke-sleutelpaar vir ’n app of webwerf geskep. Die private sleutel word veilig op jou toestel of wagwoordbestuurder geberg en bevestig jou identiteit. Die publieke sleutel word met die app of webwerfbediener gedeel. Met passende sleutels kan jy dadelik registreer en aanmeld."</string> <string name="improved_account_security_title" msgid="1069841917893513424">"Verbeterde rekeningsekuriteit"</string> <string name="improved_account_security_detail" msgid="9123750251551844860">"Elke sleutel is uitsluitlik gekoppel aan die app of webwerf waarvoor dit geskep is, en daarom kan jy nooit per ongeluk by ’n bedrieglike app of webwerf aanmeld nie. En omdat bedieners net publieke sleutels hou, is kuberkrakery baie moeiliker."</string> <string name="seamless_transition_title" msgid="5335622196351371961">"Moeitevrye oorgang"</string> - <string name="seamless_transition_detail" msgid="4475509237171739843">"Wagwoorde sal steeds saam met wagwoordsleutels beskikbaar wees terwyl ons na ’n wagwoordlose toekoms beweeg."</string> + <string name="seamless_transition_detail" msgid="4475509237171739843">"Wagwoorde sal steeds saam met toegangsleutels beskikbaar wees terwyl ons na ’n wagwoordlose toekoms beweeg."</string> <string name="choose_provider_title" msgid="8870795677024868108">"Kies waar om jou <xliff:g id="CREATETYPES">%1$s</xliff:g> te stoor"</string> <string name="choose_provider_body" msgid="4967074531845147434">"Kies ’n wagwoordbestuurder om jou inligting te stoor en volgende keer vinniger aan te meld"</string> - <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Skep wagwoordsleutel vir <xliff:g id="APPNAME">%1$s</xliff:g>?"</string> + <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Skep toegangsleutel vir <xliff:g id="APPNAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="7097275038523578687">"Stoor wagwoord vir <xliff:g id="APPNAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Stoor aanmeldinligting vir <xliff:g id="APPNAME">%1$s</xliff:g>?"</string> - <string name="passkey" msgid="632353688396759522">"wagwoordsleutel"</string> + <string name="passkey" msgid="632353688396759522">"toegangsleutel"</string> <string name="password" msgid="6738570945182936667">"wagwoord"</string> - <string name="passkeys" msgid="5733880786866559847">"wagwoordsleutels"</string> + <string name="passkeys" msgid="5733880786866559847">"toegangsleutels"</string> <string name="passwords" msgid="5419394230391253816">"wagwoorde"</string> <string name="sign_ins" msgid="4710739369149469208">"aanmeldings"</string> <string name="sign_in_info" msgid="2627704710674232328">"aanmeldinligting"</string> <string name="save_credential_to_title" msgid="3172811692275634301">"Stoor <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> in"</string> - <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Skep wagwoordsleutel op ’n ander toestel?"</string> + <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Skep toegangsleutel op ’n ander toestel?"</string> <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Stoor wagwoord op ’n ander toestel?"</string> <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Stoor aanmelding op ’n ander toestel?"</string> <string name="use_provider_for_all_title" msgid="4201020195058980757">"Gebruik <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> vir al jou aanmeldings?"</string> - <string name="use_provider_for_all_description" msgid="1998772715863958997">"Hierdie wagwoordbestuurder vir <xliff:g id="USERNAME">%1$s</xliff:g> sal jou wagwoorde en wagwoordsleutels berg om jou te help om maklik aan te meld"</string> + <string name="use_provider_for_all_description" msgid="1998772715863958997">"Hierdie wagwoordbestuurder vir <xliff:g id="USERNAME">%1$s</xliff:g> sal jou wagwoorde en toegangsleutels berg om jou te help om maklik aan te meld"</string> <string name="set_as_default" msgid="4415328591568654603">"Stel as verstek"</string> <string name="settings" msgid="6536394145760913145">"Instellings"</string> <string name="use_once" msgid="9027366575315399714">"Gebruik een keer"</string> - <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wagwoorde • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> wagwoordsleutels"</string> + <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wagwoorde • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> toegangsleutels"</string> <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wagwoorde"</string> - <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> wagwoordsleutels"</string> + <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> toegangsleutels"</string> <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>-eiebewyse"</string> <string name="passkey_before_subtitle" msgid="2448119456208647444">"Wagwoordsleutel"</string> <string name="another_device" msgid="5147276802037801217">"’n Ander toestel"</string> @@ -68,11 +68,11 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gaan terug na die vorige bladsy"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Maak toe"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Maak toe"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gebruik jou gestoorde wagwoordsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gebruik jou gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gebruik jou aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Kies ’n gestoorde wagwoordsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Kies ’n gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Kies ’n gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies ’n aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml index bf6bc8bbbac9a9b25c5aee1d6c71d6d2201f5081..391c51191daae5ec5bc98f824c2f1b84da094eec 100644 --- a/packages/CredentialManager/res/values-sq/strings.xml +++ b/packages/CredentialManager/res/values-sq/strings.xml @@ -32,7 +32,7 @@ <string name="passwordless_technology_title" msgid="2497513482056606668">"Teknologji pa fjalëkalime"</string> <string name="passwordless_technology_detail" msgid="6853928846532955882">"Çelësat e kalimit të lejojnë të identifikohesh pa u mbështetur te fjalëkalimet. Të duhet vetëm të përdorësh gjurmën e gishtit, njohjen e fytyrës, PIN-in ose të rrëshqasësh motivin për të verifikuar identitetin dhe për të krijuar një çelës kalimi."</string> <string name="public_key_cryptography_title" msgid="6751970819265298039">"Kriptografia e çelësit publik"</string> - <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Bazuar në aleancën FIDO (e cila përfshin Google, Apple, Microsoft e të tjera) dhe standardet W3C, çelësat e kalimit përdorin çifte çelësash kriptografikë. Ndryshe nga emri i përdoruesit dhe vargu i karaktereve që përdorim për fjalëkalime, një çift çelësash privat-publik krijohet për aplikacion ose sajtin e uebit. Çelësi privat ruhet i sigurt në pajisjen tënde ose në menaxherin e fjalëkalimeve dhe konfirmon identitetin tënd. Çelësi publik ndahet me aplikacionin ose serverin e sajtit të uebit. Me çelësat përkatës, mund të regjistrohesh dhe të identifikohesh në çast."</string> + <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Bazuar në aleancën FIDO (e cila përfshin Google, Apple, Microsoft e të tjera) dhe standardet W3C, çelësat e kalimit përdorin çifte çelësash kriptografikë. Ndryshe nga emri i përdoruesit dhe vargu i karaktereve që përdorim për fjalëkalime, një çift çelësash privat-publik krijohet për një aplikacion ose uebsajt. Çelësi privat ruhet i sigurt në pajisjen tënde ose në menaxherin e fjalëkalimeve dhe konfirmon identitetin tënd. Çelësi publik ndahet me aplikacionin ose serverin e uebsajtit. Me çelësat përkatës, mund të regjistrohesh dhe të identifikohesh në çast."</string> <string name="improved_account_security_title" msgid="1069841917893513424">"Siguri e përmirësuar e llogarisë"</string> <string name="improved_account_security_detail" msgid="9123750251551844860">"Secili çelës është i lidhur ekskluzivisht me aplikacionin ose uebsajtin për të cilin është krijuar, kështu që nuk do të identifikohesh asnjëherë gabimisht në një aplikacion ose uebsajt mashtrues. Gjithashtu, me serverët që mbajnë vetëm çelësa publikë, pirateria informatike është shumë më e vështirë."</string> <string name="seamless_transition_title" msgid="5335622196351371961">"Kalim i thjeshtuar"</string> diff --git a/packages/PackageInstaller/res/values-af/strings.xml b/packages/PackageInstaller/res/values-af/strings.xml index 8a5738e6fac2994e3c85de88176a346125710601..38a781ac4ec0dc57d31e7ab3e6ab94aae2b0d986 100644 --- a/packages/PackageInstaller/res/values-af/strings.xml +++ b/packages/PackageInstaller/res/values-af/strings.xml @@ -76,8 +76,8 @@ <string name="uninstall_failed" msgid="1847750968168364332">"Deïnstallering onsuksesvol."</string> <string name="uninstall_failed_app" msgid="5506028705017601412">"Kon nie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> deïnstalleer nie."</string> <string name="uninstalling_cloned_app" msgid="1826380164974984870">"Vee tans <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-kloon uit …"</string> - <string name="uninstall_failed_device_policy_manager" msgid="785293813665540305">"Kan nie aktiewe toesteladministrasieprogram deïnstalleer nie"</string> - <string name="uninstall_failed_device_policy_manager_of_user" msgid="4813104025494168064">"Kan nie aktiewe toesteladministrasieprogram vir <xliff:g id="USERNAME">%1$s</xliff:g> deïnstalleer nie"</string> + <string name="uninstall_failed_device_policy_manager" msgid="785293813665540305">"Kan nie aktiewe toesteladministrasie-app deïnstalleer nie"</string> + <string name="uninstall_failed_device_policy_manager_of_user" msgid="4813104025494168064">"Kan nie aktiewe toesteladministrasie-app vir <xliff:g id="USERNAME">%1$s</xliff:g> deïnstalleer nie"</string> <string name="uninstall_all_blocked_profile_owner" msgid="2009393666026751501">"Dié program word vir sommige gebruikers of profiele vereis en is vir ander gedeïnstalleer"</string> <string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"Hierdie program is nodig vir jou profiel en kan nie gedeïnstalleer word nie."</string> <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"Jou toesteladministrateur vereis die program; kan nie gedeïnstalleer word nie."</string> diff --git a/packages/PackageInstaller/res/values-el/strings.xml b/packages/PackageInstaller/res/values-el/strings.xml index 43c9b1e9e9bdd4283b750885b5e2e880e02d58e2..96b582bf60c41aea6a94484a318ae02feffc2915 100644 --- a/packages/PackageInstaller/res/values-el/strings.xml +++ b/packages/PackageInstaller/res/values-el/strings.xml @@ -24,11 +24,11 @@ <string name="installing" msgid="4921993079741206516">"Εγκατάσταση…"</string> <string name="installing_app" msgid="1165095864863849422">"Εγκατάσταση <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string> <string name="install_done" msgid="5987363587661783896">"Η εφαÏμογή εγκαταστάθηκε."</string> - <string name="install_confirm_question" msgid="7663733664476363311">"ΘÎλετε να εγκαταστήσετε αυτήν την εφαÏμογή;"</string> - <string name="install_confirm_question_update" msgid="3348888852318388584">"ΘÎλετε να ενημεÏώσετε αυτήν την εφαÏμογή;"</string> - <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"<p>ΕνημεÏώστε αυτήν την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στο tablet σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> - <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"<p>ΕνημεÏώστε αυτήν την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στην τηλεόÏασή σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> - <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"<p>ΕνημεÏώστε αυτήν την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στο τηλÎφωνό σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> + <string name="install_confirm_question" msgid="7663733664476363311">"ΘÎλετε να εγκαταστήσετε αυτή την εφαÏμογή;"</string> + <string name="install_confirm_question_update" msgid="3348888852318388584">"ΘÎλετε να ενημεÏώσετε αυτή την εφαÏμογή;"</string> + <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"<p>ΕνημεÏώστε αυτή την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στο tablet σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> + <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"<p>ΕνημεÏώστε αυτή την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στην τηλεόÏασή σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> + <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"<p>ΕνημεÏώστε αυτή την εφαÏμογή από <b><xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g></b>?</p><p>Η συγκεκÏιμÎνη εφαÏμογή λαμβάνει συνήθως ενημεÏώσεις από <b><xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g></b>. Αν κάνετε την ενημÎÏωση από διαφοÏετική πηγή, μποÏεί να λαμβάνετε μελλοντικÎÏ‚ ενημεÏώσεις από οποιαδήποτε πηγή στο τηλÎφωνό σας. Η λειτουÏγικότητα της εφαÏμογής μποÏεί να αλλάξει.</p>"</string> <string name="install_failed" msgid="5777824004474125469">"Η εφαÏμογή δεν εγκαταστάθηκε."</string> <string name="install_failed_blocked" msgid="8512284352994752094">"Η εγκατάσταση του πακÎτου αποκλείστηκε."</string> <string name="install_failed_conflict" msgid="3493184212162521426">"Η εφαÏμογή δεν εγκαταστάθηκε, επειδή το πακÎτο είναι σε διÎνεξη με κάποιο υπάÏχον πακÎτο."</string> @@ -57,15 +57,15 @@ <string name="uninstall_application_title" msgid="4045420072401428123">"Απεγκατάσταση εφαÏμογής"</string> <string name="uninstall_update_title" msgid="824411791011583031">"Απεγκατάσταση ενημÎÏωσης"</string> <string name="uninstall_activity_text" msgid="1928194674397770771">"Η δÏαστηÏιότητα <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> αποτελεί τμήμα της ακόλουθης εφαÏμογής:"</string> - <string name="uninstall_application_text" msgid="3816830743706143980">"ΘÎλετε να απεγκαταστήσετε αυτήν την εφαÏμογή;"</string> - <string name="uninstall_application_text_all_users" msgid="575491774380227119">"ΘÎλετε να απεγκαταστήσετε αυτήν την εφαÏμογή για "<b>"όλους"</b>" τους χÏήστες; Η εφαÏμογή και τα δεδομÎνα της θα καταÏγηθοÏν από "<b>"όλους"</b>" τους χÏήστες στη συσκευή."</string> - <string name="uninstall_application_text_user" msgid="498072714173920526">"ΘÎλετε να απεγκαταστήσετε αυτήν την εφαÏμογή για τον χÏήστη <xliff:g id="USERNAME">%1$s</xliff:g>;"</string> + <string name="uninstall_application_text" msgid="3816830743706143980">"ΘÎλετε να απεγκαταστήσετε αυτή την εφαÏμογή;"</string> + <string name="uninstall_application_text_all_users" msgid="575491774380227119">"ΘÎλετε να απεγκαταστήσετε αυτή την εφαÏμογή για "<b>"όλους"</b>" τους χÏήστες; Η εφαÏμογή και τα δεδομÎνα της θα καταÏγηθοÏν από "<b>"όλους"</b>" τους χÏήστες στη συσκευή."</string> + <string name="uninstall_application_text_user" msgid="498072714173920526">"ΘÎλετε να απεγκαταστήσετε αυτή την εφαÏμογή για τον χÏήστη <xliff:g id="USERNAME">%1$s</xliff:g>;"</string> <string name="uninstall_application_text_current_user_work_profile" msgid="8788387739022366193">"ΘÎλετε να καταÏγήσετε την εγκατάσταση αυτής της εφαÏμογής από το Ï€Ïοφίλ εÏγασίας σας;"</string> <string name="uninstall_update_text" msgid="863648314632448705">"Îα αντικατασταθεί αυτή η εφαÏμογή με την εÏγοστασιακή Îκδοση; Όλα τα δεδομÎνα θα καταÏγηθοÏν."</string> <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Îα αντικατασταθεί αυτή η εφαÏμογή με την εÏγοστασιακή Îκδοση; Όλα τα δεδομÎνα θα καταÏγηθοÏν. Αυτό επηÏεάζει όλους τους χÏήστες της συσκευής, συμπεÏιλαμβανομÎνων και των κατόχων Ï€Ïοφίλ εÏγασίας."</string> <string name="uninstall_keep_data" msgid="7002379587465487550">"ΔιατήÏηση <xliff:g id="SIZE">%1$s</xliff:g> δεδομÎνων εφαÏμογών."</string> - <string name="uninstall_application_text_current_user_clone_profile" msgid="835170400160011636">"ΘÎλετε να διαγÏάψετε αυτήν την εφαÏμογή;"</string> - <string name="uninstall_application_text_with_clone_instance" msgid="6944473334273349036">"ΘÎλετε να απεγκαταστήσετε αυτήν την εφαÏμογή; Θα διαγÏαφεί επίσης το διπλότυπο της εφαÏμογής <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string> + <string name="uninstall_application_text_current_user_clone_profile" msgid="835170400160011636">"ΘÎλετε να διαγÏάψετε αυτή την εφαÏμογή;"</string> + <string name="uninstall_application_text_with_clone_instance" msgid="6944473334273349036">"ΘÎλετε να απεγκαταστήσετε αυτή την εφαÏμογή; Θα διαγÏαφεί επίσης το διπλότυπο της εφαÏμογής <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string> <string name="uninstalling_notification_channel" msgid="840153394325714653">"Απεγκαταστάσεις σε εξÎλιξη"</string> <string name="uninstall_failure_notification_channel" msgid="1136405866767576588">"ΑποτυχημÎνες απεγκαταστάσεις"</string> <string name="uninstalling" msgid="8709566347688966845">"Απεγκατάσταση…"</string> @@ -89,10 +89,10 @@ <string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Οι ενÎÏγειες εγκατάστασης/απεγκατάστασης δεν υποστηÏίζονται στο Wear."</string> <string name="message_staging" msgid="8032722385658438567">"Σταδιακή διάθεση εφαÏμογής…"</string> <string name="app_name_unknown" msgid="6881210203354323926">"Άγνωστη"</string> - <string name="untrusted_external_source_warning" product="tablet" msgid="7067510047443133095">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτήν την πηγή στο tablet σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> - <string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτήν την πηγή στην τηλεόÏασή σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> - <string name="untrusted_external_source_warning" product="watch" msgid="7195163388090818636">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτήν την πηγή στο Ïολόι σας. Αυτό μποÏείτε να το αλλάξετε από την ενότητα Ρυθμίσεις."</string> - <string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτήν την πηγή στο τηλÎφωνό σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> + <string name="untrusted_external_source_warning" product="tablet" msgid="7067510047443133095">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτή την πηγή στο tablet σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> + <string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτή την πηγή στην τηλεόÏασή σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> + <string name="untrusted_external_source_warning" product="watch" msgid="7195163388090818636">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτή την πηγή στο Ïολόι σας. Αυτό μποÏείτε να το αλλάξετε από την ενότητα Ρυθμίσεις."</string> + <string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"Για λόγους ασφαλείας, δεν επιτÏÎπεται Ï€Ïος το παÏόν η εγκατάσταση άγνωστων εφαÏμογών από αυτή την πηγή στο τηλÎφωνό σας. ΜποÏείτε να αλλάξετε την επιλογή από τις Ρυθμίσεις."</string> <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Το τηλÎφωνό σας και τα Ï€Ïοσωπικά δεδομÎνα σας είναι πιο ευάλωτα σε επιθÎσεις από άγνωστες εφαÏμογÎÏ‚. Με την εγκατάσταση αυτής της εφαÏμογής, συμφωνείτε ότι είστε υπεÏθυνοι για τυχόν βλάβη που μποÏεί να Ï€Ïοκληθεί στο τηλÎφωνο ή απώλεια δεδομÎνων που μποÏεί να Ï€ÏοκÏψει από τη χÏήση τους."</string> <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Το tablet σας και τα Ï€Ïοσωπικά δεδομÎνα σας είναι πιο ευάλωτα σε επιθÎσεις από άγνωστες εφαÏμογÎÏ‚. Με την εγκατάσταση αυτής της εφαÏμογής, συμφωνείτε ότι είστε υπεÏθυνοι για τυχόν βλάβη που μποÏεί να Ï€Ïοκληθεί στο tablet ή απώλεια δεδομÎνων που μποÏεί να Ï€ÏοκÏψει από τη χÏήση τους."</string> <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Η τηλεόÏασή σας και τα Ï€Ïοσωπικά δεδομÎνα σας είναι πιο ευάλωτα σε επιθÎσεις από άγνωστες εφαÏμογÎÏ‚. Με την εγκατάσταση αυτής της εφαÏμογής, συμφωνείτε ότι είστε υπεÏθυνοι για τυχόν βλάβη που μποÏεί να Ï€Ïοκληθεί στην τηλεόÏασή ή απώλεια δεδομÎνων που μποÏεί να Ï€ÏοκÏψει από τη χÏήση τους."</string> diff --git a/packages/SettingsLib/AppPreference/res/values-nl/strings.xml b/packages/SettingsLib/AppPreference/res/values-nl/strings.xml index c648449ed9333678aa388e96afcfad5bce5e2a24..595fea362cb96d34ecd7c4b2f75dd9bd08f7650f 100644 --- a/packages/SettingsLib/AppPreference/res/values-nl/strings.xml +++ b/packages/SettingsLib/AppPreference/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="install_type_instant" msgid="7217305006127216917">"Instant-app"</string> + <string name="install_type_instant" msgid="7217305006127216917">"Instant app"</string> </resources> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index ed15e7c7be9c8190d1e5998819e6ef5bf2004ab9..3d89679299c308c8208e0a4120d4d7c717a71997 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nie geregistreer nie"</string> <string name="status_unavailable" msgid="5279036186589861608">"Onbeskikbaar"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC word ewekansig gemaak"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 toestelle is gekoppel}=1{1 toestel is gekoppel}other{# toestelle is gekoppel}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tyd."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tyd."</string> <string name="cancel" msgid="5665114069455378395">"Kanselleer"</string> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 4831a2734f6b233fd58473f22dbfdcff7ceccedb..7f3aa6f3af364104fd2a5a6ac4ec13b50ecca8d4 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"አáˆá‰°áˆ˜á‹˜áŒˆá‰ áˆ"</string> <string name="status_unavailable" msgid="5279036186589861608">"አá‹áŒˆáŠáˆ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"ማአበዘáˆá‰€á‹° á‹áˆ°áˆ«áˆ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 መሣሪያ ተገናáŠá‰·áˆ}=1{1 መሣሪያ ተገናáŠá‰·áˆ}one{# መሣሪያዎች ተገናáŠá‰°á‹‹áˆ}other{# መሣሪያዎች ተገናáŠá‰°á‹‹áˆ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ተጨማሪ ጊዜá¢"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"á‹«áŠáˆ° ጊዜá¢"</string> <string name="cancel" msgid="5665114069455378395">"á‹á‰…áˆ"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 53fbdb1d988431831b40cd7af7a21ee76ca09907..6a6dddd62ca488263ecd6338d0f9c6b67987fe06 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"غير Ù…ÙØ³Ø¬ÙŽÙ‘Ù„"</string> <string name="status_unavailable" msgid="5279036186589861608">"غير متاØ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"â€ÙŠØªÙ… اختيار عنوان MAC بشكل انتقائي."</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{لم يتم اتصال أي أجهزة.}=1{تم اتصال جهاز ÙˆØ§ØØ¯.}two{تم اتصال جهازين.}few{تم اتصال # أجهزة.}many{تم اتصال # جهازًا.}other{تم اتصال # جهاز.}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"وقت أكثر."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"وقت أقل."</string> <string name="cancel" msgid="5665114069455378395">"إلغاء"</string> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index 20edf938a93734ce7fc519515fe0e80fd1d3ba46..6d6800e0ab0ae4265ddeea9035d3a84b6ac69e47 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"পঞà§à¦œà§€à¦•ৃত নহয়"</string> <string name="status_unavailable" msgid="5279036186589861608">"উপলবà§à¦§ নহয়"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC কà§à§°à¦®à¦¾à¦¨à§à¦¸à§°à¦¿ ছেট কৰা হোৱা নাই"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{০ টা ডিà¦à¦¾à¦‡à¦š সংযোগ কৰা হ’ল}=1{à§§ টা ডিà¦à¦¾à¦‡à¦š সংযোগ কৰা হ’ল}one{# টা ডিà¦à¦¾à¦‡à¦š সংযোগ কৰা হ’ল}other{# টা ডিà¦à¦¾à¦‡à¦š সংযোগ কৰা হ’ল}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"অধিক সময়।"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"কম সময়।"</string> <string name="cancel" msgid="5665114069455378395">"বাতিল কৰক"</string> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index d7ca008b8abe601f375462094c4d560e3e2f5929..45420b7586eeec2f4e48dfa76cb6a5312921bdb7 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Qeydiyyatsız"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ælçatmazdır"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ixtiyari olaraq seçildi"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 cihaz qoÅŸulub}=1{1 cihaz qoÅŸulub}other{# cihaz qoÅŸulub}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha çox vaxt."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha az vaxt."</string> <string name="cancel" msgid="5665114069455378395">"Ləğv edin"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index a10f109ab41854aa712169f9cde94afac865dc2f..bd644950f3bc233665842b9b234ea8161b373dab 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nije registrovan"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nedostupno"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC adresa je nasumiÄno izabrana"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 ureÄ‘aja je povezano}=1{1 ureÄ‘aj je povezan}one{# ureÄ‘aj je povezan}few{# ureÄ‘aja su povezana}other{# ureÄ‘aja je povezano}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ViÅ¡e vremena."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string> <string name="cancel" msgid="5665114069455378395">"Otkaži"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 66ce12d5948c1f609f3ecc6d1e89bc2ade04eff4..4ed606c11e943fd66dc8d67b306606d43ec3971c 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðе зарÑгіÑтраваны"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐдÑутнічае"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Выпадковы MAC-адраÑ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Падключана 0 прылад}=1{Падключана 1 прылада}one{Падключана # прылада}few{Падключаны # прылады}many{Падключаны # прылад}other{Падключаны # прылады}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Больш чаÑу."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менш чаÑу."</string> <string name="cancel" msgid="5665114069455378395">"СкаÑаваць"</string> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 5166d876ec11b66107bbbc06e3b4f1f55332c1ae..bc612479e7699bbc574c008e8f6c7f55f0f7b14a 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðе е региÑтрирано"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐÑма данни"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC адреÑÑŠÑ‚ е рандомизиран"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{ÐÑма Ñвързани уÑтройÑтва}=1{1 уÑтройÑтвото е Ñвързано}other{# уÑтройÑтва Ñа Ñвързани}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повече време."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"По-малко време."</string> <string name="cancel" msgid="5665114069455378395">"Отказ"</string> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 7f285f6e76d2e1af2ed3cefbec2f9fc9311f9273..52acfd6336358814c9c468d7ceb92a5414a1da17 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"রেজিসà§à¦Ÿà¦¾à¦° করা নয়"</string> <string name="status_unavailable" msgid="5279036186589861608">"অনà§à¦ªà¦²à¦à§à¦¯"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC রâ€à§à¦¯à¦¾à¦¨à§à¦¡à¦®à¦¾à¦‡à¦œ করা হয়েছে"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{০টি ডিà¦à¦¾à¦‡à¦¸ কানেকà§à¦Ÿ করা হয়েছে}=1{১টি ডিà¦à¦¾à¦‡à¦¸ কানেকà§à¦Ÿ করা হয়েছে}one{#টি ডিà¦à¦¾à¦‡à¦¸ কানেকà§à¦Ÿ করা হয়েছে}other{#টি ডিà¦à¦¾à¦‡à¦¸ কানেকà§à¦Ÿ করা হয়েছে}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"আরও বেশি।"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"আরও কম।"</string> <string name="cancel" msgid="5665114069455378395">"বাতিল"</string> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index d7daed5cf936a7d984aaa1a8f58bdbc5ebafe115..14d853ce09591605e7eee1cd46634ee0a17c1a0f 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nije registrirano"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nije dostupno"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC adresa je nasumiÄno odabrana"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Povezano je 0 ureÄ‘aja}=1{Povezan je 1 ureÄ‘aj}one{Povezan je # ureÄ‘aj}few{Povezana su # ureÄ‘aja}other{Povezano je # ureÄ‘aja}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ViÅ¡e vremena."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string> <string name="cancel" msgid="5665114069455378395">"Otkaži"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 89caaf94bdf74943dd99eb922c6f5fc04cc11c0b..c41b839bcb4311fe02d4cc1da262d2f705094625 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Sense registrar"</string> <string name="status_unavailable" msgid="5279036186589861608">"No disponible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"L\'adreça MAC és aleatòria"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Cap dispositiu connectat}=1{1 dispositiu connectat}other{# dispositius connectats}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Més temps"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menys temps"</string> <string name="cancel" msgid="5665114069455378395">"Cancel·la"</string> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index c4b49672372fbbc9147a00231cb4ffd0abeb1f85..5724677a2bad2e51dd03ca80c7ccbf6db44b3cdc 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Neregistrováno"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nenà k dispozici"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Adresa MAC je vybrána náhodnÄ›"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 pÅ™ipojených zaÅ™ÃzenÃ}=1{1 pÅ™ipojené zaÅ™ÃzenÃ}few{# pÅ™ipojená zaÅ™ÃzenÃ}many{# pÅ™ipojeného zaÅ™ÃzenÃ}other{# pÅ™ipojených zaÅ™ÃzenÃ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Delšà doba"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kratšà doba"</string> <string name="cancel" msgid="5665114069455378395">"ZruÅ¡it"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 94852b4c983ef90690813d372a1d35163b7af4d5..80c10880305aa2710782f64335d651077301e228 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ikke registreret"</string> <string name="status_unavailable" msgid="5279036186589861608">"Utilgængelig"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-adressen er tilfældig"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 enheder er forbundet}=1{1 enhed er forbundet}one{# enhed er forbundet}other{# enheder er forbundet}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mere tid."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string> <string name="cancel" msgid="5665114069455378395">"Annuller"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 9d9a82a53d5b97b97ee5fc5a9b00f797efee2bc8..cf77e6ce5266acd7e2abad8093a801ab212246c5 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nicht registriert"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nicht verfügbar"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-Adresse wird zufällig festgelegt"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 Geräte verbunden}=1{1 Gerät verbunden}other{# Geräte verbunden}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mehr Zeit."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Weniger Zeit."</string> <string name="cancel" msgid="5665114069455378395">"Abbrechen"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index d65f2562a445de43ef40fc4926627c6c4976d4ef..d649786091c75831041eee0fd361fae93a134524 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Μη εγγεγÏαμμÎνη"</string> <string name="status_unavailable" msgid="5279036186589861608">"Μη διαθÎσιμο"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Η διεÏθυνση MAC είναι τυχαία"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 συνδεδεμÎνες συσκευÎÏ‚}=1{1 συνδεδεμÎνη συσκευή}other{# συνδεδεμÎνες συσκευÎÏ‚}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ΠεÏισσότεÏη ÏŽÏα."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ΛιγότεÏη ÏŽÏα."</string> <string name="cancel" msgid="5665114069455378395">"ΑκÏÏωση"</string> @@ -529,7 +530,7 @@ <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ΞυπνητήÏια και ειδοποιήσεις"</string> <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"Îα επιτÏÎπεται ο οÏισμός ξυπνητ. και υπενθυμίσεων"</string> <string name="alarms_and_reminders_title" msgid="8819933264635406032">"ΞυπνητήÏια και υπενθυμίσεις"</string> - <string name="alarms_and_reminders_footer_title" msgid="6302587438389079695">"ΕπιτÏÎψτε σε αυτήν την εφαÏμογή να οÏίζει ξυπνητήÏια και να Ï€ÏογÏαμματίζει ενÎÏγειες που εξαÏτώνται από τον χÏόνο. Αυτό επιτÏÎπει στην εφαÏμογή να εκτελείται στο παÏασκήνιο και, ως εκ τοÏτου, μποÏεί να καταναλώνει πεÏισσότεÏη μπαταÏία.\n\nΑν αυτή η άδεια δεν είναι ενεÏγή, τα υπάÏχοντα ξυπνητήÏια και συμβάντα βάσει χÏόνου που Îχουν Ï€ÏογÏαμματιστεί από αυτήν την εφαÏμογή δεν θα λειτουÏγοÏν."</string> + <string name="alarms_and_reminders_footer_title" msgid="6302587438389079695">"ΕπιτÏÎψτε σε αυτή την εφαÏμογή να οÏίζει ξυπνητήÏια και να Ï€ÏογÏαμματίζει ενÎÏγειες που εξαÏτώνται από τον χÏόνο. Αυτό επιτÏÎπει στην εφαÏμογή να εκτελείται στο παÏασκήνιο και, ως εκ τοÏτου, μποÏεί να καταναλώνει πεÏισσότεÏη μπαταÏία.\n\nΑν αυτή η άδεια δεν είναι ενεÏγή, τα υπάÏχοντα ξυπνητήÏια και συμβάντα βάσει χÏόνου που Îχουν Ï€ÏογÏαμματιστεί από αυτή την εφαÏμογή δεν θα λειτουÏγοÏν."</string> <string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"Ï€ÏόγÏαμμα, ξυπνητήÏι, υπενθÏμιση, Ïολόι"</string> <string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"ΕνεÏγοποίηση"</string> <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"ΕνεÏγοποίηση λειτουÏγίας \"Μην ενοχλείτε\""</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index e35bc19316916b80432a4be0eb15ab44998c39e9..5853d6fc33c6fa86e843a584f9adefc2e7d90ce7 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Not registered"</string> <string name="status_unavailable" msgid="5279036186589861608">"Unavailable"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC is randomised"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 device connected}=1{1 device connected}other{# devices connected}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string> <string name="cancel" msgid="5665114069455378395">"Cancel"</string> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index 08bcb77bfe68bf7bcbfb72ef6309054ab29adfa5..c9037999e914897bd98690ffc51dbaa26c6e986d 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Not registered"</string> <string name="status_unavailable" msgid="5279036186589861608">"Unavailable"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC is randomized"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 device connected}=1{1 device connected}other{# devices connected}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string> <string name="cancel" msgid="5665114069455378395">"Cancel"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index e35bc19316916b80432a4be0eb15ab44998c39e9..5853d6fc33c6fa86e843a584f9adefc2e7d90ce7 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Not registered"</string> <string name="status_unavailable" msgid="5279036186589861608">"Unavailable"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC is randomised"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 device connected}=1{1 device connected}other{# devices connected}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string> <string name="cancel" msgid="5665114069455378395">"Cancel"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index e35bc19316916b80432a4be0eb15ab44998c39e9..5853d6fc33c6fa86e843a584f9adefc2e7d90ce7 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Not registered"</string> <string name="status_unavailable" msgid="5279036186589861608">"Unavailable"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC is randomised"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 device connected}=1{1 device connected}other{# devices connected}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string> <string name="cancel" msgid="5665114069455378395">"Cancel"</string> diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index dba88d0fb167907d1e914ee552e89e8b2b70916e..1da7f124c12f2ca6ee1a2879e85aa3a9d884fa0a 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€Žâ€â€Žâ€â€Žâ€Žâ€â€Žâ€â€â€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€â€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€â€â€Žâ€ŽNot registered‎â€â€Žâ€Žâ€â€Ž"</string> <string name="status_unavailable" msgid="5279036186589861608">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€â€â€â€Žâ€â€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€â€â€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€ŽUnavailable‎â€â€Žâ€Žâ€â€Ž"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€â€â€â€â€Žâ€Žâ€â€â€â€â€Žâ€Žâ€Žâ€â€â€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€â€Žâ€Žâ€â€â€â€Žâ€Žâ€Žâ€â€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€â€Žâ€â€â€â€Žâ€Žâ€â€â€â€â€â€â€Žâ€â€ŽMAC is randomized‎â€â€Žâ€Žâ€â€Ž"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€â€â€â€â€Žâ€Ž0 device connected‎â€â€Žâ€Žâ€â€Ž}=1{‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€â€â€â€â€Žâ€Ž1 device connected‎â€â€Žâ€Žâ€â€Ž}other{‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€â€Žâ€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€â€â€â€â€Žâ€Ž# devices connected‎â€â€Žâ€Žâ€â€Ž}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€Žâ€â€â€â€Žâ€â€Žâ€â€â€Žâ€â€â€Žâ€â€Žâ€â€â€Žâ€Žâ€Žâ€â€â€Žâ€â€â€Žâ€Žâ€â€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€Žâ€â€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€â€Žâ€â€â€ŽMore time.‎â€â€Žâ€Žâ€â€Ž"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€â€â€â€â€Žâ€â€â€Žâ€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€â€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€â€Žâ€â€ŽLess time.‎â€â€Žâ€Žâ€â€Ž"</string> <string name="cancel" msgid="5665114069455378395">"‎â€â€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€â€â€â€Žâ€Žâ€Žâ€Žâ€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€Žâ€â€Žâ€â€â€â€â€â€â€â€Žâ€Žâ€â€â€â€Žâ€â€Žâ€Žâ€â€â€â€â€Žâ€â€Žâ€Žâ€Žâ€Žâ€â€â€â€Žâ€Žâ€â€â€â€Žâ€â€â€Žâ€Žâ€â€Žâ€â€Žâ€Žâ€â€â€â€â€â€Žâ€â€Žâ€Žâ€â€Žâ€Žâ€â€Žâ€â€â€â€â€â€Žâ€â€â€Žâ€â€â€ŽCancel‎â€â€Žâ€Žâ€â€Ž"</string> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 79d3822b2e19524cd2b974e8ff9ea3b19c680e54..40145c96c4260815bcf381358a8b1c31dbc41046 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Sin registrar"</string> <string name="status_unavailable" msgid="5279036186589861608">"No disponible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"La dirección MAC es aleatoria"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Se conectaron 0 dispositivos}=1{Se conectó 1 dispositivo}other{Se conectaron # dispositivos}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo"</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index af03e18143c9d86724dba51a609d9c6c135e08cf..15734d39f689f4c21a011d33e4de93557e6096d7 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"No registrado"</string> <string name="status_unavailable" msgid="5279036186589861608">"No disponible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"La dirección MAC es aleatoria"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Ningún dispositivo conectado}=1{1 dispositivo conectado}other{# dispositivos conectados}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo."</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 56e50f982a2a59d5e8534ece98d9b2979b596dc2..2879f3aae1428589c18a4e699f3ec9a7691404d9 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ei ole registreeritud"</string> <string name="status_unavailable" msgid="5279036186589861608">"Pole saadaval"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-aadress on juhuslikuks muudetud"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Ühendatud on 0 seadet}=1{Ühendatud on 1 seade}other{Ühendatud on # seadet}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Pikem aeg."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lühem aeg."</string> <string name="cancel" msgid="5665114069455378395">"Tühista"</string> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index 41a365186108e1da0dd99f4886ba44e0892bde38..d6bedc85c7781ee01326da058ab7df811cec7563 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Erregistratu gabe"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ez dago erabilgarri"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Ausaz aukeratutako MAC helbidea"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 gailu daude konektatuta}=1{1 gailu dago konektatuta}other{# gailu daude konektatuta}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Denbora gehiago."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Denbora gutxiago."</string> <string name="cancel" msgid="5665114069455378395">"Utzi"</string> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 838237863d7c72cdb28432fe5af1e18302533ec1..05620af219fca5b163a4ccdb4cecfcee869ed0fa 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ثبت نشده است"</string> <string name="status_unavailable" msgid="5279036186589861608">"در دسترس نیست"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"â€ÙˆÛŒÚ˜Ú¯ÛŒ MAC تصادÙÛŒ است"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{هیچ دستگاهی متصل نیست}=1{یک دستگاه متصل است}one{# دستگاه متصل است}other{# دستگاه متصل است}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"زمان بیشتر."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"زمان کمتر."</string> <string name="cancel" msgid="5665114069455378395">"لغو"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 20ed75eb9dfa7738fe7f602021dad5f7bc1e4bfc..efbe8a85a71c37f25cd8eeafb27896905e410fef 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ei rekisteröity"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ei käytettävissä"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-osoite satunnaistetaan"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 yhdistettyä laitetta}=1{1 yhdistetty laite}other{# yhdistettyä laitetta}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Enemmän aikaa"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Vähemmän aikaa"</string> <string name="cancel" msgid="5665114069455378395">"Peru"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 3fdf3042a1dc37444b19a2549c4164efe8b95005..34e870427b5668a19621aa2cfe6d13fc85314741 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Non enregistré"</string> <string name="status_unavailable" msgid="5279036186589861608">"Non disponible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Les adresses MAC sont randomisées"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Aucun appareil connecté}=1{1 appareil connecté}one{# appareil connecté}other{# appareils connectés}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string> <string name="cancel" msgid="5665114069455378395">"Annuler"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 7e99fa7ac12e8e9f5e234b27be4c53fd8d3b6429..0fea3e8338d82a6e06fea0223bf42fdec9fb0b4c 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Non enregistré"</string> <string name="status_unavailable" msgid="5279036186589861608">"Non disponible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"La sélection des adresses MAC est aléatoire"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 appareil connecté}=1{1 appareil connecté}one{# appareil connecté}other{# appareils connectés}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string> <string name="cancel" msgid="5665114069455378395">"Annuler"</string> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 8132a87f39f4cd3d85df72cbff4fb2fe6b0ec5d5..19598fabefe0f838e0070342103d0349d9058a77 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Non rexistrado"</string> <string name="status_unavailable" msgid="5279036186589861608">"Non dispoñible"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"O enderezo MAC é aleatorio"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivos conectados}=1{1 dispositivo conectado}other{# dispositivos conectados}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Máis tempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 239b04d3e944e8b738cea9912f3711121c2c96b9..9b397876dbe6d4335ef6de07ce844f3a863388a7 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"રજિસà«àªŸàª° કરેલ નથી"</string> <string name="status_unavailable" msgid="5279036186589861608">"અનà«àªªàª²àª¬à«àª§"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MACને રેનà«àª¡àª® કરેલ છે"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{કોઈ ડિવાઇસ કનેકà«àªŸà«‡àª¡ નથી}=1{1 ડિવાઇસ કનેકà«àªŸà«‡àª¡ છે}one{# ડિવાઇસ કનેકà«àªŸà«‡àª¡ છે}other{# ડિવાઇસ કનેકà«àªŸà«‡àª¡ છે}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"વધૠસમય."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ઓછો સમય."</string> <string name="cancel" msgid="5665114069455378395">"રદ કરો"</string> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 06ddcd9f4c721a381208524925972648007ffe25..520fcb4c2099f591317643536f502ea0bfe72209 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -456,7 +456,7 @@ <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"आपके इसà¥à¤¤à¥‡à¤®à¤¾à¤² के हिसाब से बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> तक चलेगी"</string> <string name="power_discharge_by" msgid="4113180890060388350">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="92545648425937000">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> तक चलेगी"</string> - <string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> तक"</string> + <string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> तक चलेगी"</string> <string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"बैटरी <xliff:g id="TIME">%1$s</xliff:g> तक खतà¥à¤® हो जाà¤à¤—ी"</string> <string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है"</string> <string name="power_remaining_less_than_duration" msgid="318215464914990578">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"रजिसà¥à¤Ÿà¤° नहीं है"</string> <string name="status_unavailable" msgid="5279036186589861608">"मौजूद नहीं है"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"à¤à¤®à¤à¤¸à¥€ पता रैंडम पर सेट है"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 डिवाइस कनेकà¥à¤Ÿ किया गया है}=1{1 डिवाइस कनेकà¥à¤Ÿ किया गया है}one{# डिवाइस कनेकà¥à¤Ÿ किया गया है}other{# डिवाइस कनेकà¥à¤Ÿ किठगठहैं}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ज़à¥à¤¯à¤¾à¤¦à¤¾ समय."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कम समय."</string> <string name="cancel" msgid="5665114069455378395">"रदà¥à¤¦ करें"</string> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index c5bea2761ed68ce89cfa4120945dcc0dd92c2713..f787d47773dccffe05105f66a459a7ca56a63cc3 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nije registrirano"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nije dostupno"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC adresa odreÄ‘ena je nasumiÄno"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Povezano je 0 ureÄ‘aja}=1{Povezan je jedan ureÄ‘aj}one{Povezan je # ureÄ‘aj}few{Povezana su # ureÄ‘aja}other{Povezano je # ureÄ‘aja}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ViÅ¡e vremena."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string> <string name="cancel" msgid="5665114069455378395">"Odustani"</string> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index e43ed439a8d3d5d11eca57f7660e1ed552e1d61c..0dde2f834f9897adee6de30103178f3c97add05a 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nem regisztrált"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nem érhetÅ‘ el"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"A MAC-cÃm generálása véletlenszerű."</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 csatlakoztatott eszköz}=1{1 csatlakoztatott eszköz}other{# csatlakoztatott eszköz}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Több idÅ‘."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kevesebb idÅ‘."</string> <string name="cancel" msgid="5665114069455378395">"Mégse"</string> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index b8f94f48285b7ce966c8a3bc6ea91b33a16fd19c..1de8bf0970d0e20fd88492943a6493e892053d27 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ô³Ö€Õ¡Õ¶ÖÕ¾Õ¡Õ® Õ¹Õ§"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ô±Õ¶Õ°Õ¡Õ½Õ¡Õ¶Õ¥Õ¬Õ«"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC Õ°Õ¡Õ½ÖÕ¥Õ¶ ÕºÕ¡Õ¿Õ¡Õ°Õ¡Õ¯Õ¡Õ¶Õ¸Ö€Õ¥Õ¶ Õ§ ÖƒÕ¸ÕÕ¾Õ¸Ö‚Õ´"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Ô¹Õ¥Õª Õ¯Õ¥Õ¿Õ«Õ¶ Õ´Õ«Õ¡ÖÕ¾Õ¡Õ® Õ½Õ¡Ö€Ö„Õ¥Ö€ Õ¹Õ¯Õ¡Õ¶}=1{Ô¹Õ¥Õª Õ¯Õ¥Õ¿Õ«Õ¶ 1 Õ½Õ¡Ö€Ö„ Õ§ Õ´Õ«Õ¡ÖÕ¾Õ¡Õ®}one{Ô¹Õ¥Õª Õ¯Õ¥Õ¿Õ«Õ¶ # Õ½Õ¡Ö€Ö„ Õ§ Õ´Õ«Õ¡ÖÕ¾Õ¡Õ®}other{Ô¹Õ¥Õª Õ¯Õ¥Õ¿Õ«Õ¶ # Õ½Õ¡Ö€Ö„ Õ§ Õ´Õ«Õ¡ÖÕ¾Õ¡Õ®}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¨:"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ÕŠÕ¡Õ¯Õ¡Õ½Õ¥ÖÕ¶Õ¥Õ¬ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¨:"</string> <string name="cancel" msgid="5665114069455378395">"Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬"</string> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index f867ba58dcdc7b54e7a8ad30ab69774f399ecd28..ccca25a0369b6ded77b9b9c6af7edd15cb0023cf 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Tidak terdaftar"</string> <string name="status_unavailable" msgid="5279036186589861608">"Tidak tersedia"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC diacak"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 perangkat terhubung}=1{1 perangkat terhubung}other{# perangkat terhubung}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lebih lama."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lebih cepat."</string> <string name="cancel" msgid="5665114069455378395">"Batal"</string> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index aa9d8f82f43ad077e4d609df80af7ff3cede79a6..e671377a291d3e32e16291eee537eebc7c5f568a 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ekki skráð"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ekki tiltækt"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-vistfang er valið af handahófi"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 tæki tengd}=1{1 tæki tengt}one{# tæki tengt}other{# tæki tengd}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meiri tÃmi."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minni tÃmi."</string> <string name="cancel" msgid="5665114069455378395">"Hætta við"</string> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 1f35f74a9c41a22727f2c08dfba60c79c236ddea..fb753d017358c0ec25ef5b978551dba47511f8b7 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Non registrato"</string> <string name="status_unavailable" msgid="5279036186589861608">"Non disponibile"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Selezione casuale dell\'indirizzo MAC"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivi connessi}=1{1 dispositivo connesso}other{# dispositivi connessi}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Più tempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Meno tempo."</string> <string name="cancel" msgid="5665114069455378395">"Annulla"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index f0a19d414f3e814caa7246439eb21c5de6ff8dd3..25a46537706eb0f7b9e8d9eb430f394d2843b18a 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"×œ× ×¨×©×•×"</string> <string name="status_unavailable" msgid="5279036186589861608">"×œ× ×–×ž×™×Ÿ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"â€×›×ª×•בת ×”-MAC ×קר×ית"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{×ין ×ž×›×©×™×¨×™× ×ž×—×•×‘×¨×™×}=1{מכשיר ×חד מחובר}one{# ×ž×›×©×™×¨×™× ×ž×—×•×‘×¨×™×}two{# ×ž×›×©×™×¨×™× ×ž×—×•×‘×¨×™×}other{# ×ž×›×©×™×¨×™× ×ž×—×•×‘×¨×™×}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"יותר זמן."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"פחות זמן."</string> <string name="cancel" msgid="5665114069455378395">"ביטול"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 36c11cd8c431b500f2c022573abfaf2a461f928e..b2bc21af8065924ec6e93e879bc8de207cbc592a 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"未登録"</string> <string name="status_unavailable" msgid="5279036186589861608">"䏿˜Ž"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ã¯ãƒ©ãƒ³ãƒ€ãƒ ã«è¨å®šã•れã¾ã™"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{接続ã•れã¦ã„るデãƒã‚¤ã‚¹ã¯ã‚りã¾ã›ã‚“}=1{1 å°ã®ãƒ‡ãƒã‚¤ã‚¹ãŒæŽ¥ç¶šã•れã¦ã„ã¾ã™}other{# å°ã®ãƒ‡ãƒã‚¤ã‚¹ãŒæŽ¥ç¶šã•れã¦ã„ã¾ã™}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"é•·ãã—ã¾ã™ã€‚"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"çŸãã—ã¾ã™ã€‚"</string> <string name="cancel" msgid="5665114069455378395">"ã‚ャンセル"</string> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index f516cf29d222006b24127010a7d50af02aa59a56..67c0228f651edc985450d2cbfc756a8d602b529b 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"áƒáƒ áƒáƒ ეგისტრირებული"</string> <string name="status_unavailable" msgid="5279036186589861608">"მიუწვდáƒáƒ›áƒ”ლიáƒ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-ის მიმდევრáƒáƒ‘რáƒáƒ ეულიáƒ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{დáƒáƒ™áƒáƒ•შირებულირ0 მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ}=1{დáƒáƒ™áƒáƒ•შირებულირ1 მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ}other{დáƒáƒ™áƒáƒ•შირებულირ# მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"მეტი დრáƒ."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ნáƒáƒ™áƒšáƒ”ბი დრáƒ."</string> <string name="cancel" msgid="5665114069455378395">"გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"</string> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 36ee23abb15db6fcb8dd6a6a493e4255e0d3cf54..946a8611ec57e870cb7801ad2961d5bcdeeadc0a 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Тіркелмеген"</string> <string name="status_unavailable" msgid="5279036186589861608">"ҚолжетімÑіз"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC еркін таңдауға қойылды"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Ешқандай құрылғы жалғанбаған}=1{1 құрылғы жалғанған}other{# құрылғы жалғанған}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбірек уақыт."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ðзырақ уақыт."</string> <string name="cancel" msgid="5665114069455378395">"Ð‘Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ"</string> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 75c0f6a81c2f6f2249e676b1da7746c523e4b59e..62b1c8c01fd1e1cde7b4b734f857a2af792eb6be 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"មិនបាន​ចុះឈ្មោះ"</string> <string name="status_unavailable" msgid="5279036186589861608">"មិន​មាន"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ážáŸ’រូវ​បាន​ជ្រើសរើស​ដោយ​ចៃដន្យ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{បានភ្ជាប់ឧបករណ០0}=1{បានភ្ជាប់ឧបករណ០1}other{បានភ្ជាប់ឧបករណ០#}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"រយៈពáŸáž›â€‹áž…្រើន​ជាង។"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"រយៈពáŸáž›â€‹ážáž·áž…​ជាង។"</string> <string name="cancel" msgid="5665114069455378395">"បោះ​បង់​"</string> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 94df4192aa885e00f8e42dc0c155aae7669927d6..042effbc21b5ebbf455903a7dbc9b6d8bf376389 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ನೋಂದಾಯಿಸಲಾಗಿಲà³à²²"</string> <string name="status_unavailable" msgid="5279036186589861608">"ಲà²à³à²¯à²µà²¿à²²à³à²²"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ಯಾದೃಚà³à²›à²¿à²•ವಾಗಿದೆ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 ಸಾಧನವನà³à²¨à³ ಕನೆಕà³à²Ÿà³ ಮಾಡಲಾಗಿದೆ}=1{1 ಸಾಧನವನà³à²¨à³ ಕನೆಕà³à²Ÿà³ ಮಾಡಲಾಗಿದೆ}one{# ಸಾಧನಗಳನà³à²¨à³ ಕನೆಕà³à²Ÿà³ ಮಾಡಲಾಗಿದೆ}other{# ಸಾಧನಗಳನà³à²¨à³ ಕನೆಕà³à²Ÿà³ ಮಾಡಲಾಗಿದೆ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ಹೆಚà³à²šà³ ಸಮಯ."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ಕಡಿಮೆ ಸಮಯ."</string> <string name="cancel" msgid="5665114069455378395">"ರದà³à²¦à³à²®à²¾à²¡à²¿"</string> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index db215dda42457fbe65fddbcaa6a34841fa93554a..ee1895d1346416a9a3dff975b3734150c350045d 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"등ë¡ë˜ì§€ 않ìŒ"</string> <string name="status_unavailable" msgid="5279036186589861608">"ì‚¬ìš©í• ìˆ˜ ì—†ìŒ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MACê°€ ìž„ì˜ ì„ íƒë¨"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{기기 0대 ì—°ê²°ë¨}=1{기기 1대 ì—°ê²°ë¨}other{기기 #대 ì—°ê²°ë¨}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"시간 늘리기"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"시간 줄ì´ê¸°"</string> <string name="cancel" msgid="5665114069455378395">"취소"</string> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index 3f6874f1f00ab8926930c3429d36a26c94b86e25..0883e187dcb8e468ccdfac5ef4ed007fa62fabb1 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Катталган ÑмеÑ"</string> <string name="status_unavailable" msgid="5279036186589861608">"ЖеткиликÑиз"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC дарегин кокуÑтан тандоо иштетилген"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 түзмөк туташып турат}=1{1 түзмөк туташып турат}other{# түзмөк туташып турат}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбүрөөк убакыт."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ðзыраак убакыт."</string> <string name="cancel" msgid="5665114069455378395">"Жок"</string> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index fc82a9be57e0a0d2be23a9050bcc2949db627157..558f7ed8cbc6f14cf65f9d3a508479f680126ad7 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ບà»à»ˆà»„ດ້ລົງທະບຽນ"</string> <string name="status_unavailable" msgid="5279036186589861608">"ບà»à»ˆàº¡àºµàº‚à»à»‰àº¡àº¹àº™"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC is randomized"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{àºàº±àº‡àºšà»à»ˆà»„ດ້ເຊື່àºàº¡àº•à»à»ˆàºàº¸àº›àº°àºàºàº™à»€àº—ື່àº}=1{ເຊື່àºàº¡àº•à»à»ˆ 1 àºàº¸àº›àº°àºàºàº™à»àº¥à»‰àº§}other{ເຊື່àºàº¡àº•à»à»ˆ # àºàº¸àº›àº°àºàºàº™à»àº¥à»‰àº§}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ເພີ່ມເວລາ."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ຫຼຸດເວລາ."</string> <string name="cancel" msgid="5665114069455378395">"àºàº»àºà»€àº¥àºµàº"</string> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index bc4630dc7f80ef9924135f0b96b70445284c9a25..772b6e15004e1e05f068f201a96cd09c545d6334 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Neužregistruota"</string> <string name="status_unavailable" msgid="5279036186589861608">"Užimta"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC parinktas atsitiktine tvarka"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Neprijungtas nÄ— vienas įrenginys}=1{Prijungtas vienas įrenginys}one{Prijungtas # įrenginys}few{Prijungti # įrenginiai}many{Prijungta # įrenginio}other{Prijungta # įrenginių}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daugiau laiko."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mažiau laiko."</string> <string name="cancel" msgid="5665114069455378395">"AtÅ¡aukti"</string> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 133520be1498fb25a4a30795f2ed7f7232a1157e..87d6c8caf6153b27ef3f2be63cab842124752d52 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Nav reÄ£istrÄ“ts"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nepieejams"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ir atlasÄ«ts nejauÅ¡Ä secÄ«bÄ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Nav pievienota neviena ierÄ«ce}=1{Pievienota viena ierÄ«ce}zero{Pievienotas # ierÄ«ces}one{Pievienota # ierÄ«ce}other{Pievienotas # ierÄ«ces}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"VairÄk laika."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"MazÄk laika."</string> <string name="cancel" msgid="5665114069455378395">"Atcelt"</string> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 2de999818a39e1e9c0c5dfc895d4ad7221497016..0bfa707f444b22b04948ddc637982025be4356ce 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðе е региÑтриран"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐедоÑтапно"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-адреÑата е рандомизирана"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 поврзани уреди}=1{1 поврзан уред}one{# поврзан уред}other{# поврзани уреди}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повеќе време."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Помалку време."</string> <string name="cancel" msgid="5665114069455378395">"Откажи"</string> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 0aad465e1c9e9c4b0140046a3716efc21936edb3..cd43d16bde79e7f2799c6c89b0944321bc78250a 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"രജിസàµâ€Œà´±àµà´±àµ¼ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²"</string> <string name="status_unavailable" msgid="5279036186589861608">"à´²à´àµà´¯à´®à´²àµà´²"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC യാദൃചàµà´›à´¿à´•മാകàµà´•ിയിരികàµà´•àµà´¨àµà´¨àµ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 ഉപകരണം കണകàµà´±àµà´±àµ ചെയàµâ€Œà´¤àµ}=1{1 ഉപകരണം കണകàµà´±àµà´±àµ ചെയàµâ€Œà´¤àµ}other{# ഉപകരണങàµà´™àµ¾ കണകàµâ€Œà´±àµà´±àµ ചെയàµâ€Œà´¤àµ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"കൂടàµà´¤àµ½ സമയം."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"à´•àµà´±à´žàµà´ž സമയം."</string> <string name="cancel" msgid="5665114069455378395">"റദàµà´¦à´¾à´•àµà´•àµà´•"</string> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 94e6059bc2701f039e47f09bc47413e3ad839739..3f9ed6800c13b165ab54e7a1a5807281fba6c40a 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"БүртгÑÑгүй"</string> <string name="status_unavailable" msgid="5279036186589861608">"Байхгүй"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC хаÑгийг Ò¯Ò¯ÑгÑÑÑн"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 төхөөрөмж холбогдÑон}=1{1 төхөөрөмж холбогдÑон}other{# төхөөрөмж холбогдÑон}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Их хугацаа."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Бага хугацаа."</string> <string name="cancel" msgid="5665114069455378395">"Цуцлах"</string> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 30775199ed7051f6dad14a676602436df8261dbb..c6e8f6be177ecafb3f697df6e7b446666083a46f 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"नोंदवलेले नाही"</string> <string name="status_unavailable" msgid="5279036186589861608">"उपलबà¥à¤§ नाही"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC रà¤à¤¡à¤®à¤¾à¤‡à¤ केला आहे"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 डिवà¥à¤¹à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ केले}=1{à¤à¤• डिवà¥à¤¹à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ केले}other{# डिवà¥à¤¹à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ केली}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"जासà¥à¤¤ वेळ."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कमी वेळ."</string> <string name="cancel" msgid="5665114069455378395">"रदà¥à¤¦ करा"</string> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 24c1733d02cd0ac5c714ffc64cc610799f887c4d..c946ae556193c7c954fdb11abed372f002ab8376 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Tidak didaftarkan"</string> <string name="status_unavailable" msgid="5279036186589861608">"Tidak tersedia"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC dirawakkan"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 peranti disambungkan}=1{1 peranti disambungkan}other{# peranti disambungkan}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lagi masa."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kurang masa."</string> <string name="cancel" msgid="5665114069455378395">"Batal"</string> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index aa9989ba3bd207a2538f450cfeca3cbdd03932c0..b5e4aa5ec2706a062e3d36c5a4ba44f1186047ce 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"မှá€á€ºá€•ုံá€á€„်မထားပါ"</string> <string name="status_unavailable" msgid="5279036186589861608">"မရရှá€á€”á€á€¯á€„်ပါá‹"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ကá€á€¯ ကျပန်းပေးထားသည်"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{စက်á€á€…်á€á€¯á€™á€»á€¾ á€á€»á€á€á€ºá€†á€€á€ºá€™á€‘ားပါ}=1{စက် 1 á€á€¯ á€á€»á€á€á€ºá€†á€€á€ºá€‘ားသည်}other{စက် # á€á€¯ á€á€»á€á€á€ºá€†á€€á€ºá€‘ားသည်}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"အá€á€»á€á€”်á€á€á€¯á€¸á€›á€”်á‹"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"အá€á€»á€á€”်လျှော့ရန်á‹"</string> <string name="cancel" msgid="5665114069455378395">"မလုပ်á€á€±á€¬á€·"</string> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 9126f2904620d570107dd75231f9749905b3bbfa..3551e755071e27c9c8ca8931b945109b4ebb4981 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ikke registrert"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ikke tilgjengelig"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC velges tilfeldig"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 enheter er tilkoblet}=1{1 enhet er tilkoblet}other{# enheter er tilkoblet}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mer tid."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string> <string name="cancel" msgid="5665114069455378395">"Avbryt"</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index f3e2cdd45e9ea34849d36de23f68a4f21e610cc0..a9bb2b11f0bcef21c0fa34359d9cbd0b4d31dcde 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"दरà¥à¤¤à¤¾ नगरिà¤à¤•ो"</string> <string name="status_unavailable" msgid="5279036186589861608">"अनà¥à¤ªà¤²à¤¬à¥à¤§"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC कà¥à¤°à¤®à¤°à¤¹à¤¿à¤¤ छ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{कà¥à¤¨à¥ˆ पनि डिà¤à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ गरिà¤à¤•ो छैन}=1{à¤à¤‰à¤Ÿà¤¾ डिà¤à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ गरिà¤à¤•ो छ}other{# वटा डिà¤à¤¾à¤‡à¤¸ कनेकà¥à¤Ÿ गरिà¤à¤•ा छनà¥}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"थप समय।"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कम समय।"</string> <string name="cancel" msgid="5665114069455378395">"रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index c8581994b75f9cd8ec4ccb41e37e0ac62571d201..c8cb2b637a182d187ee872b4b0af517df124b0ad 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Niet geregistreerd"</string> <string name="status_unavailable" msgid="5279036186589861608">"Niet beschikbaar"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-adres is willekeurig"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 verbonden apparaten}=1{1 verbonden apparaat}other{# verbonden apparaten}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tijd."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tijd."</string> <string name="cancel" msgid="5665114069455378395">"Annuleren"</string> diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index ec72ba9fc567dc03da952dd3a1fb14decce3e967..ad2578065276c887dd284658256007387e8f3352 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ପଞàଜିକàƒà¬¤ ହà‹à¬‡à¬¨à¬¾à¬¹à¬¿à¬"</string> <string name="status_unavailable" msgid="5279036186589861608">"ଉପଲବàଧ ନାହିà¬"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MACର ଠିକଣା ରାଣàଡମà à¬à¬¾à¬¬à‡ ସà‡à¬Ÿà କରାଯାଇଛି"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0ଟି ଡିà¬à¬¾à¬‡à¬¸ ସଂଯàକàତ ହà‹à¬‡à¬›à¬¿}=1{1ଟି ଡିà¬à¬¾à¬‡à¬¸ ସଂଯàକàତ ହà‹à¬‡à¬›à¬¿}other{#ଟି ଡିà¬à¬¾à¬‡à¬¸ ସଂଯàକàତ ହà‹à¬‡à¬›à¬¿}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ଅଧିକ ସମàŸà¥¤"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"କମà ସମàŸà¥¤"</string> <string name="cancel" msgid="5665114069455378395">"ବାତିଲ"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 34194589e3a63eaff2a29fa1439dc384cc81c36b..3b3d4887b9bae671fe7ff2f68dcd705982e73f86 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string> <string name="status_unavailable" msgid="5279036186589861608">"ਅਣਉਪਲਬਧ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ਬੇਤਰਤੀਬਾ ਹੈ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 ਡੀਵਾਈਸ ਕਨੈਕਟ ਹੋ ਗਿਆ}=1{1 ਡੀਵਾਈਸ ਕਨੈਕਟ ਹੋ ਗਿਆ}other{# ਡੀਵਾਈਸ ਕਨੈਕਟ ਹੋ ਗà¨}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ਹੋਰ ਸਮਾਂ।"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ਘੱਟ ਸਮਾਂ।"</string> <string name="cancel" msgid="5665114069455378395">"ਰੱਦ ਕਰੋ"</string> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index addad23c52556fbb88fbfcc7587abf38999446d0..4470bd9d6f74ad11b880c60576bcf6855d64111e 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Niezarejestrowane"</string> <string name="status_unavailable" msgid="5279036186589861608">"NiedostÄ™pny"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Adres MAC jest randomizowany"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 połączonych urzÄ…dzeÅ„}=1{1 połączone urzÄ…dzenie}few{# połączone urzÄ…dzenia}many{# połączonych urzÄ…dzeÅ„}other{# połączonego urzÄ…dzenia}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"WiÄ™cej czasu."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mniej czasu."</string> <string name="cancel" msgid="5665114069455378395">"Anuluj"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 6f3f644ccfd175ca61d28e822876139936e8b697..b3137f17bee2452c2ab704b69b8cacc99437576b 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registrado"</string> <string name="status_unavailable" msgid="5279036186589861608">"Não disponÃvel"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é randomizado"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivo conectado}=1{1 dispositivo conectado}one{# dispositivo conectado}other{# dispositivos conectados}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index 566c5d318a5c3deaddc1b43d57de3e034e4820b7..12f6097f6350b14f9b487134dabb2f03765057a8 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registado"</string> <string name="status_unavailable" msgid="5279036186589861608">"IndisponÃvel"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é aleatório."</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivo ligado}=1{1 dispositivo ligado}other{# dispositivos ligados}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 6f3f644ccfd175ca61d28e822876139936e8b697..b3137f17bee2452c2ab704b69b8cacc99437576b 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registrado"</string> <string name="status_unavailable" msgid="5279036186589861608">"Não disponÃvel"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é randomizado"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivo conectado}=1{1 dispositivo conectado}one{# dispositivo conectado}other{# dispositivos conectados}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string> <string name="cancel" msgid="5665114069455378395">"Cancelar"</string> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 77b79c9aafd769251162e28dd9592f6e71d04441..a6e0e3ae8c64326661f48ea47ab8f70d61ac5384 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Neînregistrat"</string> <string name="status_unavailable" msgid="5279036186589861608">"Indisponibilă"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC este aleatoriu"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Niciun dispozitiv conectat}=1{Un dispozitiv conectat}few{# dispozitive conectate}other{# de dispozitive conectate}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mai mult timp."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mai puÈ›in timp."</string> <string name="cancel" msgid="5665114069455378395">"Anulează"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index c368913c2a448809b4399eaaf1d680f72e15fdb7..a0b82697fc9a1ccb2714dce37c8ad73cd71cc88b 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðе зарегиÑтрирован"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐедоÑтупно"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Случайный MAC-адреÑ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{УÑтройÑтва не подключены}=1{Подключено 1 уÑтройÑтво}one{Подключено # уÑтройÑтво}few{Подключено # уÑтройÑтва}many{Подключено # уÑтройÑтв}other{Подключено # уÑтройÑтва}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Увеличить продолжительноÑть"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Уменьшить продолжительноÑть"</string> <string name="cancel" msgid="5665114069455378395">"Отмена"</string> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 17090a75f13245ad2a6d5646f0d28ab3a644710d..b308c99863a004d40abc0675d16ca66eeae79ea2 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ලියà·à¶´à¶¯à·’à¶‚à¶ à·’ වී à¶±à·à¶"</string> <string name="status_unavailable" msgid="5279036186589861608">"ලබà·à¶œà¶ නොහà·à¶š"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC සසම්භà·à·€à·“ වේ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{à¶‹à¶´à·à¶‚à¶œ 0à¶šà·Š සම්බන්ධිà¶à¶ºà·’}=1{à¶‹à¶´à·à¶‚à¶œ 1à¶šà·Š සම්බන්ධිà¶à¶ºà·’}one{à¶‹à¶´à·à¶‚à¶œ #à¶šà·Š සම්බන්ධිà¶à¶ºà·’}other{à¶‹à¶´à·à¶‚à¶œ #à¶šà·Š සම්බන්ධිà¶à¶ºà·’}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"වේලà·à·€ à·€à·à¶©à·’යෙන්."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"වේලà·à·€ අඩුවෙන්."</string> <string name="cancel" msgid="5665114069455378395">"අවලංගු කරන්න"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 06367677c365868235c618b42efbd0346f06f5b7..bb7c32ec7949e3344d2772eff0a2ec530953499e 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Neregistrované"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nie je k dispozÃcii"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Adresa MAC je náhodná"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Je pripojených 0 zariadenÃ}=1{Je pripojené 1 zariadenie}few{Sú pripojené # zariadenia}many{# devices connected}other{Je pripojených # zariadenÃ}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Dlhšà Äas."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kratšà Äas."</string> <string name="cancel" msgid="5665114069455378395">"ZruÅ¡iÅ¥"</string> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 949ed422ea5784456b18ec93ee6d097f9ad1bde8..eced5d90105253e02a915281f8f13ea005d7ea23 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ni registrirana"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ni na voljo"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Naslov MAC je nakljuÄno izbran"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 naprav ni povezanih.}=1{1 naprava je povezana.}one{# naprava je povezana.}two{# napravi sta povezani.}few{# naprave so povezane.}other{# naprav je povezanih.}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"DaljÅ¡i Äas."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"KrajÅ¡i Äas."</string> <string name="cancel" msgid="5665114069455378395">"PrekliÄi"</string> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index 0eff3ab8dc82968582d3926d3f7da910caa6494f..81fed3476e0b51319b98e175fa23506293dee07c 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Paregjistruar"</string> <string name="status_unavailable" msgid="5279036186589861608">"Nuk ofrohet"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Adresa MAC është e rastësishme"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 pajisje të lidhura}=1{1 pajisje e lidhur}other{# pajisje të lidhura}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Më shumë kohë."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Më pak kohë."</string> <string name="cancel" msgid="5665114069455378395">"Anulo"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 2ae0fe2e3c10f90a6a32395f5a900ab14f0d82b6..5eba95928b5207f7672a7ab1a2e0d06659c9e55d 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðије региÑтрован"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐедоÑтупно"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC адреÑа је наÑумично изабрана"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 уређаја је повезано}=1{1 уређај је повезан}one{# уређај је повезан}few{# уређаја Ñу повезана}other{# уређаја је повезано}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Више времена."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Мање времена."</string> <string name="cancel" msgid="5665114069455378395">"Откажи"</string> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index e8f045d06c2a3782acb31e93fa6fee2b692767a7..e6bc3a6ab506797c870f48b7cf8da467a47ee0d1 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ej registrerad"</string> <string name="status_unavailable" msgid="5279036186589861608">"Inte tillgängligt"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC-adressen slumpgenereras"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Ingen enhet är ansluten}=1{1 enhet är ansluten}other{# enheter är anslutna}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Längre tid."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kortare tid."</string> <string name="cancel" msgid="5665114069455378395">"Avbryt"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 64119140bb65e0d81924783da10fe51a36b90a4b..9b74ee294a33916aeb25cfe23e2894e024df821e 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Haijasajiliwa"</string> <string name="status_unavailable" msgid="5279036186589861608">"Hamna"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Imechagua anwani ya MAC kwa nasibu"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Hakuna kifaa kimeunganishwa}=1{Kifaa 1 kimeunganishwa}other{Vifaa # vimeunganishwa}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Muda zaidi."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Muda kidogo."</string> <string name="cancel" msgid="5665114069455378395">"Ghairi"</string> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 60863848319003e17b676c5ceb241f2053c9d255..130a45e32d6a36a2535bf3b282ce4b805c782b47 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"பதிவ௠செயà¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"</string> <string name="status_unavailable" msgid="5279036186589861608">"கிடைகà¯à®•விலà¯à®²à¯ˆ"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC à®®à¯à®•வரி சீரறà¯à®±à¯à®³à¯à®³à®¤à¯"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 சாதனம௠இணைகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯}=1{1 சாதனம௠இணைகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯}other{# சாதனஙà¯à®•ள௠இணைகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®©}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"நேரதà¯à®¤à¯ˆ அதிகரிகà¯à®•à¯à®®à¯."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"நேரதà¯à®¤à¯ˆà®•௠கà¯à®±à¯ˆà®•à¯à®•à¯à®®à¯."</string> <string name="cancel" msgid="5665114069455378395">"ரதà¯à®¤à¯à®šà¯†à®¯à¯"</string> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index f43b56a36acc33a7e167b24971920a2bed9db10f..b7cade9a460890a48d50b6a45a6a91b4e4f6c7d1 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"నమోదౠకాలేదà±"</string> <string name="status_unavailable" msgid="5279036186589861608">"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC యాదృచà±à°›à°¿à°•à°‚à°—à°¾ ఉంది"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 పరికరం కనెకà±à°Ÿà± చేయబడింది}=1{1 పరికరం కనెకà±à°Ÿà± చేయబడింది}other{# పరికరాలౠకనెకà±à°Ÿà± చేయబడà±à°¡à°¾à°¯à°¿}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"à°Žà°•à±à°•à±à°µ సమయం."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"తకà±à°•à±à°µ సమయం."</string> <string name="cancel" msgid="5665114069455378395">"à°°à°¦à±à°¦à± చేయండి"</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index c7b10fba15e25ba20c2d5f392c3ddebcec90a7e7..1516ad9b4bc27197d861c917539ad076167b4cfc 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ไม่ได้ลงทะเบียน"</string> <string name="status_unavailable" msgid="5279036186589861608">"ไม่มี"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC เป็นà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{มีà¸à¸¸à¸›à¸à¸£à¸“์ที่เชื่à¸à¸¡à¸•่à¸à¸à¸¢à¸¹à¹ˆ 0 เครื่à¸à¸‡}=1{มีà¸à¸¸à¸›à¸à¸£à¸“์ที่เชื่à¸à¸¡à¸•่à¸à¸à¸¢à¸¹à¹ˆ 1 เครื่à¸à¸‡}other{มีà¸à¸¸à¸›à¸à¸£à¸“์ที่เชื่à¸à¸¡à¸•่à¸à¸à¸¢à¸¹à¹ˆ # เครื่à¸à¸‡}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"เวลามาà¸à¸‚ึ้น"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"เวลาน้à¸à¸¢à¸¥à¸‡"</string> <string name="cancel" msgid="5665114069455378395">"ยà¸à¹€à¸¥à¸´à¸"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 8222c426541c22065e84f13627e673deb47c7df1..477782edd5f01d77cef20bf59727d123aa8f2b34 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Hindi nakarehistro"</string> <string name="status_unavailable" msgid="5279036186589861608">"Hindi available"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Naka-randomize ang MAC"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 device ang nakakonekta}=1{1 device ang nakakonekta}one{# device ang nakakonekta}other{# na device ang nakakonekta}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Dagdagan ang oras."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Bawasan ang oras."</string> <string name="cancel" msgid="5665114069455378395">"Kanselahin"</string> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 991c9182ce3c5a2cb6fda4b92375e2e05df6acf1..e562685c6b2ee77de5fdb7459e8eb58c255b4219 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Kaydettirilmedi"</string> <string name="status_unavailable" msgid="5279036186589861608">"Kullanılamıyor"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC rastgele yapıldı"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 cihaz baÄŸlandı}=1{1 cihaz baÄŸlandı}other{# cihaz baÄŸlandı}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha uzun süre."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha kısa süre."</string> <string name="cancel" msgid="5665114069455378395">"İptal"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 1cb31853a267b3447ee1e122b2d24ebc9f4da3c6..40e12f090ab8ce123a875fa56546971c2b3d05c2 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ðе зареєÑтровано"</string> <string name="status_unavailable" msgid="5279036186589861608">"ÐедоÑтупно"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Ð”Ð»Ñ MAC-адреÑи вибрано функцію довільного вибору"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Підключено 0 приÑтроїв}=1{Підключено 1 приÑтрій}one{Підключено # приÑтрій}few{Підключено # приÑтрої}many{Підключено # приÑтроїв}other{Підключено # приÑтрою}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Більше чаÑу."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менше чаÑу."</string> <string name="cancel" msgid="5665114069455378395">"СкаÑувати"</string> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 7e3a164b6c1ac68fbc3d5790dc3dace598e42e77..e00f02ba0bd9328ffdd22890dab53b888af7a2df 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"رجسٹر Ù†Ûیں ÛÛ’"</string> <string name="status_unavailable" msgid="5279036186589861608">"غیر دستیاب"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"â€MAC Ù¾ØªÛ Ø±ÛŒÙ†ÚˆÙ… ÛÛ’"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 Ø¢Ù„Û Ù…Ù†Ø³Ù„Ú© ÛÛ’}=1{1 Ø¢Ù„Û Ù…Ù†Ø³Ù„Ú© ÛÛ’}other{# آلات منسلک Ûیں}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ø²ÛŒØ§Ø¯Û ÙˆÙ‚ØªÛ”"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ú©Ù… وقت۔"</string> <string name="cancel" msgid="5665114069455378395">"منسوخ کریں"</string> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 845b83554e12a2bc0a57ffe10e5420091746271d..1bfdf9eccd5625b5367b79ea8a4752fddd7d0dca 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Registratsiya qilinmagan"</string> <string name="status_unavailable" msgid="5279036186589861608">"Mavjud emas"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Tasodifiy MAC manzil"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 ta qurilma ulangan}=1{1 ta qurilma ulangan}other{# ta qurilma ulangan}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ko‘proq vaqt."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kamroq vaqt."</string> <string name="cancel" msgid="5665114069455378395">"Bekor qilish"</string> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 18090352f0a0d2484ce5625feecf2557215d27e8..71b7fb1a0d0fca84058826c77a51065392e00c87 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Chưa được đăng ký"</string> <string name="status_unavailable" msgid="5279036186589861608">"Không có"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Äịa chỉ MAC được gán ngẫu nhiên"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Äã kết nối 0 thiết bị}=1{Äã kết nối 1 thiết bị}other{Äã kết nối # thiết bị}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Nhiá»u thá»i gian hÆ¡n."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ãt thá»i gian hÆ¡n."</string> <string name="cancel" msgid="5665114069455378395">"Há»§y"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 7d027512c8ffbd58d91ed39fbb39c596ae53d409..0dc214e5c9adeb5be03d6e2ec51bd7a0b26ca66b 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"未注册"</string> <string name="status_unavailable" msgid="5279036186589861608">"æ— æ³•èŽ·å–"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC å·²éšæœºåŒ–"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{已连接到 0 å°è®¾å¤‡}=1{已连接到 1 å°è®¾å¤‡}other{已连接到 # å°è®¾å¤‡}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"å¢žåŠ æ—¶é—´ã€‚"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"å‡å°‘时间。"</string> <string name="cancel" msgid="5665114069455378395">"å–æ¶ˆ"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index c563c86512bec049487de7c2d7823b5955c5ae5d..d18a07ec70481a22a7c549fadea3bd96b4d6309b 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"未註冊"</string> <string name="status_unavailable" msgid="5279036186589861608">"無法使用"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ä½å€å·²éš¨æ©Ÿç”¢ç”Ÿ"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{未連接任何è£ç½®}=1{已連接 1 部è£ç½®}other{已連接 # 部è£ç½®}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"å¢žåŠ æ™‚é–“ã€‚"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"減少時間。"</string> <string name="cancel" msgid="5665114069455378395">"å–æ¶ˆ"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index eb3843ea1f1a5c1f7b5355fc13ea1bd8246c3291..95f266f2c2540e4e7e7f220e519765c1755e7408 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"未註冊"</string> <string name="status_unavailable" msgid="5279036186589861608">"無法å–å¾—"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"MAC ä½å€å·²éš¨æ©ŸåŒ–"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{未與任何è£ç½®é€£ç·š}=1{已與 1 部è£ç½®é€£ç·š}other{已與 # 部è£ç½®é€£ç·š}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"å¢žåŠ æ™‚é–“ã€‚"</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"減少時間。"</string> <string name="cancel" msgid="5665114069455378395">"å–æ¶ˆ"</string> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index f4fd35205f1a8b2d723b892f28fd14395345b490..9c789c42ce95e301145bc6395f47b31233af561a 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -517,7 +517,8 @@ <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Akubhalisiwe"</string> <string name="status_unavailable" msgid="5279036186589861608">"Ayitholakali"</string> <string name="wifi_status_mac_randomized" msgid="466382542497832189">"I-MAC ayihleliwe"</string> - <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{Idivayisi engu-0 ixhunyiwe}=1{Idivayisi e-1 ixhunyiwe}one{Amadivayisi angu-# axhunyiwe}other{Amadivayisi angu-# axhunyiwe}}"</string> + <!-- no translation found for wifi_tether_connected_summary (5100712926640492336) --> + <skip /> <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Isikhathi esiningi."</string> <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Isikhathi esincane."</string> <string name="cancel" msgid="5665114069455378395">"Khansela"</string> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java index b57f6ca26f3997af204d1817805b648b557d4256..969f1fde604e6b81d89f66dc9f9211bd41461807 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java @@ -19,6 +19,7 @@ package com.android.providers.settings; import static android.provider.Settings.Config.SYNC_DISABLED_MODE_NONE; import static android.provider.Settings.Config.SYNC_DISABLED_MODE_PERSISTENT; import static android.provider.Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT; + import static com.android.providers.settings.Flags.supportOverrides; import android.annotation.SuppressLint; @@ -180,6 +181,7 @@ public final class DeviceConfigService extends Binder { DELETE, LIST, LIST_NAMESPACES, + LIST_LOCAL_OVERRIDES, RESET, SET_SYNC_DISABLED_FOR_TESTS, GET_SYNC_DISABLED_FOR_TESTS, @@ -266,6 +268,11 @@ public final class DeviceConfigService extends Binder { if (peekNextArg() == null) { isValid = true; } + } else if (supportOverrides() && "list_local_overrides".equalsIgnoreCase(cmd)) { + verb = CommandVerb.LIST_LOCAL_OVERRIDES; + if (peekNextArg() == null) { + isValid = true; + } } else if ("reset".equalsIgnoreCase(cmd)) { verb = CommandVerb.RESET; } else if ("set_sync_disabled_for_tests".equalsIgnoreCase(cmd)) { @@ -418,62 +425,29 @@ public final class DeviceConfigService extends Binder { : "Failed to delete " + key + " from " + namespace); break; case LIST: - if (supportOverrides()) { - pout.println("Server overrides:"); - - Map<String, Map<String, String>> underlyingValues = - DeviceConfig.getUnderlyingValuesForOverriddenFlags(); - - if (namespace != null) { - DeviceConfig.Properties properties = - DeviceConfig.getProperties(namespace); - List<String> keys = new ArrayList<>(properties.getKeyset()); - Collections.sort(keys); - for (String name : keys) { - String valueReadFromDeviceConfig = properties.getString(name, null); - String underlyingValue = underlyingValues.get(namespace).get(name); - String printValue = underlyingValue != null - ? underlyingValue - : valueReadFromDeviceConfig; - pout.println(name + "=" + printValue); - } - } else { - for (String line : listAll(iprovider)) { - boolean isPrivateNamespace = false; + if (namespace != null) { + DeviceConfig.Properties properties = + DeviceConfig.getProperties(namespace); + List<String> keys = new ArrayList<>(properties.getKeyset()); + Collections.sort(keys); + for (String name : keys) { + pout.println(name + "=" + properties.getString(name, null)); + } + } else { + for (String line : listAll(iprovider)) { + if (supportOverrides()) { + boolean isPrivate = false; for (String privateNamespace : PRIVATE_NAMESPACES) { if (line.startsWith(privateNamespace)) { - isPrivateNamespace = true; + isPrivate = true; + break; } } - if (!isPrivateNamespace) { + + if (!isPrivate) { pout.println(line); } - } - } - - pout.println(""); - pout.println("Local overrides (these take precedence):"); - for (String overrideNamespace : underlyingValues.keySet()) { - Map<String, String> flagToValue = - underlyingValues.get(overrideNamespace); - for (String flag : flagToValue.keySet()) { - String flagText = overrideNamespace + "/" + flag; - String valueText = - DeviceConfig.getProperty(overrideNamespace, flag); - pout.println(flagText + "=" + valueText); - } - } - } else { - if (namespace != null) { - DeviceConfig.Properties properties = - DeviceConfig.getProperties(namespace); - List<String> keys = new ArrayList<>(properties.getKeyset()); - Collections.sort(keys); - for (String name : keys) { - pout.println(name + "=" + properties.getString(name, null)); - } - } else { - for (String line : listAll(iprovider)) { + } else { pout.println(line); } } @@ -503,6 +477,22 @@ public final class DeviceConfigService extends Binder { pout.println(namespaces.get(i)); } break; + case LIST_LOCAL_OVERRIDES: + if (supportOverrides()) { + Map<String, Map<String, String>> underlyingValues = + DeviceConfig.getUnderlyingValuesForOverriddenFlags(); + for (String overrideNamespace : underlyingValues.keySet()) { + Map<String, String> flagToValue = + underlyingValues.get(overrideNamespace); + for (String flag : flagToValue.keySet()) { + String flagText = overrideNamespace + "/" + flag; + String valueText = + DeviceConfig.getProperty(overrideNamespace, flag); + pout.println(flagText + "=" + valueText); + } + } + } + break; case RESET: DeviceConfig.resetToDefaults(resetMode, namespace); break; diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml index 1097f87c0be9edf6c01b6b75ce786b9bd8b3857b..783b375168226a4b9f5f3578c4783e065d92c652 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml +++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml @@ -8,7 +8,7 @@ <string name="a11y_settings_label" msgid="3977714687248445050">"အများသုံးနá€á€¯á€„်မှု ဆက်á€á€„်များ"</string> <string name="power_label" msgid="7699720321491287839">"ပါá€á€«á€á€œá€¯á€á€º"</string> <string name="power_utterance" msgid="7444296686402104807">"ပါá€á€« ရွေးစရာများ"</string> - <string name="recent_apps_label" msgid="6583276995616385847">"လá€á€ºá€á€œá€±á€¬á€žá€¯á€¶á€¸ အက်ပ်များ"</string> + <string name="recent_apps_label" msgid="6583276995616385847">"မကြာသေးမီက အက်ပ်များ"</string> <string name="lockscreen_label" msgid="648347953557887087">"လော့á€á€ºá€™á€»á€€á€ºá€”ှာပြင်"</string> <string name="quick_settings_label" msgid="2999117381487601865">"အမြန် ဆက်á€á€„်များ"</string> <string name="notifications_label" msgid="6829741046963013567">"အကြောင်းကြားá€á€»á€€á€ºá€™á€»á€¬á€¸"</string> diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml index 9ad9d560394f4d195a2fa577335d2fa20eaf9cc7..1e03c03b1ae4f1334597f68877213de180f1c68a 100644 --- a/packages/SystemUI/res-keyguard/values-ky/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml @@ -72,7 +72,7 @@ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN кд же мнжа изи мнен клпуÑн ачңыз"</string> <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"СрÑөз же мнжа изи мнен клпуÑн ачңз"</string> <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Грфиклык ачкч же мнжа изи менн клпуÑн ачңз"</string> - <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Кошумча коопÑуздук үчүн түзмөк жумуш ÑаÑÑатына ылайык кулпуланган"</string> + <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Кошумча коопÑуздук үчүн түзмөк жумуш ÑрежеÑи боюнча кулпуланган"</string> <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Бекем кулпулангандан кийин PIN код талап кылынат"</string> <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Бекем кулпулангандан кийин ÑырÑөз талап кылынат"</string> <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Бекем кулпулангандан кийн грфикалык ачкыч талп клынт"</string> diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml index 8c817330953ccb9a9c2900176830be52dedeea66..d1067a9960bf99280e8c50154be2f4801e0fc9a8 100644 --- a/packages/SystemUI/res-keyguard/values/dimens.xml +++ b/packages/SystemUI/res-keyguard/values/dimens.xml @@ -105,6 +105,13 @@ screen. --> <item name="half_opened_bouncer_height_ratio" type="dimen" format="float">0.0</item> + <!-- Proportion of the screen height to use to set the maximum height of the bouncer to when + the device is in the DEVICE_POSTURE_HALF_OPENED posture. + + This value is only used when motion layout bouncer is used - when flag + landscape.enable_lockscreen (b/293252410) is on --> + <item name="motion_layout_half_fold_bouncer_height_ratio" type="dimen" format="float">0.55</item> + <!-- The actual amount of translation that is applied to the security when it animates from one side of the screen to the other in one-handed or user switcher mode. Note that it will always translate from the side of the screen to the other (it will "jump" closer to the diff --git a/packages/SystemUI/res-keyguard/xml/keyguard_pattern_scene.xml b/packages/SystemUI/res-keyguard/xml/keyguard_pattern_scene.xml index 6112411402c41aabc8f8457916f3278332b52c51..751d6d8d04e77a8f75beb86bc0e64168508aa242 100644 --- a/packages/SystemUI/res-keyguard/xml/keyguard_pattern_scene.xml +++ b/packages/SystemUI/res-keyguard/xml/keyguard_pattern_scene.xml @@ -10,9 +10,34 @@ motion:duration="0" motion:autoTransition="none"/> + <Transition + motion:constraintSetStart="@id/single_constraints" + motion:constraintSetEnd="@+id/half_folded_single_constraints" + motion:duration="@integer/material_motion_duration_short_1" + motion:autoTransition="none"/> + <!-- No changes to default layout --> <ConstraintSet android:id="@+id/single_constraints"/> + <ConstraintSet android:id="@+id/half_folded_single_constraints"> + + <Constraint + android:id="@+id/pattern_top_guideline" + androidprv:layout_constraintGuide_percent= + "@dimen/motion_layout_half_fold_bouncer_height_ratio"/> + + <Constraint + android:id="@+id/keyguard_selector_fade_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="0dp" + android:layout_marginTop="@dimen/keyguard_eca_top_margin" + android:orientation="vertical" + androidprv:layout_constraintBottom_toBottomOf="parent" + androidprv:layout_constraintTop_toBottomOf="@+id/flow1"/> + + </ConstraintSet> + <ConstraintSet android:id="@+id/split_constraints"> <Constraint diff --git a/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml b/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml index 2a1270c80b755f6fddef2f6a75770feaf6cac83d..cc498f4a7ab33f30d3a0ef70c54549f58a599294 100644 --- a/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml +++ b/packages/SystemUI/res-keyguard/xml/keyguard_pin_scene.xml @@ -26,11 +26,35 @@ motion:constraintSetStart="@id/single_constraints" motion:constraintSetEnd="@+id/split_constraints" motion:duration="0" - motion:autoTransition="none"/> + motion:autoTransition="none" /> + + <Transition + motion:constraintSetStart="@id/single_constraints" + motion:constraintSetEnd="@+id/half_folded_single_constraints" + motion:duration="@integer/material_motion_duration_short_1" /> <!-- No changes to default layout --> <ConstraintSet android:id="@+id/single_constraints"/> + <ConstraintSet android:id="@+id/half_folded_single_constraints"> + + <Constraint + android:id="@+id/pin_pad_top_guideline" + androidprv:layout_constraintGuide_percent= + "@dimen/motion_layout_half_fold_bouncer_height_ratio"/> + + <Constraint + android:id="@+id/keyguard_selector_fade_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="0dp" + android:layout_marginTop="@dimen/keyguard_eca_top_margin" + android:orientation="vertical" + androidprv:layout_constraintBottom_toBottomOf="parent" + androidprv:layout_constraintTop_toBottomOf="@+id/flow1"/> + + </ConstraintSet> + <ConstraintSet android:id="@+id/split_constraints"> <Constraint @@ -68,4 +92,5 @@ android:layout_marginTop="@dimen/keyguard_eca_top_margin" /> </ConstraintSet> + </MotionScene> \ No newline at end of file diff --git a/packages/SystemUI/res/layout/bluetooth_device_item.xml b/packages/SystemUI/res/layout/bluetooth_device_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..6dd44fbe645decedf7a054b1edb2a30c665d8741 --- /dev/null +++ b/packages/SystemUI/res/layout/bluetooth_device_item.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<!-- TODO(b/298124674) remove this root --> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/bluetooth_device_list_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_marginBottom="4dp"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/bluetooth_device_row" + style="@style/BluetoothTileDialog.Device" + android:layout_height="@dimen/bluetooth_dialog_device_height" + android:paddingEnd="24dp" + android:paddingStart="20dp" + android:baselineAligned="false"> + + <ImageView + android:id="@+id/bluetooth_device_icon" + android:contentDescription="@string/accessibility_bluetooth_device_icon" + android:layout_width="24dp" + android:layout_height="24dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + android:layout_gravity="center_vertical" /> + + <View + android:id="@+id/bluetooth_device" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintTop_toTopOf="@+id/bluetooth_device_name" + app:layout_constraintBottom_toBottomOf="@+id/bluetooth_device_summary" + app:layout_constraintStart_toStartOf="@+id/bluetooth_device_name" + app:layout_constraintEnd_toEndOf="@+id/bluetooth_device_name" /> + + <TextView + android:layout_width="0dp" + android:id="@+id/bluetooth_device_name" + style="@style/BluetoothTileDialog.DeviceName" + android:paddingStart="20dp" + android:paddingTop="10dp" + app:layout_constraintWidth_percent="0.7" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toEndOf="@+id/bluetooth_device_icon" + app:layout_constraintEnd_toStartOf="@+id/gear_icon" + app:layout_constraintBottom_toTopOf="@+id/bluetooth_device_summary" + android:gravity="center_vertical" + android:textSize="14sp" /> + + <TextView + android:layout_width="0dp" + android:id="@+id/bluetooth_device_summary" + style="@style/BluetoothTileDialog.DeviceSummary" + android:paddingStart="20dp" + android:paddingBottom="10dp" + app:layout_constraintWidth_percent="0.7" + app:layout_constraintTop_toBottomOf="@+id/bluetooth_device_name" + app:layout_constraintStart_toEndOf="@+id/bluetooth_device_icon" + app:layout_constraintEnd_toStartOf="@+id/gear_icon" + app:layout_constraintBottom_toBottomOf="parent" + android:gravity="center_vertical" /> + + <ImageView + android:id="@+id/gear_icon" + android:src="@drawable/ic_settings_24dp" + android:contentDescription="@string/accessibility_bluetooth_device_settings_gear" + android:layout_width="0dp" + android:layout_height="24dp" + app:layout_constraintStart_toEndOf="@+id/bluetooth_device_name" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintWidth_percent="0.3" + android:gravity="center_vertical" + android:paddingStart="10dp" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</LinearLayout> \ No newline at end of file diff --git a/packages/SystemUI/res/layout/bluetooth_tile_dialog.xml b/packages/SystemUI/res/layout/bluetooth_tile_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..16aeb951822cd9aa0b13f8575a27d18c2a4965d7 --- /dev/null +++ b/packages/SystemUI/res/layout/bluetooth_tile_dialog.xml @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/root" + style="@style/Widget.SliceView.Panel" + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/bluetooth_tile_dialog_title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingTop="24dp" + android:ellipsize="end" + android:gravity="center_vertical|center_horizontal" + android:text="@string/quick_settings_bluetooth_label" + android:textAppearance="@style/TextAppearance.Dialog.Title" + android:textSize="24sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintBottom_toTopOf="@id/bluetooth_tile_dialog_subtitle" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/bluetooth_tile_dialog_subtitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:layout_marginBottom="@dimen/bluetooth_dialog_layout_margin" + android:ellipsize="end" + android:gravity="center_vertical|center_horizontal" + android:maxLines="1" + android:text="@string/quick_settings_bluetooth_tile_subtitle" + android:textAppearance="@style/TextAppearance.Dialog.Body.Message" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintBottom_toTopOf="@id/bluetooth_toggle_title" + app:layout_constraintTop_toBottomOf="@id/bluetooth_tile_dialog_title" /> + + <TextView + android:id="@+id/bluetooth_toggle_title" + style="@style/BluetoothTileDialog.Device" + android:layout_width="0dp" + android:layout_height="64dp" + android:gravity="center_vertical" + android:layout_marginTop="4dp" + android:text="@string/turn_on_bluetooth" + android:textAppearance="@style/TextAppearance.Dialog.Body.Message" + android:textSize="16sp" + app:layout_constraintEnd_toStartOf="@+id/bluetooth_toggle" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/bluetooth_tile_dialog_subtitle" /> + + <Switch + android:id="@+id/bluetooth_toggle" + style="@style/BluetoothTileDialog.Device" + android:layout_width="0dp" + android:layout_height="48dp" + android:gravity="center|center_vertical" + android:paddingEnd="24dp" + android:layout_marginTop="10dp" + android:contentDescription="@string/turn_on_bluetooth" + android:switchMinWidth="@dimen/settingslib_switch_track_width" + android:theme="@style/MainSwitch.Settingslib" + android:thumb="@drawable/settingslib_thumb_selector" + android:track="@drawable/settingslib_track_selector" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/bluetooth_toggle_title" + app:layout_constraintTop_toBottomOf="@id/bluetooth_tile_dialog_subtitle" /> + + <androidx.constraintlayout.widget.Group + android:id="@+id/pair_new_device_layout_group" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:visibility="gone" + app:constraint_referenced_ids="ic_add,pair_new_device_text" /> + + <ImageView + android:id="@+id/ic_add" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginStart="36dp" + android:gravity="center_vertical" + android:importantForAccessibility="no" + android:src="@drawable/ic_add" + app:layout_constraintBottom_toTopOf="@id/device_list" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/pair_new_device_text" + app:layout_constraintTop_toBottomOf="@id/bluetooth_toggle_title" + android:tint="?android:attr/textColorPrimary" /> + + <TextView + android:id="@+id/pair_new_device_text" + style="@style/BluetoothTileDialog.Device" + android:layout_width="0dp" + android:layout_height="@dimen/bluetooth_dialog_device_height" + android:gravity="center_vertical" + android:layout_marginStart="0dp" + android:paddingStart="20dp" + android:text="@string/pair_new_bluetooth_devices" + android:textSize="14sp" + android:textAppearance="@style/TextAppearance.Dialog.Title" + app:layout_constraintBottom_toTopOf="@id/device_list" + app:layout_constraintStart_toEndOf="@+id/ic_add" + app:layout_constraintTop_toBottomOf="@id/bluetooth_toggle_title" + app:layout_constraintEnd_toEndOf="parent" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/device_list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:nestedScrollingEnabled="false" + android:overScrollMode="never" + android:scrollbars="vertical" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/pair_new_device_text" + app:layout_constraintBottom_toTopOf="@+id/see_all_text" /> + + <androidx.constraintlayout.widget.Group + android:id="@+id/see_all_layout_group" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:visibility="gone" + app:constraint_referenced_ids="ic_arrow,see_all_text" /> + + <ImageView + android:id="@+id/ic_arrow" + android:layout_marginStart="36dp" + android:layout_width="24dp" + android:layout_height="24dp" + android:importantForAccessibility="no" + android:gravity="center_vertical" + android:src="@drawable/ic_arrow_forward" + app:layout_constraintBottom_toTopOf="@+id/done_button" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/see_all_text" + app:layout_constraintTop_toBottomOf="@id/device_list" /> + + <TextView + android:id="@+id/see_all_text" + style="@style/BluetoothTileDialog.Device" + android:layout_width="0dp" + android:layout_height="@dimen/bluetooth_dialog_device_height" + android:gravity="center_vertical" + android:layout_marginStart="0dp" + android:paddingStart="20dp" + android:text="@string/see_all_bluetooth_devices" + android:textSize="14sp" + android:textAppearance="@style/TextAppearance.Dialog.Title" + app:layout_constraintBottom_toTopOf="@+id/done_button" + app:layout_constraintStart_toEndOf="@+id/ic_arrow" + app:layout_constraintTop_toBottomOf="@id/device_list" + app:layout_constraintEnd_toEndOf="parent" /> + + <Button + android:id="@+id/done_button" + style="@style/Widget.Dialog.Button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/dialog_bottom_padding" + android:layout_marginEnd="@dimen/dialog_side_padding" + android:layout_marginStart="@dimen/dialog_side_padding" + android:clickable="true" + android:ellipsize="end" + android:focusable="true" + android:maxLines="1" + android:text="@string/inline_done_button" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/see_all_text" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 27db1c95d2f4fa89607a33396bc0c25fdf29425e..0f17288b725da8b7ba90849205eb7c74c1b3bfd9 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Skuif af"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Beweeg links"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Beweeg regs"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Vermeerder vergrootglas se breedte"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Verminder vergrootglas se breedte"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Vermeerder vergrootglas se hoogte"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Verminder vergrootglas se hoogte"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Vergrotingwisselaar"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Vergroot die hele skerm"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Vergroot \'n deel van die skerm"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index a68ec1513356d0fa36f9659b7fb4f4b5dc94c908..5f827cd5a2e9bafd7630916fd3ef513f92f286ba 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ወደ ታች á‹áˆ°á‹µ"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ወደ áŒáˆ« á‹áˆ°á‹µ"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ወደ ቀአá‹áˆ°á‹µ"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"የማጉያ ስá‹á‰µáŠ• ጨáˆáˆ"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"የማጉያ ስá‹á‰µáŠ• ቀንስ"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"የማጉያ á‰áˆ˜á‰µáŠ• ጨáˆáˆ"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"የማጉያ á‰áˆ˜á‰µáŠ• ቀንስ"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"የማጉላት ማብሪያ/ማጥáŠá‹«"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ሙሉ áŒˆá… áŠ¥á‹á‰³áŠ• ያጉሉ"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"የማያ ገጹን áŠáሠአጉላ"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 42e60c50d95db7d2cefcbb5084fb0c68d9926980..813f98997a08f2212721ca2c59e648dacba57802 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"نقل للأسÙÙ„"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"نقل لليسار"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"نقل لليمين"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"زيادة عرض Ù†Ø§ÙØ°Ø© المكبÙّر"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"تقليل عرض Ù†Ø§ÙØ°Ø© المكبÙّر"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"زيادة Ø§Ø±ØªÙØ§Ø¹ Ù†Ø§ÙØ°Ø© المكبÙّر"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"تقليل Ø§Ø±ØªÙØ§Ø¹ Ù†Ø§ÙØ°Ø© المكبÙّر"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Ù…ÙØªØ§Ø تبديل وضع التكبير"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"تكبير الشاشة كلها"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"تكبير جزء من الشاشة"</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 7026e0c4d754abb9ca75745a848554897405180a..43461f4ecebf6481796fe863b5a07463189394eb 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"তললৈ নিয়ক"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"বাওà¦à¦«à¦¾à¦²à¦²à§ˆ নিয়ক"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"সোà¦à¦«à¦¾à¦²à¦²à§ˆ নিয়ক"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"বিবৰà§à¦§à¦•à§° পà§à§°à¦¸à§à¦¥ বৃদà§à¦§à¦¿ কৰক"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"বিবৰà§à¦§à¦•à§° পà§à§°à¦¸à§à¦¥ হà§à§°à¦¾à¦¸ কৰক"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"বিবৰà§à¦§à¦•à§° উচà§à¦šà¦¤à¦¾ বৃদà§à¦§à¦¿ কৰক"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"বিবৰà§à¦§à¦•à§° উচà§à¦šà¦¤à¦¾ হà§à§°à¦¾à¦¸ কৰক"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"বিবৰà§à¦§à¦¨à§° ছà§à¦‡à¦š"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"পূৰà§à¦£ সà§à¦•à§à§°à§€à¦¨ বিবৰà§à¦§à¦¨ কৰক"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"সà§à¦•à§à§°à§€à¦¨à§° কিছৠঅংশ বিবৰà§à¦§à¦¨ কৰক"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 68a8b87865b77120ef7b7e8675f9711ba8d89c5f..7cda9dc5c5b57d47e42195451fd73c6fded96784 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"AÅŸağı köçürün"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Sola köçürün"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"SaÄŸa köçürün"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Böyüdücünün enini artırın"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Böyüdücünün enini azaldın"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Böyüdücünün uzunluÄŸunu artırın"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Böyüdücünün uzunluÄŸunu azaldın"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"BöyütmÉ™ dÉ™yiÅŸdiricisi"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Tam ekranı böyüdün"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekran hissÉ™sinin böyüdülmÉ™si"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 37aa8231a77d61ef1f67ed434ed99050872b3709..3366a72c087ed2b2e4717aae1279e7615cd1e7ff 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Pomerite nadole"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Pomerite nalevo"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Pomerite nadesno"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Povećajte Å¡irinu lupe"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Smanjite Å¡irinu lupe"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Povećajte visinu lupe"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Smanjite visinu lupe"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Prelazak na drugi režim uvećanja"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Uvećajte ceo ekran"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Uvećajte deo ekrana"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 69fce40145ea4f28d3090409f3173f60597776fd..1b7b1a271ec43408d2bae4489aa0d3faf8b36938 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ПерамÑÑціць ніжÑй"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ПерамÑÑціць улева"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ПерамÑÑціць управа"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ПавÑлічыць шырыню лупы"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Паменшыць шырыню лупы"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ПавÑлічыць вышыню лупы"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Паменшыць вышыню лупы"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Пераключальнік павелічÑннÑ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ПавÑлічыць увеÑÑŒ Ñкран"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ПавÑлічыць чаÑтку Ñкрана"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 3c0dd63762d599f1439e40cd823f0675e85dd82c..e9ff7daaf834f69f5ae53673c1729605b1806b2d 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ПремеÑтване надолу"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ПремеÑтване налÑво"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ПремеÑтване надÑÑно"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Увеличаване на ширината на лупата"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ÐамалÑване на ширината на лупата"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Увеличаване на виÑочината на лупата"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ÐамалÑване на виÑочината на лупата"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Превключване на увеличението"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увеличаване на Ñ†ÐµÐ»Ð¸Ñ ÐµÐºÑ€Ð°Ð½"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увеличаване на чаÑÑ‚ от екрана"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 0975b987d06ad956330db4243bf9b4bff2905894..0c73df3f1921792bac3184df2c1a29dab26fd89b 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"নিচে নামান"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"বাà¦à¦¦à¦¿à¦•ে সরান"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ডানদিকে সরান"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"মà§à¦¯à¦¾à¦—নিফায়ার উইনà§à¦¡à§‹à¦° পà§à¦°à¦¸à§à¦¥ বাড়ান"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"মà§à¦¯à¦¾à¦—নিফায়ার উইনà§à¦¡à§‹à¦° পà§à¦°à¦¸à§à¦¥ কমান"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"মà§à¦¯à¦¾à¦—নিফায়ার উইনà§à¦¡à§‹à¦° উচà§à¦šà¦¤à¦¾ বাড়ান"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"মà§à¦¯à¦¾à¦—নিফায়ার উইনà§à¦¡à§‹à¦° উচà§à¦šà¦¤à¦¾ কমান"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"বড় করে দেখার সà§à¦‡à¦š"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"সমà§à¦ªà§‚রà§à¦£ সà§à¦•à§à¦°à¦¿à¦¨ বড় করে দেখা"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"সà§à¦•à§à¦°à¦¿à¦¨à§‡à¦° কিছà§à¦Ÿà¦¾ অংশ বড় করà§à¦¨"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 021ba8aba8c33d5a9619d009eb3eafe126ef3fc4..bdba725cce1ae9ea4124f678cd69c05fb6ded408 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Pomjeranje prema dolje"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Pomjeranje lijevo"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Pomjeranje desno"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Povećanje Å¡irine povećala"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Smanjenje Å¡irine povećala"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Povećanje visine povećala"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Smanjenje visine povećala"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"PrekidaÄ za uvećavanje"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Uvećavanje prikaza preko cijelog ekrana"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Uvećavanje dijela ekrana"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index ab2c25bc8262276c71f5b09bdca41ef5c37db0bb..fd49b461d1d8017f633afaef18f349ff46d976cc 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mou cap avall"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mou cap a l\'esquerra"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mou cap a la dreta"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Augmenta l\'amplada de la lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Redueix l\'amplada de la lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Augmenta l\'alçada de la lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Redueix l\'alçada de la lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Canvia al mode d\'ampliació"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Amplia la pantalla completa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Amplia una part de la pantalla"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 9bde3bb1eaddb8c17565ed64b65b65c8a7f7524e..5992c6008e54b6fc329bdd120b3becebd87c6f3b 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"PÅ™esunout dolů"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"PÅ™esunout doleva"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"PÅ™esunout doprava"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Zvýšit Å¡ÃÅ™ku lupy"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"SnÞit Å¡ÃÅ™ku lupy"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Zvýšit výšku lupy"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"SnÞit výšku lupy"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"PÅ™epÃnaÄ zvÄ›tÅ¡enÃ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ZvÄ›tÅ¡it celou obrazovku"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ZvÄ›tÅ¡it Äást obrazovky"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 94ab18922558abee70f354adfc975254b35d0b9d..15c13cd84eef285d9e1c3f0d3681adeb9d3b301a 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Flyt ned"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Flyt til venstre"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Flyt til højre"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Forøg bredden pÃ¥ luppen"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Reducer bredden pÃ¥ luppen"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Forøg højden pÃ¥ luppen"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Reducer højden pÃ¥ luppen"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Skift forstørrelsestilstand"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Forstør hele skærmen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Forstør en del af skærmen"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 4ae8f27d13395346609054b2e3b3c247ee2c44e2..6424c629f81282b092503f014283e4e7d8c59234 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Nach unten bewegen"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Nach links bewegen"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Nach rechts bewegen"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Breite der Lupe erhöhen"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Breite der Lupe verringern"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Höhe der Lupe erhöhen"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Höhe der Lupe verringern"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Vergrößerungsschalter"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ganzen Bildschirm vergrößern"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Teil des Bildschirms vergrößern"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index b279abfa0423b220772d8bd2cb9a6ed8c4d8a290..029c7249e14789fdbcea987caab6ac3d83c673c2 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -33,14 +33,14 @@ <string name="battery_saver_dismiss_action" msgid="7199342621040014738">"Όχι, ευχαÏιστώ"</string> <string name="status_bar_settings_auto_rotation" msgid="8329080442278431708">"Αυτόματη πεÏιστÏοφή οθόνης"</string> <string name="usb_device_permission_prompt" msgid="4414719028369181772">"Îα επιτÏÎπεται η Ï€Ïόσβαση της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> στη συσκευή <xliff:g id="USB_DEVICE">%2$s</xliff:g>;"</string> - <string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"Îα επιτÏÎπεται στο <xliff:g id="APPLICATION">%1$s</xliff:g> να Îχει Ï€Ïόσβαση στη συσκευή <xliff:g id="USB_DEVICE">%2$s</xliff:g>;\nΔεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτήν την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> + <string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"Îα επιτÏÎπεται στο <xliff:g id="APPLICATION">%1$s</xliff:g> να Îχει Ï€Ïόσβαση στη συσκευή <xliff:g id="USB_DEVICE">%2$s</xliff:g>;\nΔεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτή την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> <string name="usb_audio_device_permission_prompt_title" msgid="4221351137250093451">"Îα επιτÏÎπεται στο <xliff:g id="APPLICATION">%1$s</xliff:g> η Ï€Ïόσβαση στη συσκευή <xliff:g id="USB_DEVICE">%2$s</xliff:g>;"</string> <string name="usb_audio_device_confirm_prompt_title" msgid="8828406516732985696">"Άνοιγμα <xliff:g id="APPLICATION">%1$s</xliff:g> για διαχείÏιση συσκευής <xliff:g id="USB_DEVICE">%2$s</xliff:g>;"</string> - <string name="usb_audio_device_prompt_warn" msgid="2504972133361130335">"Δεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτήν την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο. Η χÏήση της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> με αυτήν τη συσκευή μποÏεί να σας εμποδίσει να ακοÏσετε κλήσεις, ειδοποιήσεις και ξυπνητήÏια."</string> + <string name="usb_audio_device_prompt_warn" msgid="2504972133361130335">"Δεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτή την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο. Η χÏήση της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> με αυτήν τη συσκευή μποÏεί να σας εμποδίσει να ακοÏσετε κλήσεις, ειδοποιήσεις και ξυπνητήÏια."</string> <string name="usb_audio_device_prompt" msgid="7944987408206252949">"Η χÏήση της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> με αυτήν τη συσκευή μποÏεί να σας εμποδίσει να ακοÏσετε κλήσεις, ειδοποιήσεις και ξυπνητήÏια."</string> <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"Îα επιτÏÎπεται η Ï€Ïόσβαση της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> στο Î±Î¾ÎµÏƒÎ¿Ï…Î¬Ï <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>;"</string> <string name="usb_device_confirm_prompt" msgid="4091711472439910809">"Îα ανοίγει η εφαÏμογή <xliff:g id="APPLICATION">%1$s</xliff:g> για τη διαχείÏιση της συσκευής <xliff:g id="USB_DEVICE">%2$s</xliff:g>;"</string> - <string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"Άνοιγμα της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> για τον χειÏισμό της συσκευής <xliff:g id="USB_DEVICE">%2$s</xliff:g>;\nΔεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτήν την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> + <string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"Άνοιγμα της εφαÏμογής <xliff:g id="APPLICATION">%1$s</xliff:g> για τον χειÏισμό της συσκευής <xliff:g id="USB_DEVICE">%2$s</xliff:g>;\nΔεν Îχει εκχωÏηθεί άδεια εγγÏαφής σε αυτή την εφαÏμογή, αλλά μÎσω αυτής της συσκευής USB θα μποÏεί να εγγÏάφει ήχο."</string> <string name="usb_accessory_confirm_prompt" msgid="5728408382798643421">"Îα ανοίγει η εφαÏμογή <xliff:g id="APPLICATION">%1$s</xliff:g> για τη διαχείÏιση του Î±Î¾ÎµÏƒÎ¿Ï…Î¬Ï <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>;"</string> <string name="usb_accessory_uri_prompt" msgid="6756649383432542382">"Δεν Îχετε εφαÏμογή που να συνεÏγάζεται με το Î±Î¾ÎµÏƒÎ¿Ï…Î¬Ï USB. Για πεÏισσότεÏα: <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="1236358027511638648">"Î‘Î¾ÎµÏƒÎ¿Ï…Î¬Ï USB"</string> @@ -413,7 +413,7 @@ <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Όταν κάνετε κοινή χÏήση, εγγÏαφή ή μετάδοση, η εφαÏμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Îχει Ï€Ïόσβαση σε οτιδήποτε είναι οÏατό στην οθόνη σας ή αναπαÏάγεται στη συσκευή σας. ΕπομÎνως, να είστε Ï€Ïοσεκτικοί με τους κωδικοÏÏ‚ Ï€Ïόσβασης, τα στοιχεία πληÏωμής, τα μηνÏματα, τις φωτογÏαφίες, τον ήχο και το βίντεο."</string> <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Όταν κάνετε κοινή χÏήση, εγγÏαφή ή μετάδοση μιας εφαÏμογής, η εφαÏμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Îχει Ï€Ïόσβαση σε οτιδήποτε είναι οÏατό ή αναπαÏάγεται στη συγκεκÏιμÎνη εφαÏμογή. ΕπομÎνως, να είστε Ï€Ïοσεκτικοί με τους κωδικοÏÏ‚ Ï€Ïόσβασης, τα στοιχεία πληÏωμής, τα μηνÏματα, τις φωτογÏαφίες, τον ήχο και το βίντεο."</string> <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ΈναÏξη"</string> - <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Η εφαÏμογή <xliff:g id="APP_NAME">%1$s</xliff:g> απενεÏγοποίησε αυτήν την επιλογή"</string> + <string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Η εφαÏμογή <xliff:g id="APP_NAME">%1$s</xliff:g> απενεÏγοποίησε αυτή την επιλογή"</string> <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ΈναÏξη μετάδοσης;"</string> <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Όταν κάνετε μετάδοση, το Android Îχει Ï€Ïόσβαση σε οτιδήποτε είναι οÏατό στην οθόνη σας ή αναπαÏάγεται στη συσκευή σας. ΕπομÎνως, να είστε Ï€Ïοσεκτικοί με τους κωδικοÏÏ‚ Ï€Ïόσβασης, τα στοιχεία πληÏωμής, τα μηνÏματα, τις φωτογÏαφίες, τον ήχο και το βίντεο."</string> <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Όταν κάνετε μετάδοση μιας εφαÏμογής, το Android Îχει Ï€Ïόσβαση σε οτιδήποτε είναι οÏατό ή αναπαÏάγεται στη συγκεκÏιμÎνη εφαÏμογή. ΕπομÎνως, να είστε Ï€Ïοσεκτικοί με τους κωδικοÏÏ‚ Ï€Ïόσβασης, τα στοιχεία πληÏωμής, τα μηνÏματα, τις φωτογÏαφίες, τον ήχο και το βίντεο."</string> @@ -495,7 +495,7 @@ <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ρυθμίσεις"</string> <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Η Îνταση ήχου μειώθηκε σε πιο ασφαλÎÏ‚ επίπεδο"</string> <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Η Îνταση ήχου των ακουστικών ήταν σε υψηλό επίπεδο για μεγαλÏτεÏο διάστημα από αυτό που συνιστάται"</string> - <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Η Îνταση ήχου των ακουστικών ξεπÎÏασε το ασφαλÎÏ‚ ÏŒÏιο για αυτήν την εβδομάδα"</string> + <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Η Îνταση ήχου των ακουστικών ξεπÎÏασε το ασφαλÎÏ‚ ÏŒÏιο για αυτή την εβδομάδα"</string> <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ΣυνÎχιση ακÏόασης"</string> <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Μείωση Îντασης ήχου"</string> <string name="screen_pinning_title" msgid="9058007390337841305">"Η εφαÏμογή είναι καÏφιτσωμÎνη."</string> @@ -506,8 +506,8 @@ <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"Με αυτόν τον Ï„Ïόπο, παÏαμÎνει σε Ï€Ïοβολή μÎχÏι να το ξεκαÏφιτσώσετε. Αγγίξτε παÏατεταμÎνα το στοιχείο \"ΑÏχική οθόνη\" για ξεκαÏφίτσωμα."</string> <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"Τα Ï€Ïοσωπικά δεδομÎνα ενδÎχεται να είναι Ï€Ïοσβάσιμα (όπως επαφÎÏ‚ και πεÏιεχόμενο μηνυμάτων ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου)."</string> <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"Η καÏφιτσωμÎνη εφαÏμογή μποÏεί να ανοίξει άλλες εφαÏμογÎÏ‚."</string> - <string name="screen_pinning_toast" msgid="8177286912533744328">"Για να ξεκαÏφιτσώσετε αυτήν την εφαÏμογή, αγγίξτε παÏατεταμÎνα τα κουμπιά Πίσω και Επισκόπηση."</string> - <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"Για να ξεκαÏφιτσώσετε αυτήν την εφαÏμογή, αγγίξτε παÏατεταμÎνα τα κουμπιά Πίσω και ΑÏχική οθόνη."</string> + <string name="screen_pinning_toast" msgid="8177286912533744328">"Για να ξεκαÏφιτσώσετε αυτή την εφαÏμογή, αγγίξτε παÏατεταμÎνα τα κουμπιά Πίσω και Επισκόπηση."</string> + <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"Για να ξεκαÏφιτσώσετε αυτή την εφαÏμογή, αγγίξτε παÏατεταμÎνα τα κουμπιά Πίσω και ΑÏχική οθόνη."</string> <string name="screen_pinning_toast_gesture_nav" msgid="170699893395336705">"Για να ξεκαÏφ. την εφαÏμογή, σÏÏετε Ï€Ïος τα πάνω και κÏατήστε"</string> <string name="screen_pinning_positive" msgid="3285785989665266984">"Το κατάλαβα"</string> <string name="screen_pinning_negative" msgid="6882816864569211666">"Όχι"</string> @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Μετακίνηση κάτω"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Μετακίνηση αÏιστεÏά"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Μετακίνηση δεξιά"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ΑÏξηση πλάτους Î¼ÎµÎ³ÎµÎ¸Ï…Î½Ï„Î¹ÎºÎ¿Ï Ï†Î±ÎºÎ¿Ï"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Μείωση πλάτους Î¼ÎµÎ³ÎµÎ¸Ï…Î½Ï„Î¹ÎºÎ¿Ï Ï†Î±ÎºÎ¿Ï"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ΑÏξηση Ïψους Î¼ÎµÎ³ÎµÎ¸Ï…Î½Ï„Î¹ÎºÎ¿Ï Ï†Î±ÎºÎ¿Ï"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Μείωση Ïψους Î¼ÎµÎ³ÎµÎ¸Ï…Î½Ï„Î¹ÎºÎ¿Ï Ï†Î±ÎºÎ¿Ï"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Εναλλαγή μεγιστοποίησης"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ΜεγÎθυνση πλήÏους οθόνης"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ΜεγÎθυνση μÎÏους της οθόνης"</string> @@ -1140,7 +1136,7 @@ <string name="log_access_confirmation_title" msgid="4843557604739943395">"Îα επιτÏÎπεται στο <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> η Ï€Ïόσβαση σε όλα τα αÏχεία καταγÏαφής συσκευής;"</string> <string name="log_access_confirmation_allow" msgid="752147861593202968">"Îα επιτÏÎπεται η Ï€Ïόσβαση για μία φοÏά"</string> <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Îα μην επιτÏÎπεται"</string> - <string name="log_access_confirmation_body" msgid="6883031912003112634">"Τα αÏχεία καταγÏαφής συσκευής καταγÏάφουν ÏŒ,τι συμβαίνει στη συσκευή σας. Οι εφαÏμογÎÏ‚ μποÏοÏν να χÏησιμοποιοÏν αυτά τα αÏχεία καταγÏαφής για να εντοπίζουν και να διοÏθώνουν ζητήματα.\n\nΟÏισμÎνα αÏχεία καταγÏαφής ενδÎχεται να πεÏιÎχουν ευαίσθητες πληÏοφοÏίες. Ως εκ τοÏτου, επιτÏÎψτε την Ï€Ïόσβαση σε όλα τα αÏχεία καταγÏαφής συσκευής μόνο στις εφαÏμογÎÏ‚ που εμπιστεÏεστε. \n\nΕάν δεν επιτÏÎψετε σε αυτήν την εφαÏμογή την Ï€Ïόσβαση σε όλα τα αÏχεία καταγÏαφής συσκευής, η εφαÏμογή εξακολουθεί να Îχει Ï€Ïόσβαση στα δικά της αÏχεία καταγÏαφής. Ο κατασκευαστής της συσκευής σας ενδÎχεται να εξακολουθεί να Îχει Ï€Ïόσβαση σε οÏισμÎνα αÏχεία καταγÏαφής ή οÏισμÎνες πληÏοφοÏίες στη συσκευή σας."</string> + <string name="log_access_confirmation_body" msgid="6883031912003112634">"Τα αÏχεία καταγÏαφής συσκευής καταγÏάφουν ÏŒ,τι συμβαίνει στη συσκευή σας. Οι εφαÏμογÎÏ‚ μποÏοÏν να χÏησιμοποιοÏν αυτά τα αÏχεία καταγÏαφής για να εντοπίζουν και να διοÏθώνουν ζητήματα.\n\nΟÏισμÎνα αÏχεία καταγÏαφής ενδÎχεται να πεÏιÎχουν ευαίσθητες πληÏοφοÏίες. Ως εκ τοÏτου, επιτÏÎψτε την Ï€Ïόσβαση σε όλα τα αÏχεία καταγÏαφής συσκευής μόνο στις εφαÏμογÎÏ‚ που εμπιστεÏεστε. \n\nΕάν δεν επιτÏÎψετε σε αυτή την εφαÏμογή την Ï€Ïόσβαση σε όλα τα αÏχεία καταγÏαφής συσκευής, η εφαÏμογή εξακολουθεί να Îχει Ï€Ïόσβαση στα δικά της αÏχεία καταγÏαφής. Ο κατασκευαστής της συσκευής σας ενδÎχεται να εξακολουθεί να Îχει Ï€Ïόσβαση σε οÏισμÎνα αÏχεία καταγÏαφής ή οÏισμÎνες πληÏοφοÏίες στη συσκευή σας."</string> <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Μάθετε πεÏισσότεÏα"</string> <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Μάθετε πεÏισσότεÏα στο <xliff:g id="URL">%s</xliff:g>."</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Άνοιγμα <xliff:g id="APPNAME">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index e036eb7393584e393d5118902980f31583317f3e..4ae6ea4891dcbdbbaecb6500951292f72c749cff 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Move down"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Move left"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Move right"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Increase width of magnifier"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Decrease width of magnifier"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Increase height of magnifier"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Decrease height of magnifier"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Magnification switch"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index e036eb7393584e393d5118902980f31583317f3e..4ae6ea4891dcbdbbaecb6500951292f72c749cff 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Move down"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Move left"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Move right"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Increase width of magnifier"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Decrease width of magnifier"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Increase height of magnifier"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Decrease height of magnifier"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Magnification switch"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index e036eb7393584e393d5118902980f31583317f3e..4ae6ea4891dcbdbbaecb6500951292f72c749cff 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Move down"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Move left"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Move right"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Increase width of magnifier"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Decrease width of magnifier"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Increase height of magnifier"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Decrease height of magnifier"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Magnification switch"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 15b3001bee25c49a982189cc3785744ae8c59a39..4cbe6a778654a7348879f743d77b05289189eeb5 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover hacia abajo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover hacia la izquierda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover hacia la derecha"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar el ancho de la lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Reducir el ancho de la lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar la altura de la lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Reducir la altura de la lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Interruptor de ampliación"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte de la pantalla"</string> @@ -913,7 +909,7 @@ <string name="controls_providers_title" msgid="6879775889857085056">"Elige la app para agregar los controles"</string> <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Se agregó # control.}many{Se agregaron # controles.}other{Se agregaron # controles.}}"</string> <string name="controls_removed" msgid="3731789252222856959">"Quitados"</string> - <string name="controls_panel_authorization_title" msgid="267429338785864842">"¿Quieres agregar <xliff:g id="APPNAME">%s</xliff:g>?"</string> + <string name="controls_panel_authorization_title" msgid="267429338785864842">"¿Quieres agregar a <xliff:g id="APPNAME">%s</xliff:g>?"</string> <string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> puede elegir qué controles y contenido mostrar aquÃ."</string> <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"¿Quieres quitar los controles para <xliff:g id="APPNAME">%s</xliff:g>?"</string> <string name="accessibility_control_favorite" msgid="8694362691985545985">"Está en favoritos"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index fa435363b02f6e90ccc86b391462cb88bcacd135..73af8681502c2561f8b2cb6da944a90bb2d12c8e 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover hacia abajo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover hacia la izquierda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover hacia la derecha"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar la anchura de la lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Disminuir la anchura de la lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar la altura de la lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Disminuir la altura de la lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Botón para cambiar el modo de ampliación"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte de la pantalla"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index ad80a590f06e3be239632cd3b41cf9193e145a63..d2b636c96be0bfe93c2d144012a81274ac2be56d 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Teisalda alla"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Teisalda vasakule"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Teisalda paremale"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Luubi laiuse suurendamine"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Luubi laiuse vähendamine"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Luubi kõrguse suurendamine"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Luubi kõrguse vähendamine"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Suurenduse lüliti"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Täisekraani suurendamine"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekraanikuva osa suurendamine"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index b417c10c40631c638ebf0fae5f168f5db2d898bc..37ced048e31ec5fcc70e171f84228ddde16568c7 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Eraman behera"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Eraman ezkerrera"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Eraman eskuinera"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Handitu luparen zabalera"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Murriztu luparen zabalera"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Handitu luparen altuera"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Murriztu luparen altuera"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Lupa aplikatzeko botoia"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Handitu pantaila osoa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Handitu pantailaren zati bat"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 1135816ff4947696e60a753b56c1141457338e18..7f419c117c4611c76abef20b218034c5beac6e42 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"انتقال به پایین"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"انتقال به راست"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"انتقال به Ú†Ù¾"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Ø§ÙØ²Ø§ÛŒØ´ پهنای ذره‌بین"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"کاهش پهنای ذره‌بین"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Ø§ÙØ²Ø§ÛŒØ´ Ø§Ø±ØªÙØ§Ø¹ ذره‌بین"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"کاهش Ø§Ø±ØªÙØ§Ø¹ ذره‌بین"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"کلید درشت‌نمایی"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"درشت‌نمایی ØªÙ…Ø§Ù…â€ŒØµÙØÙ‡"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"درشت‌نمایی بخشی از ØµÙØÙ‡"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index eef5a47e0fe43508282619377842ed626916969b..0ecfe762b0354f6c5872055941df1fa28d366c1a 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Siirrä alas"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Siirrä vasemmalle"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Siirrä oikealle"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Kasvata suurennuslasin leveyttä"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Vähennä suurennuslasin leveyttä"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Kasvata suurennuslasin korkeutta"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Vähennä suurennuslasin korkeutta"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Suurennusvalinta"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Koko näytön suurennus"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Suurenna osa näytöstä"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index f4f41055b9bde34f667e9575d5a54938858a7d50..e305cc4208274fb385e4604bfa4724ee1da1fc17 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Déplacer vers le bas"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Déplacer vers la gauche"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Déplacer vers la droite"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Augmenter la largeur de la loupe"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Diminuer la largeur de la loupe"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Augmenter la hauteur de la loupe"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Diminuer la hauteur de la loupe"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Commutateur d\'agrandissement"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Agrandir la totalité de l\'écran"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Agrandir une partie de l\'écran"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 81a8363dba605eb948bf0ba220cafecf6fdbbb8a..75662f6d100a7b5e1a2dedc7bc7eb61ef82a22a1 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Déplacer vers le bas"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Déplacer vers la gauche"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Déplacer vers la droite"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Augmenter la largeur de la loupe"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Diminuer la largeur de la loupe"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Augmenter la hauteur de la loupe"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Diminuer la hauteur de la loupe"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Changer de mode d\'agrandissement"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Agrandir tout l\'écran"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Agrandir une partie de l\'écran"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 509de37e262beda483ead38fa596697714e4672a..57d27ee4c287995571cc4c6dd93f5932f816abd3 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover cara abaixo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover cara á esquerda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover cara á dereita"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar a largura da lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Reducir a largura da lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar a altura da lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Reducir a altura da lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Interruptor do modo de ampliación"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"AmplÃa parte da pantalla"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 55fa871a75c3ae0f002d60c31e06be0dca67f588..7b42c4f9b27995bd9cd5a3daec7b385b6e7af17d 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"નીચે ખસેડો"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ડાબી બાજૠખસેડો"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"જમણી બાજૠખસેડો"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"મેગà«àª¨àª¿àª«àª¾àª¯àª°àª¨à«€ પહોળાઈ વધારો"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"મેગà«àª¨àª¿àª«àª¾àª¯àª°àª¨à«€ પહોળાઈ ઘટાડો"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"મેગà«àª¨àª¿àª«àª¾àª¯àª°àª¨à«€ ઊંચાઈ વધારો"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"મેગà«àª¨àª¿àª«àª¾àª¯àª°àª¨à«€ ઊંચાઈ ઘટાડો"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"મોટà«àª‚ કરવાની સà«àªµàª¿àª§àª¾àªµàª¾àª³à«€ સà«àªµàª¿àªš"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"પૂરà«àª£ સà«àª•à«àª°à«€àª¨àª¨à«‡ મોટી કરો"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"સà«àª•à«àª°à«€àª¨àª¨à«‹ કોઈ àªàª¾àª— મોટો કરો"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 173c6073d9ae7d11c28ca06ce208f0ebd27cfc0b..6cc896f265a5de3f57a8116ec0a6da4e44812112 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -428,7 +428,7 @@ <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"à¤à¤ªà¥à¤²à¤¿à¤•ेशन सà¥à¤µà¤¿à¤š करें"</string> <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"आपके आईटी à¤à¤¡à¤®à¤¿à¤¨ ने सà¥à¤•à¥à¤°à¥€à¤¨ कैपà¥à¤šà¤° करने की सà¥à¤µà¤¿à¤§à¤¾ पर रोक लगाई है"</string> <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"डिवाइस से जà¥à¤¡à¤¼à¥€ नीति के तहत सà¥à¤•à¥à¤°à¥€à¤¨ कैपà¥à¤šà¤° करने की सà¥à¤µà¤¿à¤§à¤¾ बंद है"</string> - <string name="clear_all_notifications_text" msgid="348312370303046130">"सà¤à¥€ को हटाà¤à¤‚"</string> + <string name="clear_all_notifications_text" msgid="348312370303046130">"सà¤à¥€ हटाà¤à¤‚"</string> <string name="manage_notifications_text" msgid="6885645344647733116">"मैनेज करें"</string> <string name="manage_notifications_history_text" msgid="57055985396576230">"इतिहास"</string> <string name="notification_section_header_incoming" msgid="850925217908095197">"नई सूचनाà¤à¤‚"</string> @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"नीचे ले जाà¤à¤‚"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"बाईं ओर ले जाà¤à¤‚"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"दाईं ओर ले जाà¤à¤‚"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"कॉनà¥à¤Ÿà¥‡à¤‚ट को बड़ा करके दिखाने वाली विंडो की चौड़ाई को ज़à¥à¤¯à¤¾à¤¦à¤¾ करें"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"कॉनà¥à¤Ÿà¥‡à¤‚ट को बड़ा करके दिखाने वाली विंडो की चौड़ाई को कम करें"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"कॉनà¥à¤Ÿà¥‡à¤‚ट को बड़ा करके दिखाने वाली विंडो की लंबाई को ज़à¥à¤¯à¤¾à¤¦à¤¾ करें"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"कॉनà¥à¤Ÿà¥‡à¤‚ट को बड़ा करके दिखाने वाली विंडो की लंबाई को कम करें"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"ज़ूम करने की सà¥à¤µà¤¿à¤§à¤¾ वाला सà¥à¤µà¤¿à¤š"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"फ़à¥à¤² सà¥à¤•à¥à¤°à¥€à¤¨ को ज़ूम करें"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"सà¥à¤•à¥à¤°à¥€à¤¨ के किसी हिसà¥à¤¸à¥‡ को ज़ूम करें"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 42acd4855e76f7b9ec9ae17a3394a208482bb304..1dde67849b84a6327be1c535a446a953151c06ad 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Premjesti dolje"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Premjesti ulijevo"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Premjesti udesno"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Povećaj Å¡irinu povećala"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Smanji Å¡irinu povećala"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Povećaj visinu povećala"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Smanji visinu povećala"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Prebacivanje povećavanja"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Povećajte cijeli zaslon"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Povećaj dio zaslona"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index e27733f02c29fbc65b8c99e233f3ec9da7794f46..15c61a853941c73f862446bd552865cab983a300 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mozgatás lefelé"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mozgatás balra"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mozgatás jobbra"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"NagyÃtó szélességének növelése"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"NagyÃtó szélességének csökkentése"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"NagyÃtó magasságának növelése"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"NagyÃtó magasságának csökkentése"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"NagyÃtásváltó"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"A teljes képernyÅ‘ felnagyÃtása"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"KépernyÅ‘ bizonyos részének nagyÃtása"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index d2a5d751b5ab82ed4220b0f413ebcd0e46ef95fb..c9242b8c8d294fe1b7faa7e13fe5420338a4fffb 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ¶Õ¥Ö€Ö„Ö‡"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ±Õ¡Õ"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ÕÕ¥Õ²Õ¡ÖƒÕ¸ÕÕ¥Õ¬ Õ¡Õ»"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ ÕÕ¸Õ·Õ¸Ö€Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ¬Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ÕŠÕ¡Õ¯Õ¡Õ½Õ¥ÖÕ¶Õ¥Õ¬ ÕÕ¸Õ·Õ¸Ö€Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ¬Õ¡ÕµÕ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Ô±Õ¾Õ¥Õ¬Õ¡ÖÕ¶Õ¥Õ¬ ÕÕ¸Õ·Õ¸Ö€Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ¢Õ¡Ö€Õ±Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ÕŠÕ¡Õ¯Õ¡Õ½Õ¥ÖÕ¶Õ¥Õ¬ ÕÕ¸Õ·Õ¸Ö€Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ¢Õ¡Ö€Õ±Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ´Õ¡Õ¶ ÖƒÕ¸ÖƒÕ¸ÕÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬ Õ¡Õ´Õ¢Õ¸Õ²Õ» Õ§Õ¯Ö€Õ¡Õ¶Õ¨"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬ Õ§Õ¯Ö€Õ¡Õ¶Õ« Õ¸Ö€Õ¸Õ·Õ¡Õ¯Õ« Õ°Õ¡Õ¿Õ¾Õ¡Õ®Õ¨"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index f908c33533a97d1fb95e0130f7bd036a8d9d38be..bdcb702ee2d03fafa5955de5fdef2e416116f008 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Pindahkan ke bawah"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Pindahkan ke kiri"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Pindahkan ke kanan"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Tambahi lebar jendela pembesaran"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Kurangi lebar jendela pembesaran"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Tambah tinggi jendela pembesaran"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Kurangi tinggi jendela pembesaran"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Tombol pembesaran"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Memperbesar tampilan layar penuh"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Perbesar sebagian layar"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 1fb1304daf7f05c03a5906e090ef46ff7bcdbb81..e6122ccbf37abdc5f87493b36412881e34b6094b 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Færa niður"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Færa til vinstri"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Færa til hægri"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Breikka stækkunarglugga"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Þrengja stækkunarglugga"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Hækka stækkunarglugga"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Lækka stækkunarglugga"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Stækkunarrofi"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Stækka allan skjáinn"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Stækka hluta skjásins"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index bab86e37654dfba45b858812a4c715c295484a6e..e4e591e4ab81a2ee8f6932c964279e985cd93261 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Sposta giù"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Sposta a sinistra"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Sposta a destra"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumenta la larghezza della finestra ingrandimento"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Riduci la larghezza della finestra ingrandimento"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumenta l\'altezza della finestra ingrandimento"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Riduci l\'altezza della finestra ingrandimento"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Opzione Ingrandimento"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ingrandisci l\'intero schermo"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ingrandisci parte dello schermo"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 294f77f78e73c6e81cd8611578b7d16d1892a092..2e5d27e4dc68e2c44bc222be5b8e884b86392cd5 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"×”×–×–×” למטה"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"×”×–×–×” שמ×לה"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"×”×–×–×” ×™×ž×™× ×”"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"הגדלת רוחב זכוכית המגדלת"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"×”×§×˜× ×ª רוחב זכוכית המגדלת"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"הגדלת גובה זכוכית המגדלת"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"×”×§×˜× ×ª גובה זכוכית המגדלת"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"מעבר למצב הגדלה"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"הגדלה של המסך המל×"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"הגדלת חלק מהמסך"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 9daaabcf7352d7e0ed1c1f58093f4610c064cd75..888a0468445397de2f9c1c7bcc42260df412fc19 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"下ã«ç§»å‹•"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"å·¦ã«ç§»å‹•"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"å³ã«ç§»å‹•"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"拡大é¡ã®å¹…を広ãã™ã‚‹"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"拡大é¡ã®å¹…ã‚’ç‹ãã™ã‚‹"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"拡大é¡ã®é«˜ã•を高ãã™ã‚‹"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"拡大é¡ã®é«˜ã•を低ãã™ã‚‹"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"拡大スイッãƒ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ç”»é¢å…¨ä½“を拡大ã—ã¾ã™"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ç”»é¢ã®ä¸€éƒ¨ã‚’拡大ã—ã¾ã™"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 4d3f4c739fe1b76b626e3c163a0b036688179b0b..ca847593c64206811b5d9efd9122d035cb2a0ff0 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ქვემáƒáƒ— გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"მáƒáƒ ცხნივ გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"მáƒáƒ ჯვნივ გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"გáƒáƒ›áƒáƒ“იდებლის სიგáƒáƒœáƒ˜áƒ¡ გáƒáƒ–რდáƒ"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"გáƒáƒ›áƒáƒ“იდებლის სიგáƒáƒœáƒ˜áƒ¡ შემცირებáƒ"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"გáƒáƒ›áƒáƒ“იდებლის სიმáƒáƒ¦áƒšáƒ˜áƒ¡ გáƒáƒ–რდáƒ"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"გáƒáƒ›áƒáƒ“იდებლის სიმáƒáƒ¦áƒšáƒ˜áƒ¡ შემცირებáƒ"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"გáƒáƒ“იდების გáƒáƒ“áƒáƒ თვáƒ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"გáƒáƒáƒ“იდეთ სრულ ეკრáƒáƒœáƒ–ე"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ეკრáƒáƒœáƒ˜áƒ¡ ნáƒáƒ¬áƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ“იდებáƒ"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 0e54c222f332d9c4fc113b0812f13a822dc4998c..6ee4b604ac26d2f83ed00d42eefa501cca7f296b 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Төмен қарай жылжыту"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Солға жылжыту"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Оңға жылжыту"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Ұлғайтқыштың енін арттыру"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Ұлғайтқыштың енін азайту"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Ұлғайтқыштың биіктігін арттыру"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Ұлғайтқыштың биіктігін азайту"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Ұлғайту режиміне ауыÑтырғыш"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Толық Ñкранды ұлғайту"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ðкранның бөлігін ұлғайту"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 564af36ec4e229b7fd39a938da3e4e9f6a89a57d..6fae9476e7c8e5f613ee826f4c74849c8f8c826f 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ផ្លាស់ទី​ចុះ​ក្រោម"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ផ្លាស់ទី​ទៅ​ឆ្វáŸáž„"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ផ្លាស់ទីទៅ​ស្ážáž¶áŸ†"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"បង្កើនទទឹងនៃកែវពង្រីក"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"បន្ážáž™áž‘ទឹងនៃកែវពង្រីក"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"បង្កើនកម្ពស់នៃកែវពង្រីក"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"បន្ážáž™áž€áž˜áŸ’ពស់នៃកែវពង្រីក"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"ប៊ូážáž»áž„បិទបើកការ​ពង្រីក"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ពង្រីក​ពáŸáž‰áž¢áŸáž€áŸ’រង់"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ពង្រីក​ផ្នែកនៃ​អáŸáž€áŸ’រង់"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 65162130470b0f47b7ffc5546b48004e034264c8..4e8c72834746cc72b541689b7e952388b563fa3b 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ಕೆಳಗೆ ಸರಿಸಿ"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ಎಡಕà³à²•ೆ ಸರಿಸಿ"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ಬಲಕà³à²•ೆ ಸರಿಸಿ"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ಮà³à²¯à²¾à²—à³à²¨à²¿à²«à³ˆà²¯à²°à³ ಅಗಲವನà³à²¨à³ ಹೆಚà³à²šà²¿à²¸à²¿"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ಮà³à²¯à²¾à²—à³à²¨à²¿à²«à³ˆà²¯à²°à³ ಅಗಲವನà³à²¨à³ ಕಡಿಮೆ ಮಾಡಿ"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ಮà³à²¯à²¾à²—à³à²¨à²¿à²«à³ˆà²¯à²°à³ ಎತà³à²¤à²°à²µà²¨à³à²¨à³ ಹೆಚà³à²šà²¿à²¸à²¿"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ಮà³à²¯à²¾à²—à³à²¨à²¿à²«à³ˆà²¯à²°à³ ಎತà³à²¤à²°à²µà²¨à³à²¨à³ ಕಡಿಮೆ ಮಾಡಿ"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"à²à³‚ಮೠಮಾಡà³à²µ ಸà³à²µà²¿à²šà³"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ಪೂರà³à²£ ಸà³à²•à³à²°à³€à²¨à³â€Œ ಅನà³à²¨à³ ಹಿಗà³à²—ಿಸಿ"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ಸà³à²•à³à²°à³€à²¨à³â€Œà²¨ ಅರà³à²§à²à²¾à²—ವನà³à²¨à³ à²à³‚ಮೠಮಾಡಿ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 62d6bd61216c44ce21f66634158028e94e66b7a0..9bf691f3e65929b4eb2a4dddae5471a71a5590be 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"아래로 ì´ë™"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"왼쪽으로 ì´ë™"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"오른쪽으로 ì´ë™"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"확대창 너비 늘리기"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"확대창 너비 줄ì´ê¸°"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"확대창 ë†’ì´ ëŠ˜ë¦¬ê¸°"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"확대창 ë†’ì´ ì¤„ì´ê¸°"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"확대 ì „í™˜"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ì „ì²´ 화면 확대"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"화면 ì¼ë¶€ 확대"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 2eddca253a252a0db66d3b5aa051435a2f132107..de96264db4bf431d4094fd1e68854adfcd6142b0 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Төмөн жылдыруу"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Солго жылдыруу"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Оңго жылдыруу"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Чоңойткучтун туураÑын көбөйтүү"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Чоңойткучтун туураÑын азайтуу"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Чоңойткучтун бийиктигин көбөйтүү"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Чоңойткучтун бийиктигин азайтуу"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Чоңойтуу режимине которулуу"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Толук Ñкранда ачуу"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ðкрандын бир бөлүгүн чоңойтуу"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 3f3cc27b4a3291c697e00111b8961d9137d03cbd..29dc4a9e8047360b4078019b5ef55c50eaef3f1d 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"àºà»‰àº²àºàº¥àº»àº‡"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"àºà»‰àº²àºà»„ປຊ້າàº"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"àºà»‰àº²àºà»„ປຂວາ"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ເພີ່ມຄວາມàºàº§à»‰àº²àº‡àº‚àºàº‡à»àº§à»ˆàº™àº‚ະຫàºàº²àº"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ຫຼຸດຄວາມàºàº§à»‰àº²àº‡àº‚àºàº‡à»àº§à»ˆàº™àº‚ະຫàºàº²àº"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ເພີ່ມຄວາມສູງຂàºàº‡à»àº§à»ˆàº™àº‚ະຫàºàº²àº"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ຫຼຸດຄວາມສູງຂàºàº‡à»àº§à»ˆàº™àº‚ະຫàºàº²àº"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"ສະຫຼັບàºàº²àº™àº‚ະຫàºàº²àº"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ຂະຫàºàº²àºà»€àº•ັມຈà»"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ຂະຫàºàº²àºàºšàº²àº‡àºªà»ˆàº§àº™àº‚àºàº‡à»œà»‰àº²àºˆà»"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 808c732c49c854698e89bd419da2496db5b5b7fc..bf647e61a63970caa3437b1ad5f6ede8368436ef 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Perkelti žemyn"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Perkelti kairÄ—n"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Perkelti deÅ¡inÄ—n"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Padidinti didintuvo plotį"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Sumažinti didintuvo plotį"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Padidinti didintuvo aukÅ¡tį"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Sumažinti didintuvo aukÅ¡tį"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Didinimo jungiklis"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Viso ekrano didinimas"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Didinti ekrano dalį"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 52ccc16e0ac781c181ead9da94a73d6653f4a807..45d4ca2e63186ff752d7ff6400ac9f49aaa2ec00 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"PÄrvietot uz leju"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"PÄrvietot pa kreisi"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"PÄrvietot pa labi"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"PalielinÄt lupas loga platumu"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"SamazinÄt lupas loga platumu"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"PalielinÄt lupas loga augstumu"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"SamazinÄt lupas loga augstumu"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"PalielinÄjuma slÄ“dzis"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"PalielinÄt visu ekrÄnu"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"PalielinÄt ekrÄna daļu"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 7d218baff3142dbd55883c480971b2317575f460..8a870b68b3965792cec61d3ca5aad5d723f05dff 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ПремеÑти надолу"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ПремеÑти налево"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ПремеÑти надеÑно"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Зголемете ја ширината на лупата"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Ðамалете ја ширината на лупата"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Зголемете ја виÑината на лупата"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Ðамалете ја виÑината на лупата"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Прекинувач за зголемување"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Зголемете го целиот екран"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Зголемувајте дел од екранот"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index b5feddbd5068c9193b6c91b1038ad7f775702605..8b8fd8ca1238f7512b58f65fa4d122b4580c95a3 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"താഴേകàµà´•ൠനീകàµà´•àµà´•"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ഇടതàµà´¤àµ‡à´•àµà´•ൠനീകàµà´•àµà´•"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"വലതàµà´¤àµ‡à´•àµà´•ൠനീകàµà´•àµà´•"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"മാഗàµà´¨à´¿à´«à´¯à´±à´¿à´¨àµà´±àµ† വീതി കൂടàµà´Ÿàµà´•"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"മാഗàµà´¨à´¿à´«à´¯à´±à´¿à´¨àµà´±àµ† വീതി à´•àµà´±à´¯àµâ€Œà´•àµà´•àµà´•"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"മാഗàµà´¨à´¿à´«à´¯à´±à´¿à´¨àµà´±àµ† ഉയരം കൂടàµà´Ÿàµà´•"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"മാഗàµà´¨à´¿à´«à´¯à´±à´¿à´¨àµà´±àµ† ഉയരം à´•àµà´±à´¯àµâ€Œà´•àµà´•àµà´•"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"മാഗàµà´¨à´¿à´«à´¿à´•àµà´•േഷൻ മോഡൠമാറàµà´•"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"à´¸àµà´•àµà´°àµ€àµ» പൂർണàµà´£à´®à´¾à´¯àµà´‚ മാഗàµà´¨à´¿à´«àµˆ ചെയàµà´¯àµà´•"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"à´¸àµâ€Œà´•àµà´°àµ€à´¨à´¿à´¨àµà´±àµ† à´à´¾à´—à´‚ മാഗàµà´¨à´¿à´«àµˆ ചെയàµà´¯àµà´•"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 4bf4f6ae644339275ec1467bcce3fcd55d13490c..3f3350ad9bbfdae67be1f5da9ce87cd32a0110aa 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Доош зөөх"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Зүүн тийш зөөх"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Баруун тийш зөөх"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Томруулагчийн өргөнийг ихÑÑгÑÑ…"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Томруулагчийн өргөнийг багаÑгах"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Томруулагчийн өндрийг ихÑÑгÑÑ…"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Томруулагчийн өндрийг багаÑгах"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Томруулах ÑÑлгÑлт"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"БүтÑн дÑлгÑцийг томруулах"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ДÑлгÑцийн нÑг Ñ…ÑÑгийг томруулах"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index eb30836b0460116076722e866bd3583db593ce0a..0fbdf47d8241d73f2a6ed410fcbe6ce7f36d7d0e 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"खाली हलवा"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"डावीकडे हलवा"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"उजवीकडे हलवा"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤šà¥à¤¯à¤¾ विंडोची रà¥à¤‚दी वाढवा"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤šà¥à¤¯à¤¾ विंडोची रà¥à¤‚दी कमी करा"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤šà¥à¤¯à¤¾ विंडोची उंची वाढवा"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤šà¥à¤¯à¤¾ विंडोची उंची कमी करा"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"मॅगà¥à¤¨à¤¿à¤«à¤¿à¤•ेशन सà¥à¤µà¤¿à¤š"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"फà¥à¤² सà¥à¤•à¥à¤°à¥€à¤¨ मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯ करा"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"सà¥à¤•à¥à¤°à¥€à¤¨à¤šà¤¾ काही à¤à¤¾à¤— मॅगà¥à¤¨à¤¿à¤«à¤¾à¤¯ करा"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index f57a66517274bc3289636a40b697db3ff15918b8..4275d110fcf6619eb426d135f1675c4395ea9066 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Alih ke bawah"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Alih ke kiri"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Alih ke kanan"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Tingkatkan lebar penggadang"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Kurangkan lebar penggadang"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Tingkatkan tinggi penggadang"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Kurangkan tinggi penggadang"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Suis pembesaran"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Besarkan skrin penuh"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Besarkan sebahagian skrin"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index bfb43ff2eae452fe623a3354e403f1073a356110..b6b0e7fc189fdd28c0bea4ec27861558cb45163e 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -668,8 +668,8 @@ <string name="group_system_go_back" msgid="8838454003680364227">"နောက်သá€á€¯á€·- ယá€á€„်အá€á€¼á€±á€¡á€”ေသá€á€¯á€· ပြန်သွားရန် (နောက်သá€á€¯á€· á€á€œá€¯á€á€º)"</string> <string name="group_system_access_home_screen" msgid="1857344316928441909">"ပင်မစာမျက်နှာ á€á€„်ကြည့်ရန်"</string> <string name="group_system_overview_open_apps" msgid="6897128761003265350">"ဖွင့်ထားသောအက်ပ်များ အနှစ်á€á€»á€¯á€•်"</string> - <string name="group_system_cycle_forward" msgid="9202444850838205990">"လá€á€ºá€á€œá€±á€¬á€¡á€€á€ºá€•်များ ရှာဖွေကြည့်ရှုရန် (ရှေ့သá€á€¯á€·)"</string> - <string name="group_system_cycle_back" msgid="5163464503638229131">"လá€á€ºá€á€œá€±á€¬á€¡á€€á€ºá€•်များ ရှာဖွေကြည့်ရှုရန် (နောက်သá€á€¯á€·)"</string> + <string name="group_system_cycle_forward" msgid="9202444850838205990">"မကြာသေးမီကအက်ပ်များ ရှာဖွေကြည့်ရှုရန် (ရှေ့သá€á€¯á€·)"</string> + <string name="group_system_cycle_back" msgid="5163464503638229131">"မကြာသေးမီကအက်ပ်များ ရှာဖွေကြည့်ရှုရန် (နောက်သá€á€¯á€·)"</string> <string name="group_system_access_all_apps_search" msgid="488070738028991753">"အက်ပ်အားလုံးစာရင်းကá€á€¯ á€á€„်ကြည့်ပြီး ရှာပါ (ဥပမာ- Search/Launcher)"</string> <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"လုပ်ဆောင်စရာဘားကá€á€¯ ဖျောက်ထားပြီး ပြန်ပြရန်"</string> <string name="group_system_access_system_settings" msgid="7961639365383008053">"စက်စနစ်ဆက်á€á€„်များ á€á€„်ကြည့်ရန်"</string> @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"အောက်သá€á€¯á€·á€›á€½á€¾á€±á€·á€›á€”်"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ဘယ်ဘက်သá€á€¯á€·á€›á€½á€¾á€±á€·á€›á€”်"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ညာဘက်သá€á€¯á€·á€›á€½á€¾á€±á€·á€›á€”်"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"မှန်ဘီလူးအကျယ်ကá€á€¯ á€á€á€¯á€¸á€›á€”်"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"မှန်ဘီလူးအကျယ်ကá€á€¯ လျှော့ရန်"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"မှန်ဘီလူးအမြင့်ကá€á€¯ á€á€á€¯á€¸á€›á€”်"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"မှန်ဘီလူးအမြင့်ကá€á€¯ လျှော့ရန်"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"á€á€»á€²á€·á€›á€”် á€á€œá€¯á€á€º"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ဖန်သားပြင်အပြည့် á€á€»á€²á€·á€žá€Šá€º"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ဖန်သားပြင် á€á€…်စá€á€á€ºá€á€…်ပá€á€¯á€„်းကá€á€¯ á€á€»á€²á€·á€•ါ"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 6923671c399b421c42377568b844b5865c504671..aef9f58eca5439cc9457c46773fc91e6d789bcc8 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Flytt ned"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Flytt til venstre"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Flytt til høyre"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Øk bredden pÃ¥ forstørrelsen"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Reduser bredden pÃ¥ forstørrelsen"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Øk høyden pÃ¥ forstørrelsen"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Reduser høyden pÃ¥ forstørrelsen"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Forstørringsbryter"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Forstørr hele skjermen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Forstørr en del av skjermen"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 93471844915535fde7de044b1ca9549d82a2d93f..4cae93fc49e87aab8625751eb2f96202b35f54cf 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"तल सारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"बायाठसारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"दायाठसारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤•ो चौडाइ बढाउनà¥à¤¹à¥‹à¤¸à¥"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤•ो चौडाइ घटाउनà¥à¤¹à¥‹à¤¸à¥"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤•ो उचाइ बढाउनà¥à¤¹à¥‹à¤¸à¥"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¾à¤¯à¤°à¤•ो उचाइ घटाउनà¥à¤¹à¥‹à¤¸à¥"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¿à¤•ेसन सà¥à¤µà¤¿à¤š"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"पूरै सà¥à¤•à¥à¤°à¤¿à¤¨ जà¥à¤® इन गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"सà¥à¤•à¥à¤°à¤¿à¤¨à¤•ो केही à¤à¤¾à¤— मà¥à¤¯à¤¾à¤—à¥à¤¨à¤¿à¤«à¤¾à¤‡ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index a42337f895c7d6c7dc5a0b1184c7254bc40c6602..d71a4e3d1342e4ac7dac9732992fad4841c5be59 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Omlaag verplaatsen"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Naar links verplaatsen"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Naar rechts verplaatsen"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Breedte van vergrootglas vergroten"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Breedte van vergrootglas verkleinen"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Hoogte van vergrootglas vergroten"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Hoogte van vergrootglas verkleinen"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Vergrotingsschakelaar"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Volledig scherm vergroten"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Deel van het scherm vergroten"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 24aef78e987b8c02fc8bcecb554af0f88481e463..a8da287d07bcaecd94d3dda8681f515c23582369 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -105,7 +105,7 @@ <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ଆପଣ à¬à¬• ଆପ ରà‡à¬•ରàଡ କରିବା ସମàŸà¬°à‡, ସà‡à¬¹à¬¿ à¬†à¬ªà¬°à‡ à¬¦à‡à¬–ାଯାଉଥିବା କିମàବା ପàà¬²à‡ à¬¹à‡à¬‰à¬¥à¬¿à¬¬à¬¾ ସବàକିଛିକà Androidର ଆକàସà‡à¬¸ ଅଛି। ତà‡à¬£à ପାସà±à¬¾à¬°àଡ, ପà‡à¬®à‡à¬£àଟ ବିବରଣà€, ମà‡à¬¸à‡à¬œ, à¬«à¬Ÿà‹ à¬à¬¬à¬‚ ଅଡିଓ ଓ à¬à¬¿à¬¡à¬¿à¬“ ପରି ବିଷàŸà¬—àଡ଼ିକ ପàରତି ସତରàକ ରàହନàତà।"</string> <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ରà‡à¬•ରàଡିଂ ଆରମàଠକରନàତà"</string> <string name="screenrecord_audio_label" msgid="6183558856175159629">"ଅଡିଓ ରà‡à¬•ରàଡ କରନàତà"</string> - <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ଡିà¬à¬¾à¬‡à¬¸à ଅଡିଓ"</string> + <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ଡିà¬à¬¾à¬‡à¬¸ ଅଡିଓ"</string> <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ମààŸàଜିକ, କଲ à¬à¬¬à¬‚ ରିଂଟà‹à¬¨à¬—àଡ଼ିକ ପରି ଆପଣଙàକ ଡିà¬à¬¾à¬‡à¬¸à¬°à ସାଉଣàଡ"</string> <string name="screenrecord_mic_label" msgid="2111264835791332350">"ମାଇକàରà‹à¬«à‹à¬¨"</string> <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ଡିà¬à¬¾à¬‡à¬¸à ଅଡିଓ à¬à¬¬à¬‚ ମାଇକàରà‹à¬«à‹à¬¨à"</string> @@ -298,8 +298,8 @@ <string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ଚà‡à¬¤à¬¾à¬¬à¬¨à€"</string> <string name="quick_settings_work_mode_label" msgid="6440531507319809121">"à±à¬¾à¬°àକ ଆପàସ"</string> <string name="quick_settings_work_mode_paused_state" msgid="6681788236383735976">"ବିରତ କରାଯାଇଛି"</string> - <string name="quick_settings_night_display_label" msgid="8180030659141778180">"ନାଇଟà ଲାଇଟà"</string> - <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"ସà‚ରàଯààŸà¬¾à¬¸àତ ବà‡à¬³à‡ ଅନà ହà‡à¬¬"</string> + <string name="quick_settings_night_display_label" msgid="8180030659141778180">"ନାଇଟ ଲାଇଟ"</string> + <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"ସନàଧààŸà¬¾à¬°à‡ ଚାଲà ହà‡à¬¬"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"ସà‚ରàଯààŸà‹à¬¦àŸ ପରàଯààŸà¬¨àତ"</string> <string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g>à¬°à‡ à¬…à¬¨à ହà‡à¬¬"</string> <string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"<xliff:g id="TIME">%s</xliff:g> ପରàଯààŸà¬¨àତ"</string> @@ -698,7 +698,7 @@ <string name="keyboard_shortcut_group_applications_maps" msgid="7312554713993114342">"Maps"</string> <string name="volume_and_do_not_disturb" msgid="502044092739382832">"ବିରକàତ କରନàତà ନାହିà¬"</string> <string name="volume_dnd_silent" msgid="4154597281458298093">"à¬à¬²ààŸàମ ବଟନà†ଶରàଟକଟàâ€"</string> - <string name="battery" msgid="769686279459897127">"ବààŸà¬¾à¬Ÿà‡à¬°à€"</string> + <string name="battery" msgid="769686279459897127">"ବà‡à¬Ÿà‡à¬°à€"</string> <string name="headset" msgid="4485892374984466437">"ହà‡à¬¡à¬¸à‡à¬Ÿàâ€"</string> <string name="accessibility_long_click_tile" msgid="210472753156768705">"ସà‡à¬Ÿà¬¿à¬‚ସà ଖà‹à¬²à¬¨àତà"</string> <string name="accessibility_status_bar_headphones" msgid="1304082414912647414">"ହà‡à¬¡à¬«à‹à¬¨à†ସଂଯàକàତ"</string> @@ -793,7 +793,7 @@ <string name="tuner_menu" msgid="363690665924769420">"ମà‡à¬¨à"</string> <string name="tuner_app" msgid="6949280415826686972">"<xliff:g id="APP">%1$s</xliff:g> ଆପàâ€"</string> <string name="notification_channel_alerts" msgid="3385787053375150046">"ଆଲରàଟଗàଡ଼ିକ"</string> - <string name="notification_channel_battery" msgid="9219995638046695106">"ବààŸà¬¾à¬Ÿà‡à¬°à€"</string> + <string name="notification_channel_battery" msgid="9219995638046695106">"ବà‡à¬Ÿà‡à¬°à€"</string> <string name="notification_channel_screenshot" msgid="7665814998932211997">"ସàକàରà€à¬¨à¬¶à¬Ÿàâ€"</string> <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string> <string name="notification_channel_setup" msgid="7660580986090760350">"ସà‡à¬Ÿà¬…ପ"</string> @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ତଳକà ମàà¬à କରନàତà"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ବାମକà ମàà¬à କରନàତà"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ଡାହାଣକà ମàà¬à କରନàତà"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ମà‡à¬—àନିଫାàŸà¬°à¬° ପàରସàଥ ବଢ଼ାନàତà"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ମà‡à¬—àନିଫାàŸà¬°à¬° ପàରସàଥ କମାନàତà"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ମà‡à¬—àନିଫାàŸà¬°à¬° ଉଚàଚତା ବଢ଼ାନàତà"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ମà‡à¬—àନିଫାàŸà¬°à¬° ଉଚàଚତା କମାନàତà"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"ମààŸà¬¾à¬—àନିଫିକà‡à¬¸à¬¨à ସàà±à¬¿à¬šà"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ସମàପà‚ରàଣàଣ ସàକàରିନକà ମààŸà¬¾à¬—àନିଫାଠକରନàତà"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ସàକàରିନର ଅଂଶ ମାଗàନିଫାଠକରନàତà"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 2ebc398fe7ce5652a4631126abd81478ba79f192..1d4c5bd4d371f91fc930d6ec0579bf0a4d7eba79 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ਹੇਠਾਂ ਲਿਜਾਓ"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ਖੱਬੇ ਲਿਜਾਓ"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ਸੱਜੇ ਲਿਜਾਓ"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ਵੱਡਦਰਸ਼ੀ ਵਿੰਡੋ ਦੀ ਚੌੜਾਈ ਵਧਾਓ"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ਵੱਡਦਰਸ਼ੀ ਵਿੰਡੋ ਦੀ ਚੌੜਾਈ ਘਟਾਓ"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ਵੱਡਦਰਸ਼ੀ ਵਿੰਡੋ ਦੀ ਉਚਾਈ ਵਧਾਓ"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ਵੱਡਦਰਸ਼ੀ ਵਿੰਡੋ ਦੀ ਉਚਾਈ ਘਟਾਓ"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"ਵੱਡਦਰਸ਼ੀਕਰਨ ਸਵਿੱਚ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ਪੂਰੀ ਸਕà©à¨°à©€à¨¨ ਨੂੰ ਵੱਡਦਰਸ਼ੀ ਕਰੋ"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ਸਕà©à¨°à©€à¨¨ ਦੇ ਹਿੱਸੇ ਨੂੰ ਵੱਡਾ ਕਰੋ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index b495a5768b4beb12fa797a6eb7d4c456e6895040..47912cbaa3420180a246841519e01017affe4219 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"PrzesuÅ„ w dół"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"PrzesuÅ„ w lewo"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"PrzesuÅ„ w prawo"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ZwiÄ™ksz szerokość lupy"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Zmniejsz szerokość lupy"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ZwiÄ™ksz wysokość lupy"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Zmniejsz wysokość lupy"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Przełączanie powiÄ™kszenia"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"PowiÄ™kszanie peÅ‚nego ekranu"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"PowiÄ™ksz część ekranu"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index abfc9412b9048b05513ef1c8aeaf31f681eee25b..104ad392d810e240fab8f4bce3197080071ede2e 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover para baixo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover para a esquerda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover para a direita"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar a largura da lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Diminuir a largura da lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar a altura da lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Diminuir a altura da lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Chave de ampliação"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar toda a tela"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte da tela"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 85cd09aa3f5d2028eba674d68001c30d91c1ec4e..c7dba2e9d5bea5e5e32e51d12e44f3e52b95982c 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover para baixo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover para a esquerda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover para a direita"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar largura da lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Diminuir largura da lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar altura da lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Diminuir altura da lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Interruptor de ampliação"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar o ecrã inteiro"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte do ecrã"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index abfc9412b9048b05513ef1c8aeaf31f681eee25b..104ad392d810e240fab8f4bce3197080071ede2e 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mover para baixo"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mover para a esquerda"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mover para a direita"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Aumentar a largura da lupa"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Diminuir a largura da lupa"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Aumentar a altura da lupa"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Diminuir a altura da lupa"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Chave de ampliação"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar toda a tela"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte da tela"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 1f57dfe09d640c1a99f5400a305ec6c8aa8bcea2..f850708436e0dd3858d1e93365983820389f865f 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Mută în jos"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Mută la stânga"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Mută spre dreapta"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"CreÈ™te lățimea lupei"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Redu lățimea lupei"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"CreÈ™te înălÈ›imea lupei"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Redu înălÈ›imea lupei"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Comutator de mărire"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"MăreÈ™te tot ecranul"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"MăreÈ™te o parte a ecranului"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 1ea9d34e548f8a2b5d00d63ab8aab521679006da..060cb88804397b641b66ebcf5c1c2b859fd1d674 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ПеремеÑтить вниз"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ПеремеÑтить влево"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ПеремеÑтить вправо"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Увеличить ширину лупы"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Уменьшить ширину лупы"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Увеличить выÑоту лупы"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Уменьшить выÑоту лупы"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Переключатель режима увеличениÑ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увеличение вÑего Ñкрана"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увеличить чаÑть Ñкрана"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 3f2978cbac52d82033192ec2cc7bec22fa26defb..1d860d7ff188a8b299907a1e77b3013a8a8ddc1b 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"à¶´à·„à·…à¶§ ගෙන යන්න"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"වමට ගෙන යන්න"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"දකුණට ගෙන යන්න"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"විà·à·à¶½à¶šà¶ºà·™à·„à·’ à¶´à·…à¶½ à·€à·à¶©à·’ කරන්න"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"විà·à·à¶½à¶šà¶ºà·™à·„à·’ à¶´à·…à¶½ à¶…à¶©à·” කරන්න"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"විà·à·à¶½à¶šà¶ºà·™à·„à·’ à¶‹à·ƒ à·€à·à¶©à·’ කරන්න"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"විà·à·à¶½à¶šà¶ºà·™à·„à·’ à¶‹à·ƒ à¶…à¶©à·” කරන්න"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"විà·à·à¶½à¶± ස්විචය"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"පූර්ණ à¶à·’රය විà·à·à¶½à¶±à¶º කරන්න"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"à¶à·’රයේ කොටසක් විà·à·à¶½à¶±à¶º කරන්න"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index ba94b1af65cdbeb40a8c82217ba3dff7f8d6e3db..81b3a2f8e7e2a12d55aa7c2603125cd054bed1a6 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Posunúť nadol"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Posunúť doľava"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Posunúť doprava"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"ZväÄÅ¡iÅ¥ Å¡Ãrku lupy"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ZmenÅ¡iÅ¥ Å¡Ãrku lupy"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"ZväÄÅ¡iÅ¥ výšku lupy"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ZmenÅ¡iÅ¥ výšku lupy"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"PrepÃnaÄ zväÄenia"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ZväÄÅ¡enie celej obrazovky"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ZväÄÅ¡iÅ¥ ÄasÅ¥ obrazovky"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 8baa3b6a107dea2bc8dcdb310361356161fbbbb4..f71f72f76721527085b0efa731d30388ca4c7758 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Premakni navzdol"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Premakni levo"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Premakni desno"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"PoveÄanje Å¡irine poveÄevalnika"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ZmanjÅ¡anje Å¡irine poveÄevalnika"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"PoveÄanje viÅ¡ine poveÄevalnika"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ZmanjÅ¡anje viÅ¡ine poveÄevalnika"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Stikalo za poveÄavo"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"PoveÄanje celotnega zaslona"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"PoveÄava dela zaslona"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index ec1a6ccd11ac13c5453ebe243a57279f4de4d1ae..c7b5a774947f560fdd83f492def65be024b269f5 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Lëvize poshtë"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Lëvize majtas"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Lëvize djathtas"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Rrit gjerësinë e zmadhuesit"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Ul gjerësinë e zmadhuesit"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Rrit lartësinë e zmadhuesit"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Ul lartësinë e zmadhuesit"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Ndërrimi i zmadhimit"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Zmadho ekranin e plotë"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Zmadho një pjesë të ekranit"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index fc67121e7b5d109b07f86b97b3d23ad83224bd50..2e813c5543280923ef274d3c100419b5e7c422ba 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Померите надоле"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Померите налево"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Померите надеÑно"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Повећајте ширину лупе"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Смањите ширину лупе"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Повећајте виÑину лупе"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Смањите виÑину лупе"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Прелазак на други режим увећања"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увећајте цео екран"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увећајте део екрана"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 98c830189526e779c9ae14254727f13670bbb676..35da63a5e414b49aff0efe5d74595aad45160ca5 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Flytta nedÃ¥t"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Flytta Ã¥t vänster"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Flytta Ã¥t höger"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Öka bredden pÃ¥ förstoringen"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Minska bredden pÃ¥ förstoringen"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Öka höjden pÃ¥ förstoringen"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Minska höjden pÃ¥ förstoringen"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Förstoringsreglage"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Förstora hela skärmen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Förstora en del av skärmen"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 0bc5750d9a77f27f76d985b83d140990b3e02402..12eb1ae43251278c88f81c260d8e19a2040d1ba3 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Sogeza chini"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Sogeza kushoto"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Sogeza kulia"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Ongeza upana wa kikuzaji"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Punguza upana wa kikuzaji"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Ongeza urefu wa kikuzaji"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Punguza urefu wa kikuzaji"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Swichi ya ukuzaji"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Kuza skrini nzima"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Kuza sehemu ya skrini"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index f3954d6a06c22c4a25c3200801b6e5aec6e9ab6a..7b30d5cb3289fb1faa1fae21307ebb3a3bd62fce 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"கீழே நகரà¯à®¤à¯à®¤à¯"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"இடபà¯à®ªà¯à®±à®®à¯ நகரà¯à®¤à¯à®¤à¯"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"வலபà¯à®ªà¯à®±à®®à¯ நகரà¯à®¤à¯à®¤à¯"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"பெரிதாகà¯à®•à¯à®®à¯ கரà¯à®µà®¿à®¯à®¿à®©à¯ அகலதà¯à®¤à¯ˆ அதிகரி"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"பெரிதாகà¯à®•à¯à®®à¯ கரà¯à®µà®¿à®¯à®¿à®©à¯ அகலதà¯à®¤à¯ˆà®•௠கà¯à®±à¯ˆ"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"பெரிதாகà¯à®•à¯à®®à¯ கரà¯à®µà®¿à®¯à®¿à®©à¯ உயரதà¯à®¤à¯ˆ அதிகரி"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"பெரிதாகà¯à®•à¯à®®à¯ கரà¯à®µà®¿à®¯à®¿à®©à¯ உயரதà¯à®¤à¯ˆà®•௠கà¯à®±à¯ˆ"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"பெரிதாகà¯à®•ல௠ஸà¯à®µà®¿à®Ÿà¯à®šà¯"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"à®®à¯à®´à¯à®¤à¯à®¤à®¿à®°à¯ˆà®¯à¯ˆà®ªà¯ பெரிதாகà¯à®•à¯à®®à¯"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"திரையின௠ஒர௠பகà¯à®¤à®¿à®¯à¯ˆà®ªà¯ பெரிதாகà¯à®•à¯à®®à¯"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 1d221f42c85205606f4518aea73373eff4a99a48..4989fe938a9414217162455344c40d5dae5a344d 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"కిందకి పంపండి"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ఎడమవైపà±à°—à°¾ జరపండి"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"à°•à±à°¡à°¿à°µà±ˆà°ªà±à°—à°¾ జరపండి"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"మాగà±à°¨à°¿à°«à±ˆà°¯à°°à± వెడలà±à°ªà±à°¨à± పెంచండి"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"మాగà±à°¨à°¿à°«à±ˆà°¯à°°à± వెడలà±à°ªà±à°¨à± తగà±à°—à°¿à°‚à°šà°‚à°¡à°¿"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"మాగà±à°¨à°¿à°«à±ˆà°¯à°°à± à°Žà°¤à±à°¤à±à°¨à± పెంచండి"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"మాగà±à°¨à°¿à°«à±ˆà°¯à°°à± à°Žà°¤à±à°¤à±à°¨à± తగà±à°—à°¿à°‚à°šà°‚à°¡à°¿"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"à°®à±à°¯à°¾à°—à±à°¨à°¿à°«à°¿à°•ేషనౠసà±à°µà°¿à°šà±"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"à°«à±à°²à± à°¸à±à°•à±à°°à±€à°¨à±â€Œà°¨à± à°®à±à°¯à°¾à°—à±à°¨à°¿à°«à±ˆ చేయండి"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"à°¸à±à°•à±à°°à±€à°¨à±â€Œà°²à±‹ à°à°¾à°—ానà±à°¨à°¿ à°®à±à°¯à°¾à°—à±à°¨à°¿à°«à±ˆ చేయండి"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index df4ab83ee5b1da386f253c731599a004905d2427..70bdb1877dd0ec3df5160c5a236a5bd5272c9929 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ย้ายลง"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ย้ายไปทางซ้าย"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ย้ายไปทางขวา"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"เพิ่มความà¸à¸§à¹‰à¸²à¸‡à¸‚à¸à¸‡à¹à¸§à¹ˆà¸™à¸‚ยาย"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ลดความà¸à¸§à¹‰à¸²à¸‡à¸‚à¸à¸‡à¹à¸§à¹ˆà¸™à¸‚ยาย"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"เพิ่มความสูงขà¸à¸‡à¹à¸§à¹ˆà¸™à¸‚ยาย"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ลดความสูงขà¸à¸‡à¹à¸§à¹ˆà¸™à¸‚ยาย"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"เปลี่ยนโหมดà¸à¸²à¸£à¸‚ยาย"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ขยายเป็นเต็มหน้าจà¸"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ขยายบางส่วนขà¸à¸‡à¸«à¸™à¹‰à¸²à¸ˆà¸"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index a6535fdee5d58ca9c4494c7e29147f06fab6d1b5..fbf4506f2c7a395b17732208d6401ca3e48b18b0 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Ibaba"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Ilipat pakaliwa"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Ilipat pakanan"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Dagdagan ang lapad ng magnifier"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Bawasan ang lapad ng magnifier"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Dagdagan ang taas ng magnifier"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Bawasan ang taas ng magnifier"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Switch ng pag-magnify"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"I-magnify ang buong screen"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"I-magnify ang isang bahagi ng screen"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index a8a9ba4725f22f31e1c6d393f9d6edf302995edd..f82a928148478886952881624f968dcca66de052 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"AÅŸağı taşı"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Sola taşı"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"SaÄŸa taşı"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Büyüteç geniÅŸliÄŸini artır"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Büyüteç geniÅŸliÄŸini azalt"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Büyüteç yüksekliÄŸini artır"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Büyüteç yüksekliÄŸini azalt"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Büyütme moduna geçin"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Tam ekran büyütme"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekranın bir parçasını büyütün"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 48c45ae684146d34ec5259ee3490260e2164d0fe..997be733d589590732ec2317d237c8081b32a1c0 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"ПереміÑтити вниз"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"ПереміÑтити ліворуч"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"ПереміÑтити праворуч"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Збільшити ширину лупи"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Зменшити ширину лупи"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Збільшити виÑоту лупи"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Зменшити виÑоту лупи"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Перемикач режиму збільшеннÑ"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ð—Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð²Ñього екрана"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Збільшити чаÑтину екрана"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index de38ca103ac8c8ab8333f23a6c0d9de64772a504..731517142cd83cc59eefc789e4d43e1651619242 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"نیچے منتقل کریں"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"بائیں منتقل کریں"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"دائیں منتقل کریں"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Ù…ÛŒÚ¯Ù†ÛŒÙØ§Ø¦Ø± Ú©ÛŒ چوڑائی میں اضاÙÛ Ú©Ø±ÛŒÚº"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Ù…ÛŒÚ¯Ù†ÛŒÙØ§Ø¦Ø± Ú©ÛŒ چوڑائی Ú©Ùˆ Ú©Ù… کریں"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Ù…ÛŒÚ¯Ù†ÛŒÙØ§Ø¦Ø± Ú©ÛŒ اونچائی میں اضاÙÛ Ú©Ø±ÛŒÚº"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Ù…ÛŒÚ¯Ù†ÛŒÙØ§Ø¦Ø± Ú©ÛŒ اونچائی Ú©Ùˆ Ú©Ù… کریں"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"میگنیÙکیشن پر سوئچ کریں"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ÙÙÙ„ اسکرین Ú©Ùˆ بڑا کریں"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"اسکرین کا ØØµÛ بڑا کریں"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index e5703b292a1dd552a47643c67328ba8c85e98f76..8877d39cea83396c4c038baf885cfcd9324472b2 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Pastga siljitish"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Chapga siljitish"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"OÊ»ngga siljitish"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Lupa kengligini oshiring"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Lupaning kengligini kamaytiring"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Lupa balandligini oshiring"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Lupa balandligini kamaytiring"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Kattalashtirish rejimini almashtirish"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ekranni toÊ»liq kattalashtirish"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekran qismini kattalashtirish"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index f022aea90797c9de87a3ddd8b7fda8274103a52e..5990822502a3f4c3e34860688c2f36fc29e1bd3e 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Di chuyển xuống"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Di chuyển sang trái"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Di chuyển sang phải"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Tăng chiá»u rá»™ng cá»§a trình phóng to"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Giảm chiá»u rá»™ng cá»§a trình phóng to"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Tăng chiá»u cao cá»§a trình phóng to"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Giảm chiá»u cao cá»§a trình phóng to"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Nút chuyển phóng to"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Phóng to toà n mà n hình"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Phóng to má»™t phần mà n hình"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 6876b1cf623bb06b1c62b578085dfe551ce1a9d6..b9f79b1247a05dbaae05a5508be6dc1a5a180d45 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"下移"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"左移"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"å³ç§»"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"å¢žåŠ æ”¾å¤§é•œå®½åº¦"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"ç¼©å‡æ”¾å¤§é•œå®½åº¦"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"å¢žåŠ æ”¾å¤§é•œé«˜åº¦"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ç¼©å‡æ”¾å¤§é•œé«˜åº¦"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"åˆ‡æ¢æ”¾å¤§æ¨¡å¼"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大整个å±å¹•"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大部分å±å¹•"</string> @@ -1137,7 +1133,7 @@ <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"未知"</string> <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string> <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string> - <string name="log_access_confirmation_title" msgid="4843557604739943395">"å…许“<xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g>â€è®¿é—®æ‰€æœ‰è®¾å¤‡æ—¥å¿—å—?"</string> + <string name="log_access_confirmation_title" msgid="4843557604739943395">"è¦å…许“<xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g>â€è®¿é—®æ‰€æœ‰è®¾å¤‡æ—¥å¿—å—?"</string> <string name="log_access_confirmation_allow" msgid="752147861593202968">"å…许访问一次"</string> <string name="log_access_confirmation_deny" msgid="2389461495803585795">"ä¸å…许"</string> <string name="log_access_confirmation_body" msgid="6883031912003112634">"设备日志会记录设备上å‘生的活动。应用å¯ä»¥ä½¿ç”¨è¿™äº›æ—¥å¿—查找和修å¤é—®é¢˜ã€‚\n\n部分日志å¯èƒ½åŒ…嫿•感信æ¯ï¼Œå› æ¤è¯·ä»…å…许您信任的应用访问所有设备日志。\n\nå¦‚æžœæ‚¨ä¸æŽˆäºˆæ¤åº”用访问所有设备日志的æƒé™ï¼Œå®ƒä»ç„¶å¯ä»¥è®¿é—®è‡ªå·±çš„æ—¥å¿—ã€‚æ‚¨çš„è®¾å¤‡åˆ¶é€ å•†å¯èƒ½ä»ç„¶èƒ½å¤Ÿè®¿é—®è®¾å¤‡ä¸Šçš„部分日志或信æ¯ã€‚"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 31f2a8532d0e158af255bead5214491aee16202f..29ad1410a452db4c3708b209b660d74f91bfd76e 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"å‘下移"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"å‘左移"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"å‘å³ç§»"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"å¢žåŠ æ”¾å¤§é¡é—Šåº¦"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"縮窄放大é¡é—Šåº¦"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"å¢žåŠ æ”¾å¤§é¡é«˜åº¦"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"ç¸®çŸæ”¾å¤§é¡é«˜åº¦"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"放大開關"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大æˆå€‹ç•«é¢"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大部分螢幕畫é¢"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 81ce876faf3ce1a4c0c75cc5464d4e41876e1775..723a6555b7429cc1f9b4d097dd843cc598abb099 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"å‘下移"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"å‘左移"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"å‘å³ç§»"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"å¢žåŠ æ”¾å¤§é¡å¯¬åº¦"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"縮減放大é¡å¯¬åº¦"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"å¢žåŠ æ”¾å¤§é¡é«˜åº¦"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"縮減放大é¡é«˜åº¦"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"åˆ‡æ›æ”¾å¤§æ¨¡å¼"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大整個螢幕畫é¢"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大局部螢幕畫é¢"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 63f32227d7e75be96200ed27e0afba46ab61e693..88a3994afd75c8e10750f0b7839985317769a748 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -863,14 +863,10 @@ <string name="accessibility_control_move_down" msgid="5390922476900974512">"Yehlisa"</string> <string name="accessibility_control_move_left" msgid="8156206978511401995">"Yisa kwesokunxele"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"Yisa kwesokudla"</string> - <!-- no translation found for accessibility_control_increase_window_width (6992249470832493283) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_width (5740401560105929681) --> - <skip /> - <!-- no translation found for accessibility_control_increase_window_height (2200966116612324260) --> - <skip /> - <!-- no translation found for accessibility_control_decrease_window_height (2054479949445332761) --> - <skip /> + <string name="accessibility_control_increase_window_width" msgid="6992249470832493283">"Khulisa ububanzi besibonakhulu"</string> + <string name="accessibility_control_decrease_window_width" msgid="5740401560105929681">"Khulisa ububanzi besibonakhulu"</string> + <string name="accessibility_control_increase_window_height" msgid="2200966116612324260">"Khulisa ubude besibonakhulu"</string> + <string name="accessibility_control_decrease_window_height" msgid="2054479949445332761">"Nciphisa ubude besibonakhulu"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"Iswishi yokukhulisa"</string> <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Khulisa isikrini esigcwele"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Khulisa ingxenye eyesikrini"</string> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index c72f5657176b761805aaf64386562e03c4c50e3e..b6bca65b8174437b3a66d3bbc7a31b9e6466a1ef 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -70,6 +70,16 @@ <!-- The number of rows in the QuickSettings --> <integer name="quick_settings_max_rows">4</integer> + <!-- Override column number for quick settings. + For now, this value has effect only when flag lockscreen.enable_landscape is enabled. + TODO (b/293252410) - change this comment/resource when flag is enabled --> + <integer name="small_land_lockscreen_quick_settings_num_columns">2</integer> + + <!-- Override row number for quick settings. + For now, this value has effect only when flag lockscreen.enable_landscape is enabled. + TODO (b/293252410) - change this comment/resource when flag is enabled --> + <integer name="small_land_lockscreen_quick_settings_max_rows">2</integer> + <!-- If the dp width of the available space is <= this value, potentially adjust the number of media recommendation items--> <integer name="default_qs_media_rec_width_dp">380</integer> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 7e9d3f59369be67be76686d74ea7376717af7647..88726af39c25c2f173aa47ac6cd2e4ddf7595e6c 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1643,6 +1643,11 @@ <!-- Radius of switch track --> <dimen name="settingslib_switch_track_radius">35dp</dimen> + <!-- Bluetooth dialog related dimensions --> + <dimen name="bluetooth_dialog_layout_margin">16dp</dimen> + <!-- The height of the bluetooth device in bluetooth dialog. --> + <dimen name="bluetooth_dialog_device_height">72dp</dimen> + <!-- Height percentage of the parent container occupied by the communal view --> <item name="communal_source_height_percentage" format="float" type="dimen">0.80</item> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 29c9767866e93321b8f17a34485ebda89a274316..5860806c6aec36a257d2a10a4cadaa7f671220f5 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -459,7 +459,12 @@ <!-- Content description of the bluetooth icon when connected for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_bluetooth_connected">Bluetooth connected.</string> - <!-- Content description of the bluetooth icon when connecting for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> + + <!-- Content description of the bluetooth device icon. [CHAR LIMIT=NONE] --> + <string name="accessibility_bluetooth_device_icon">Bluetooth device icon</string> + + <!-- Content description of the bluetooth device settings gear icon. [CHAR LIMIT=NONE] --> + <string name="accessibility_bluetooth_device_settings_gear">Bluetooth device settings gear</string> <!-- Content description of the battery when battery state is unknown for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_battery_unknown">Battery percentage unknown.</string> @@ -621,6 +626,19 @@ <!-- QuickSettings: Bluetooth (Off) [CHAR LIMIT=NONE] --> <!-- QuickSettings: Bluetooth detail panel, text when there are no items [CHAR LIMIT=NONE] --> <string name="quick_settings_bluetooth_detail_empty_text">No paired devices available</string> + <!-- QuickSettings: Bluetooth dialog subtitle [CHAR LIMIT=NONE]--> + <string name="quick_settings_bluetooth_tile_subtitle">Tap a device to connect</string> + <!-- QuickSettings: Bluetooth dialog pair new devices [CHAR LIMIT=NONE]--> + <string name="pair_new_bluetooth_devices">Pair new device</string> + <!-- QuickSettings: Bluetooth dialog see all devices [CHAR LIMIT=NONE]--> + <string name="see_all_bluetooth_devices">See all</string> + <!-- QuickSettings: Bluetooth dialog turn on Bluetooth [CHAR LIMIT=NONE]--> + <string name="turn_on_bluetooth">Use Bluetooth</string> + <!-- QuickSettings: Bluetooth dialog device connected default summary [CHAR LIMIT=NONE]--> + <string name="quick_settings_bluetooth_device_connected">Connected</string> + <!-- QuickSettings: Bluetooth dialog device saved default summary [CHAR LIMIT=NONE]--> + <string name="quick_settings_bluetooth_device_saved">Saved</string> + <!-- QuickSettings: Bluetooth secondary label for the battery level of a connected device [CHAR LIMIT=20]--> <string name="quick_settings_bluetooth_secondary_label_battery_level"><xliff:g id="battery_level_as_percentage">%s</xliff:g> battery</string> <!-- QuickSettings: Bluetooth secondary label for an audio device being connected [CHAR LIMIT=20]--> @@ -3086,7 +3104,7 @@ configured. This is shown as part of a dialog that explains to the user why they cannot select this shortcut for their lock screen right now. [CHAR LIMIT=NONE]. --> - <string name="home_quick_affordance_unavailable_configure_the_app">• At least one device is available</string> + <string name="home_quick_affordance_unavailable_configure_the_app">• At least one device or device panel are available</string> <!--- Explains that the notes app is not available. This is shown as part of a dialog that explains to diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 6991b964c50485aed39becaaddb24952e9a2c49d..084cb883d766dd5c99aef99911d8fe231d982e38 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -15,7 +15,7 @@ --> <resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> <style name="TextAppearance.StatusBar.Clock" parent="@*android:style/TextAppearance.StatusBar.Icon"> <item name="android:textSize">@dimen/status_bar_clock_size</item> @@ -54,10 +54,10 @@ </style> <style name="TextAppearance.StatusBar.Expanded.EmergencyCallsOnly" - parent="TextAppearance.StatusBar.Expanded.AboveDateTime" /> + parent="TextAppearance.StatusBar.Expanded.AboveDateTime" /> <style name="TextAppearance.StatusBar.Expanded.ChargingInfo" - parent="TextAppearance.StatusBar.Expanded.AboveDateTime" /> + parent="TextAppearance.StatusBar.Expanded.AboveDateTime" /> <style name="TextAppearance.StatusBar.Expanded.UserSwitcher"> <item name="android:textSize">@dimen/kg_user_switcher_text_size</item> @@ -645,7 +645,7 @@ </style> <style name="TextAppearance.HeadsUpStatusBarText" - parent="@*android:style/TextAppearance.DeviceDefault.Notification.Info"> + parent="@*android:style/TextAppearance.DeviceDefault.Notification.Info"> </style> <style name="TextAppearance.QSEdit" > @@ -699,7 +699,7 @@ </style> <style name="MediaPlayer.SessionAction" - parent="@android:style/Widget.Material.Button.Borderless.Small"> + parent="@android:style/Widget.Material.Button.Borderless.Small"> <item name="android:background">@drawable/qs_media_light_source</item> <item name="android:tint">?android:attr/textColorPrimary</item> <item name="android:paddingTop">12dp</item> @@ -929,12 +929,13 @@ <item name="android:fontFamily">@*android:string/config_bodyFontFamily</item> </style> - <style name="Theme.SystemUI.Dialog.Control.DetailPanel" parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar"> - <item name="android:windowFullscreen">false</item> - <item name="android:windowIsFloating">false</item> - <item name="android:windowBackground">@color/controls_task_view_bg</item> - <item name="android:backgroundDimEnabled">false</item> - <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> + <style name="Theme.SystemUI.Dialog.Control.DetailPanel" + parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar"> + <item name="android:windowFullscreen">false</item> + <item name="android:windowIsFloating">false</item> + <item name="android:windowBackground">@color/controls_task_view_bg</item> + <item name="android:backgroundDimEnabled">false</item> + <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> </style> <style name="Control" /> @@ -1034,17 +1035,17 @@ <style name="Wallet" /> <style name="Wallet.TextAppearance"> - <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> - <item name="android:textColor">?android:attr/textColorPrimary</item> - <item name="android:singleLine">true</item> - <item name="android:textSize">14sp</item> + <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item> + <item name="android:textColor">?android:attr/textColorPrimary</item> + <item name="android:singleLine">true</item> + <item name="android:textSize">14sp</item> </style> <style name="Wallet.Theme" parent="@android:style/Theme.DeviceDefault"> - <item name="android:colorBackground">@color/material_dynamic_neutral10</item> - <item name="android:itemBackground">@color/material_dynamic_neutral20</item> - <!-- Setting a placeholder will avoid using the SystemUI icon on the splash screen. --> - <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_blank</item> + <item name="android:colorBackground">@color/material_dynamic_neutral10</item> + <item name="android:itemBackground">@color/material_dynamic_neutral20</item> + <!-- Setting a placeholder will avoid using the SystemUI icon on the splash screen. --> + <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_blank</item> </style> <style name="Animation.InternetDialog" parent="@android:style/Animation.InputMethod"> @@ -1169,7 +1170,7 @@ </style> <style name="TrimmedHorizontalProgressBar" - parent="android:Widget.Material.ProgressBar.Horizontal"> + parent="android:Widget.Material.ProgressBar.Horizontal"> <item name="android:indeterminateDrawable"> @drawable/progress_indeterminate_horizontal_material_trimmed </item> @@ -1254,6 +1255,36 @@ <item name="android:textColor">?android:attr/textColorSecondary</item> </style> + <style name="BluetoothTileDialog"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_gravity">center_vertical|start</item> + </style> + + <style name="BluetoothTileDialog.Device"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">88dp</item> + <item name="android:layout_gravity">center_vertical|start</item> + <item name="android:layout_marginStart">@dimen/bluetooth_dialog_layout_margin</item> + <item name="android:layout_marginEnd">@dimen/bluetooth_dialog_layout_margin</item> + <item name="android:paddingStart">22dp</item> + <item name="android:paddingEnd">22dp</item> + <item name="android:orientation">horizontal</item> + <item name="android:focusable">true</item> + <item name="android:clickable">true</item> + </style> + + <style name="BluetoothTileDialog.DeviceName"> + <item name="android:textSize">14sp</item> + <item name="android:textAppearance">@style/TextAppearance.Dialog.Title</item> + </style> + + <style name="BluetoothTileDialog.DeviceSummary"> + <item name="android:ellipsize">end</item> + <item name="android:maxLines">2</item> + <item name="android:textAppearance">@style/TextAppearance.Dialog.Body.Message</item> + </style> + <style name="BroadcastDialog"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> @@ -1397,7 +1428,7 @@ </style> <style name="PermissionGrantButtonTop" - parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"> + parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"> <item name="android:layout_width">332dp</item> <item name="android:layout_height">56dp</item> <item name="android:layout_marginTop">2dp</item> @@ -1406,7 +1437,7 @@ </style> <style name="PermissionGrantButtonBottom" - parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"> + parent="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"> <item name="android:layout_width">332dp</item> <item name="android:layout_height">56dp</item> <item name="android:layout_marginTop">2dp</item> @@ -1465,14 +1496,14 @@ </style> <style name="TextAppearance.PrivacyDialog.Item.Title" - parent="@android:style/TextAppearance.DeviceDefault.Medium"> + parent="@android:style/TextAppearance.DeviceDefault.Medium"> <item name="android:textSize">14sp</item> <item name="android:lineHeight">20sp</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurface</item> </style> <style name="TextAppearance.PrivacyDialog.Item.Summary" - parent="@android:style/TextAppearance.DeviceDefault.Small"> + parent="@android:style/TextAppearance.DeviceDefault.Small"> <item name="android:textSize">14sp</item> <item name="android:lineHeight">20sp</item> <item name="android:textColor">?androidprv:attr/materialColorOnSurfaceVariant</item> @@ -1481,4 +1512,4 @@ <style name="Theme.PrivacyDialog" parent="@style/Theme.SystemUI.Dialog"> <item name="android:colorBackground">?androidprv:attr/materialColorSurfaceContainer</item> </style> -</resources> +</resources> \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java index 1741e306c29f25fe8efeb9b15363d6b644690abe..622b67f25da38fcf654dfb375f7b63298c76a8be 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java @@ -17,6 +17,7 @@ package com.android.keyguard; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_APPEAR; import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_DISAPPEAR; @@ -52,6 +53,8 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { private final DisappearAnimationUtils mDisappearAnimationUtils; private final DisappearAnimationUtils mDisappearAnimationUtilsLocked; @Nullable private MotionLayout mContainerMotionLayout; + // TODO (b/293252410) - usage of mContainerConstraintLayout should be removed + // when the flag is enabled/removed @Nullable private ConstraintLayout mContainerConstraintLayout; private int mDisappearYTranslation; private View[][] mViews; @@ -59,7 +62,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { private int mYTransOffset; private View mBouncerMessageArea; private boolean mAlreadyUsingSplitBouncer = false; - private boolean mIsLockScreenLandscapeEnabled = false; + private boolean mIsSmallLockScreenLandscapeEnabled = false; @DevicePostureInt private int mLastDevicePosture = DEVICE_POSTURE_UNKNOWN; public static final long ANIMATION_DURATION = 650; @@ -87,12 +90,12 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { /** Use motion layout (new bouncer implementation) if LOCKSCREEN_ENABLE_LANDSCAPE flag is * enabled, instead of constraint layout (old bouncer implementation) */ public void setIsLockScreenLandscapeEnabled(boolean isLockScreenLandscapeEnabled) { - mIsLockScreenLandscapeEnabled = isLockScreenLandscapeEnabled; + mIsSmallLockScreenLandscapeEnabled = isLockScreenLandscapeEnabled; findContainerLayout(); } private void findContainerLayout() { - if (mIsLockScreenLandscapeEnabled) { + if (mIsSmallLockScreenLandscapeEnabled) { mContainerMotionLayout = findViewById(R.id.pin_container); } else { mContainerConstraintLayout = findViewById(R.id.pin_container); @@ -109,7 +112,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { if (mLastDevicePosture == posture) return; mLastDevicePosture = posture; - if (mIsLockScreenLandscapeEnabled) { + if (mIsSmallLockScreenLandscapeEnabled) { boolean useSplitBouncerAfterFold = mLastDevicePosture == DEVICE_POSTURE_CLOSED && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE @@ -166,21 +169,45 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { } } + if (mIsSmallLockScreenLandscapeEnabled) { + updateHalfFoldedConstraints(); + } else { + updateHalfFoldedGuideline(); + } + } + + private void updateHalfFoldedConstraints() { + // Update the constraints based on the device posture... + if (mAlreadyUsingSplitBouncer) return; + + boolean shouldCollapsePin = + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED + && mContext.getResources().getConfiguration().orientation + == ORIENTATION_PORTRAIT; + + int expectedMotionLayoutState = shouldCollapsePin + ? R.id.half_folded_single_constraints + : R.id.single_constraints; + + transitionToMotionLayoutState(expectedMotionLayoutState); + } + + // TODO (b/293252410) - this method can be removed when the flag is enabled/removed + private void updateHalfFoldedGuideline() { // Update the guideline based on the device posture... float halfOpenPercentage = mContext.getResources().getFloat(R.dimen.half_opened_bouncer_height_ratio); - if (mIsLockScreenLandscapeEnabled) { - ConstraintSet cs = mContainerMotionLayout.getConstraintSet(R.id.single_constraints); - cs.setGuidelinePercent(R.id.pin_pad_top_guideline, - mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); - cs.applyTo(mContainerMotionLayout); - } else { - ConstraintSet cs = new ConstraintSet(); - cs.clone(mContainerConstraintLayout); - cs.setGuidelinePercent(R.id.pin_pad_top_guideline, - mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); - cs.applyTo(mContainerConstraintLayout); + ConstraintSet cs = new ConstraintSet(); + cs.clone(mContainerConstraintLayout); + cs.setGuidelinePercent(R.id.pin_pad_top_guideline, + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); + cs.applyTo(mContainerConstraintLayout); + } + + private void transitionToMotionLayoutState(int state) { + if (mContainerMotionLayout.getCurrentState() != state) { + mContainerMotionLayout.transitionToState(state); } } @@ -189,12 +216,24 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { * Only called when flag LANDSCAPE_ENABLE_LOCKSCREEN is enabled. */ @Override protected void updateConstraints(boolean useSplitBouncer) { + if (!mIsSmallLockScreenLandscapeEnabled) return; + mAlreadyUsingSplitBouncer = useSplitBouncer; + if (useSplitBouncer) { mContainerMotionLayout.jumpToState(R.id.split_constraints); mContainerMotionLayout.setMaxWidth(Integer.MAX_VALUE); } else { - mContainerMotionLayout.jumpToState(R.id.single_constraints); + boolean useHalfFoldedConstraints = + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED + && mContext.getResources().getConfiguration().orientation + == ORIENTATION_PORTRAIT; + + if (useHalfFoldedConstraints) { + mContainerMotionLayout.jumpToState(R.id.half_folded_single_constraints); + } else { + mContainerMotionLayout.jumpToState(R.id.single_constraints); + } mContainerMotionLayout.setMaxWidth(getResources() .getDimensionPixelSize(R.dimen.keyguard_security_width)); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java index 802e222b38970fada93a0387054d33d911b40fc3..5c206e95966b7a3bd0e3ff57d3ab2a074c6407c0 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java @@ -16,6 +16,7 @@ package com.android.keyguard; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_CLOSED; import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED; @@ -81,9 +82,11 @@ public class KeyguardPatternView extends KeyguardInputView BouncerKeyguardMessageArea mSecurityMessageDisplay; private View mEcaView; @Nullable private MotionLayout mContainerMotionLayout; + // TODO (b/293252410) - usage of mContainerConstraintLayout should be removed + // when the flag is enabled/removed @Nullable private ConstraintLayout mContainerConstraintLayout; private boolean mAlreadyUsingSplitBouncer = false; - private boolean mIsLockScreenLandscapeEnabled = false; + private boolean mIsSmallLockScreenLandscapeEnabled = false; @DevicePostureInt private int mLastDevicePosture = DEVICE_POSTURE_UNKNOWN; public KeyguardPatternView(Context context) { @@ -111,12 +114,12 @@ public class KeyguardPatternView extends KeyguardInputView * enabled, instead of constraint layout (old bouncer implementation) */ public void setIsLockScreenLandscapeEnabled(boolean isLockScreenLandscapeEnabled) { - mIsLockScreenLandscapeEnabled = isLockScreenLandscapeEnabled; + mIsSmallLockScreenLandscapeEnabled = isLockScreenLandscapeEnabled; findContainerLayout(); } private void findContainerLayout() { - if (mIsLockScreenLandscapeEnabled) { + if (mIsSmallLockScreenLandscapeEnabled) { mContainerMotionLayout = findViewById(R.id.pattern_container); } else { mContainerConstraintLayout = findViewById(R.id.pattern_container); @@ -132,7 +135,7 @@ public class KeyguardPatternView extends KeyguardInputView if (mLastDevicePosture == posture) return; mLastDevicePosture = posture; - if (mIsLockScreenLandscapeEnabled) { + if (mIsSmallLockScreenLandscapeEnabled) { boolean useSplitBouncerAfterFold = mLastDevicePosture == DEVICE_POSTURE_CLOSED && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE @@ -147,21 +150,45 @@ public class KeyguardPatternView extends KeyguardInputView } private void updateMargins() { + if (mIsSmallLockScreenLandscapeEnabled) { + updateHalfFoldedConstraints(); + } else { + updateHalfFoldedGuideline(); + } + } + + private void updateHalfFoldedConstraints() { + // Update the constraints based on the device posture... + if (mAlreadyUsingSplitBouncer) return; + + boolean shouldCollapsePattern = + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED + && mContext.getResources().getConfiguration().orientation + == ORIENTATION_PORTRAIT; + + int expectedMotionLayoutState = shouldCollapsePattern + ? R.id.half_folded_single_constraints + : R.id.single_constraints; + + transitionToMotionLayoutState(expectedMotionLayoutState); + } + + // TODO (b/293252410) - this method can be removed when the flag is enabled/removed + private void updateHalfFoldedGuideline() { // Update the guideline based on the device posture... float halfOpenPercentage = mContext.getResources().getFloat(R.dimen.half_opened_bouncer_height_ratio); - if (mIsLockScreenLandscapeEnabled) { - ConstraintSet cs = mContainerMotionLayout.getConstraintSet(R.id.single_constraints); - cs.setGuidelinePercent(R.id.pattern_top_guideline, - mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); - cs.applyTo(mContainerMotionLayout); - } else { - ConstraintSet cs = new ConstraintSet(); - cs.clone(mContainerConstraintLayout); - cs.setGuidelinePercent(R.id.pattern_top_guideline, - mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); - cs.applyTo(mContainerConstraintLayout); + ConstraintSet cs = new ConstraintSet(); + cs.clone(mContainerConstraintLayout); + cs.setGuidelinePercent(R.id.pattern_top_guideline, + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED ? halfOpenPercentage : 0.0f); + cs.applyTo(mContainerConstraintLayout); + } + + private void transitionToMotionLayoutState(int state) { + if (mContainerMotionLayout.getCurrentState() != state) { + mContainerMotionLayout.transitionToState(state); } } @@ -172,12 +199,24 @@ public class KeyguardPatternView extends KeyguardInputView */ @Override protected void updateConstraints(boolean useSplitBouncer) { + if (!mIsSmallLockScreenLandscapeEnabled) return; + mAlreadyUsingSplitBouncer = useSplitBouncer; + if (useSplitBouncer) { mContainerMotionLayout.jumpToState(R.id.split_constraints); mContainerMotionLayout.setMaxWidth(Integer.MAX_VALUE); } else { - mContainerMotionLayout.jumpToState(R.id.single_constraints); + boolean useHalfFoldedConstraints = + mLastDevicePosture == DEVICE_POSTURE_HALF_OPENED + && mContext.getResources().getConfiguration().orientation + == ORIENTATION_PORTRAIT; + + if (useHalfFoldedConstraints) { + mContainerMotionLayout.jumpToState(R.id.half_folded_single_constraints); + } else { + mContainerMotionLayout.jumpToState(R.id.single_constraints); + } mContainerMotionLayout.setMaxWidth(getResources() .getDimensionPixelSize(R.dimen.biometric_auth_pattern_view_max_size)); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java index 21960e219fc934da87dcc10fa9f369d6c1c32c72..83b1a2cbbf52bad2cf93a938f1a46692bfab611e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java @@ -66,42 +66,6 @@ public interface KeyguardSecurityView { */ int PROMPT_REASON_TRUSTAGENT_EXPIRED = 8; - /** - * Prompt that is shown when there is an incorrect primary authentication input. - */ - int PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT = 9; - - /** - * Prompt that is shown when there is an incorrect face biometric input. - */ - int PROMPT_REASON_INCORRECT_FACE_INPUT = 10; - - /** - * Prompt that is shown when there is an incorrect fingerprint biometric input. - */ - int PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT = 11; - - /** - * Prompt that is shown when face authentication is in locked out state. - */ - int PROMPT_REASON_FACE_LOCKED_OUT = 12; - - /** - * Prompt that is shown when fingerprint authentication is in locked out state. - */ - int PROMPT_REASON_FINGERPRINT_LOCKED_OUT = 13; - - /** - * Default prompt that is shown on the bouncer. - */ - int PROMPT_REASON_DEFAULT = 14; - - /** - * Prompt that is shown when primary authentication is in locked out state after too many - * attempts - */ - int PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT = 15; - /** * Strong auth is required because the device has just booted because of an automatic * mainline update. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java index 9c4d224115b2cf78ea65996e5abdb7f0b2e59030..ec2999ffcfe1a4ea5cc61f85e4a5540ffaf09b0b 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java @@ -139,12 +139,12 @@ public class KeyguardSecurityViewFlipperController onViewInflatedListener.onViewInflated(childController); // Single bouncer constrains are default - if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) - && - getResources().getBoolean(R.bool.update_bouncer_constraints)) { + if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)) { boolean useSplitBouncer = - getResources().getConfiguration().orientation + getResources().getBoolean(R.bool.update_bouncer_constraints) + && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; + updateConstraints(useSplitBouncer); } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt b/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt index f2d4f8912c3f54e5f08b5b5fc1a85d9c93878440..72fcfe777e792e0a95cdedd657e077b70ac2f383 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt @@ -16,10 +16,12 @@ package com.android.systemui.biometrics.dagger -import com.android.systemui.biometrics.UdfpsUtils import android.content.res.Resources import com.android.internal.R import com.android.systemui.biometrics.EllipseOverlapDetectorParams +import com.android.systemui.biometrics.UdfpsUtils +import com.android.systemui.biometrics.data.repository.DisplayStateRepository +import com.android.systemui.biometrics.data.repository.DisplayStateRepositoryImpl import com.android.systemui.biometrics.data.repository.FacePropertyRepository import com.android.systemui.biometrics.data.repository.FacePropertyRepositoryImpl import com.android.systemui.biometrics.data.repository.FaceSettingsRepository @@ -28,18 +30,6 @@ import com.android.systemui.biometrics.data.repository.FingerprintPropertyReposi import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepositoryImpl import com.android.systemui.biometrics.data.repository.PromptRepository import com.android.systemui.biometrics.data.repository.PromptRepositoryImpl -import com.android.systemui.biometrics.data.repository.DisplayStateRepository -import com.android.systemui.biometrics.data.repository.DisplayStateRepositoryImpl -import com.android.systemui.biometrics.domain.interactor.CredentialInteractor -import com.android.systemui.biometrics.domain.interactor.CredentialInteractorImpl -import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor -import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractorImpl -import com.android.systemui.biometrics.domain.interactor.LogContextInteractor -import com.android.systemui.biometrics.domain.interactor.LogContextInteractorImpl -import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor -import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractorImpl -import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractor -import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractorImpl import com.android.systemui.biometrics.udfps.BoundingBoxOverlapDetector import com.android.systemui.biometrics.udfps.EllipseOverlapDetector import com.android.systemui.biometrics.udfps.OverlapDetector @@ -59,9 +49,7 @@ interface BiometricsModule { @SysUISingleton fun faceSettings(impl: FaceSettingsRepositoryImpl): FaceSettingsRepository - @Binds - @SysUISingleton - fun faceSensors(impl: FacePropertyRepositoryImpl): FacePropertyRepository + @Binds @SysUISingleton fun faceSensors(impl: FacePropertyRepositoryImpl): FacePropertyRepository @Binds @SysUISingleton @@ -77,30 +65,6 @@ interface BiometricsModule { @SysUISingleton fun displayStateRepository(impl: DisplayStateRepositoryImpl): DisplayStateRepository - @Binds - @SysUISingleton - fun providesPromptSelectorInteractor( - impl: PromptSelectorInteractorImpl - ): PromptSelectorInteractor - - @Binds - @SysUISingleton - fun providesCredentialInteractor(impl: CredentialInteractorImpl): CredentialInteractor - - @Binds - @SysUISingleton - fun providesDisplayStateInteractor(impl: DisplayStateInteractorImpl): DisplayStateInteractor - - @Binds - @SysUISingleton - fun bindsLogContextInteractor(impl: LogContextInteractorImpl): LogContextInteractor - - @Binds - @SysUISingleton - fun providesSideFpsOverlayInteractor( - impl: SideFpsOverlayInteractorImpl - ): SideFpsOverlayInteractor - companion object { /** Background [Executor] for HAL related operations. */ @Provides @@ -110,8 +74,7 @@ interface BiometricsModule { fun providesPluginExecutor(threadFactory: ThreadFactory): Executor = threadFactory.buildExecutorOnNewThread("biometrics") - @Provides - fun providesUdfpsUtils(): UdfpsUtils = UdfpsUtils() + @Provides fun providesUdfpsUtils(): UdfpsUtils = UdfpsUtils() @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/DisplayStateRepository.kt b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/DisplayStateRepository.kt index 7a9efcf78999425a97a553a8bb47640ca3f73da4..c4c52e8b358ec93826e4e4004988c2ef25885c5f 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/DisplayStateRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/DisplayStateRepository.kt @@ -41,6 +41,12 @@ import kotlinx.coroutines.flow.stateIn /** Repository for the current state of the display */ interface DisplayStateRepository { + /** + * Whether or not the direction rotation is applied to get to an application's requested + * orientation is reversed. + */ + val isReverseDefaultRotation: Boolean + /** Provides the current rear display state. */ val isInRearDisplayMode: StateFlow<Boolean> @@ -59,6 +65,9 @@ constructor( @Main handler: Handler, @Main mainExecutor: Executor ) : DisplayStateRepository { + override val isReverseDefaultRotation = + context.resources.getBoolean(com.android.internal.R.bool.config_reverseDefaultRotation) + override val isInRearDisplayMode: StateFlow<Boolean> = conflatedCallbackFlow { val sendRearDisplayStateUpdate = { state: Boolean -> @@ -94,7 +103,11 @@ constructor( private fun getDisplayRotation(): DisplayRotation { val cachedDisplayInfo = DisplayInfo() context.display?.getDisplayInfo(cachedDisplayInfo) - return cachedDisplayInfo.rotation.toDisplayRotation() + var rotation = cachedDisplayInfo.rotation + if (isReverseDefaultRotation) { + rotation = (rotation + 1) % 4 + } + return rotation.toDisplayRotation() } override val currentRotation: StateFlow<DisplayRotation> = diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/BiometricsDomainLayerModule.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/BiometricsDomainLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..a590dccd53180831fe47c3d15804baae7d85f1dc --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/BiometricsDomainLayerModule.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.biometrics.domain + +import com.android.systemui.biometrics.domain.interactor.CredentialInteractor +import com.android.systemui.biometrics.domain.interactor.CredentialInteractorImpl +import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor +import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractorImpl +import com.android.systemui.biometrics.domain.interactor.LogContextInteractor +import com.android.systemui.biometrics.domain.interactor.LogContextInteractorImpl +import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor +import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractorImpl +import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractor +import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractorImpl +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module + +@Module +interface BiometricsDomainLayerModule { + + @Binds + @SysUISingleton + fun providesPromptSelectorInteractor( + impl: PromptSelectorInteractorImpl + ): PromptSelectorInteractor + + @Binds + @SysUISingleton + fun providesCredentialInteractor(impl: CredentialInteractorImpl): CredentialInteractor + + @Binds + @SysUISingleton + fun providesDisplayStateInteractor(impl: DisplayStateInteractorImpl): DisplayStateInteractor + + @Binds + @SysUISingleton + fun bindsLogContextInteractor(impl: LogContextInteractorImpl): LogContextInteractor + + @Binds + @SysUISingleton + fun providesSideFpsOverlayInteractor( + impl: SideFpsOverlayInteractorImpl + ): SideFpsOverlayInteractor +} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptFingerprintIconViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptFingerprintIconViewBinder.kt index 188c82b52374963ba9a6ef9f44cc0da0a266de68..d28f1dc78c1333d6cdb6957c27121f2f19a990e6 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptFingerprintIconViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/PromptFingerprintIconViewBinder.kt @@ -17,7 +17,6 @@ package com.android.systemui.biometrics.ui.binder -import android.view.DisplayInfo import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.airbnb.lottie.LottieAnimationView @@ -33,14 +32,14 @@ object PromptFingerprintIconViewBinder { fun bind(view: LottieAnimationView, viewModel: PromptFingerprintIconViewModel) { view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.STARTED) { - val displayInfo = DisplayInfo() - view.context.display?.getDisplayInfo(displayInfo) - viewModel.setRotation(displayInfo.rotation) viewModel.onConfigurationChanged(view.context.resources.configuration) launch { viewModel.iconAsset.collect { iconAsset -> if (iconAsset != -1) { view.setAnimation(iconAsset) + // TODO: must replace call below once non-sfps asset logic and + // shouldAnimateIconView logic is migrated to this ViewModel. + view.playAnimation() } } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt index a95e257188dc6c3032e3f989969b521ddc866f82..dfd3a9b8aebe9257a32af14af9630301b9769b78 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptFingerprintIconViewModel.kt @@ -19,10 +19,10 @@ package com.android.systemui.biometrics.ui.viewmodel import android.annotation.RawRes import android.content.res.Configuration -import android.view.Surface import com.android.systemui.res.R import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor +import com.android.systemui.biometrics.shared.model.DisplayRotation import com.android.systemui.biometrics.shared.model.FingerprintSensorType import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -35,19 +35,21 @@ constructor( private val displayStateInteractor: DisplayStateInteractor, promptSelectorInteractor: PromptSelectorInteractor, ) { - /** Current device rotation. */ - private var rotation: Int = Surface.ROTATION_0 - /** Current BiometricPromptLayout.iconView asset. */ val iconAsset: Flow<Int> = combine( + displayStateInteractor.currentRotation, displayStateInteractor.isFolded, displayStateInteractor.isInRearDisplayMode, promptSelectorInteractor.sensorType, - ) { isFolded: Boolean, isInRearDisplayMode: Boolean, sensorType: FingerprintSensorType -> + ) { + rotation: DisplayRotation, + isFolded: Boolean, + isInRearDisplayMode: Boolean, + sensorType: FingerprintSensorType -> when (sensorType) { FingerprintSensorType.POWER_BUTTON -> - getSideFpsAnimationAsset(isFolded, isInRearDisplayMode) + getSideFpsAnimationAsset(rotation, isFolded, isInRearDisplayMode) // Replace below when non-SFPS iconAsset logic is migrated to this ViewModel else -> -1 } @@ -55,11 +57,12 @@ constructor( @RawRes private fun getSideFpsAnimationAsset( + rotation: DisplayRotation, isDeviceFolded: Boolean, isInRearDisplayMode: Boolean, ): Int = when (rotation) { - Surface.ROTATION_90 -> + DisplayRotation.ROTATION_90 -> if (isInRearDisplayMode) { R.raw.biometricprompt_rear_portrait_reverse_base } else if (isDeviceFolded) { @@ -67,7 +70,7 @@ constructor( } else { R.raw.biometricprompt_portrait_base_topleft } - Surface.ROTATION_270 -> + DisplayRotation.ROTATION_270 -> if (isInRearDisplayMode) { R.raw.biometricprompt_rear_portrait_base } else if (isDeviceFolded) { @@ -89,8 +92,4 @@ constructor( fun onConfigurationChanged(newConfig: Configuration) { displayStateInteractor.onConfigurationChanged(newConfig) } - - fun setRotation(newRotation: Int) { - rotation = newRotation - } } diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt b/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt deleted file mode 100644 index f93337c993c89e28b2f9741457542607319b304d..0000000000000000000000000000000000000000 --- a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT 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.bouncer.data.factory - -import android.annotation.IntDef -import com.android.keyguard.KeyguardSecurityModel -import com.android.keyguard.KeyguardSecurityModel.SecurityMode -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_AFTER_LOCKOUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEFAULT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEVICE_ADMIN -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_FACE_LOCKED_OUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_FINGERPRINT_LOCKED_OUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_FACE_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NONE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PREPARE_FOR_UPDATE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FOR_MAINLINE_UPDATE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST -import com.android.systemui.res.R.string.bouncer_face_not_recognized -import com.android.systemui.res.R.string.keyguard_enter_password -import com.android.systemui.res.R.string.keyguard_enter_pattern -import com.android.systemui.res.R.string.keyguard_enter_pin -import com.android.systemui.res.R.string.kg_bio_too_many_attempts_password -import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pattern -import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pin -import com.android.systemui.res.R.string.kg_bio_try_again_or_password -import com.android.systemui.res.R.string.kg_bio_try_again_or_pattern -import com.android.systemui.res.R.string.kg_bio_try_again_or_pin -import com.android.systemui.res.R.string.kg_face_locked_out -import com.android.systemui.res.R.string.kg_fp_locked_out -import com.android.systemui.res.R.string.kg_fp_not_recognized -import com.android.systemui.res.R.string.kg_primary_auth_locked_out_password -import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pattern -import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pin -import com.android.systemui.res.R.string.kg_prompt_after_dpm_lock -import com.android.systemui.res.R.string.kg_prompt_after_update_password -import com.android.systemui.res.R.string.kg_prompt_after_update_pattern -import com.android.systemui.res.R.string.kg_prompt_after_update_pin -import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_password -import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pattern -import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pin -import com.android.systemui.res.R.string.kg_prompt_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_password_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_pattern_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_pin_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_reason_restart_password -import com.android.systemui.res.R.string.kg_prompt_reason_restart_pattern -import com.android.systemui.res.R.string.kg_prompt_reason_restart_pin -import com.android.systemui.res.R.string.kg_prompt_unattended_update -import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown -import com.android.systemui.res.R.string.kg_trust_agent_disabled -import com.android.systemui.res.R.string.kg_unlock_with_password_or_fp -import com.android.systemui.res.R.string.kg_unlock_with_pattern_or_fp -import com.android.systemui.res.R.string.kg_unlock_with_pin_or_fp -import com.android.systemui.res.R.string.kg_wrong_input_try_fp_suggestion -import com.android.systemui.res.R.string.kg_wrong_password_try_again -import com.android.systemui.res.R.string.kg_wrong_pattern_try_again -import com.android.systemui.res.R.string.kg_wrong_pin_try_again -import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import com.android.systemui.bouncer.shared.model.Message -import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository -import javax.inject.Inject - -@SysUISingleton -class BouncerMessageFactory -@Inject -constructor( - private val biometricSettingsRepository: BiometricSettingsRepository, - private val securityModel: KeyguardSecurityModel, -) { - - fun createFromPromptReason( - @BouncerPromptReason reason: Int, - userId: Int, - secondaryMsgOverride: String? = null - ): BouncerMessageModel? { - val pair = - getBouncerMessage( - reason, - securityModel.getSecurityMode(userId), - biometricSettingsRepository.isFingerprintAuthCurrentlyAllowed.value - ) - return pair?.let { - BouncerMessageModel( - message = Message(messageResId = pair.first, animate = false), - secondaryMessage = - secondaryMsgOverride?.let { - Message(message = secondaryMsgOverride, animate = false) - } - ?: Message(messageResId = pair.second, animate = false) - ) - } - } - - /** - * Helper method that provides the relevant bouncer message that should be shown for different - * scenarios indicated by [reason]. [securityMode] & [fpAuthIsAllowed] parameters are used to - * provide a more specific message. - */ - private fun getBouncerMessage( - @BouncerPromptReason reason: Int, - securityMode: SecurityMode, - fpAuthIsAllowed: Boolean = false - ): Pair<Int, Int>? { - return when (reason) { - // Primary auth locked out - PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT -> primaryAuthLockedOut(securityMode) - // Primary auth required reasons - PROMPT_REASON_RESTART -> authRequiredAfterReboot(securityMode) - PROMPT_REASON_TIMEOUT -> authRequiredAfterPrimaryAuthTimeout(securityMode) - PROMPT_REASON_DEVICE_ADMIN -> authRequiredAfterAdminLockdown(securityMode) - PROMPT_REASON_USER_REQUEST -> authRequiredAfterUserLockdown(securityMode) - PROMPT_REASON_PREPARE_FOR_UPDATE -> authRequiredForUnattendedUpdate(securityMode) - PROMPT_REASON_RESTART_FOR_MAINLINE_UPDATE -> authRequiredForMainlineUpdate(securityMode) - PROMPT_REASON_FINGERPRINT_LOCKED_OUT -> fingerprintUnlockUnavailable(securityMode) - PROMPT_REASON_AFTER_LOCKOUT -> biometricLockout(securityMode) - // Non strong auth not available reasons - PROMPT_REASON_FACE_LOCKED_OUT -> - if (fpAuthIsAllowed) faceLockedOutButFingerprintAvailable(securityMode) - else faceLockedOut(securityMode) - PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT -> - if (fpAuthIsAllowed) nonStrongAuthTimeoutWithFingerprintAllowed(securityMode) - else nonStrongAuthTimeout(securityMode) - PROMPT_REASON_TRUSTAGENT_EXPIRED -> - if (fpAuthIsAllowed) trustAgentDisabledWithFingerprintAllowed(securityMode) - else trustAgentDisabled(securityMode) - // Auth incorrect input reasons. - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT -> - if (fpAuthIsAllowed) incorrectSecurityInputWithFingerprint(securityMode) - else incorrectSecurityInput(securityMode) - PROMPT_REASON_INCORRECT_FACE_INPUT -> - if (fpAuthIsAllowed) incorrectFaceInputWithFingerprintAllowed(securityMode) - else incorrectFaceInput(securityMode) - PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT -> incorrectFingerprintInput(securityMode) - // Default message - PROMPT_REASON_DEFAULT -> - if (fpAuthIsAllowed) defaultMessageWithFingerprint(securityMode) - else defaultMessage(securityMode) - else -> null - } - } - - fun emptyMessage(): BouncerMessageModel = - BouncerMessageModel(Message(message = ""), Message(message = "")) -} - -@Retention(AnnotationRetention.SOURCE) -@IntDef( - PROMPT_REASON_TIMEOUT, - PROMPT_REASON_DEVICE_ADMIN, - PROMPT_REASON_USER_REQUEST, - PROMPT_REASON_AFTER_LOCKOUT, - PROMPT_REASON_PREPARE_FOR_UPDATE, - PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT, - PROMPT_REASON_TRUSTAGENT_EXPIRED, - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - PROMPT_REASON_INCORRECT_FACE_INPUT, - PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT, - PROMPT_REASON_FACE_LOCKED_OUT, - PROMPT_REASON_FINGERPRINT_LOCKED_OUT, - PROMPT_REASON_DEFAULT, - PROMPT_REASON_NONE, - PROMPT_REASON_RESTART, - PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT, - PROMPT_REASON_RESTART_FOR_MAINLINE_UPDATE, -) -annotation class BouncerPromptReason - -private fun defaultMessage(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, 0) - SecurityMode.Password -> Pair(keyguard_enter_password, 0) - SecurityMode.PIN -> Pair(keyguard_enter_pin, 0) - else -> Pair(0, 0) - } -} - -private fun defaultMessageWithFingerprint(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, 0) - SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, 0) - SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, 0) - else -> Pair(0, 0) - } -} - -private fun incorrectSecurityInput(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_wrong_pattern_try_again, 0) - SecurityMode.Password -> Pair(kg_wrong_password_try_again, 0) - SecurityMode.PIN -> Pair(kg_wrong_pin_try_again, 0) - else -> Pair(0, 0) - } -} - -private fun incorrectSecurityInputWithFingerprint(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_wrong_pattern_try_again, kg_wrong_input_try_fp_suggestion) - SecurityMode.Password -> Pair(kg_wrong_password_try_again, kg_wrong_input_try_fp_suggestion) - SecurityMode.PIN -> Pair(kg_wrong_pin_try_again, kg_wrong_input_try_fp_suggestion) - else -> Pair(0, 0) - } -} - -private fun incorrectFingerprintInput(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_pattern) - SecurityMode.Password -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_password) - SecurityMode.PIN -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_pin) - else -> Pair(0, 0) - } -} - -private fun incorrectFaceInput(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_pattern) - SecurityMode.Password -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_password) - SecurityMode.PIN -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_pin) - else -> Pair(0, 0) - } -} - -private fun incorrectFaceInputWithFingerprintAllowed(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, bouncer_face_not_recognized) - SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, bouncer_face_not_recognized) - SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, bouncer_face_not_recognized) - else -> Pair(0, 0) - } -} - -private fun biometricLockout(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_bio_too_many_attempts_pattern) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_bio_too_many_attempts_password) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_bio_too_many_attempts_pin) - else -> Pair(0, 0) - } -} - -private fun authRequiredAfterReboot(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_reason_restart_pattern) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_reason_restart_password) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_reason_restart_pin) - else -> Pair(0, 0) - } -} - -private fun authRequiredAfterAdminLockdown(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_dpm_lock) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_after_dpm_lock) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock) - else -> Pair(0, 0) - } -} - -private fun authRequiredAfterUserLockdown(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_user_lockdown_pattern) - SecurityMode.Password -> - Pair(keyguard_enter_password, kg_prompt_after_user_lockdown_password) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_user_lockdown_pin) - else -> Pair(0, 0) - } -} - -private fun authRequiredForUnattendedUpdate(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_unattended_update) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_unattended_update) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_unattended_update) - else -> Pair(0, 0) - } -} - -private fun authRequiredForMainlineUpdate(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_update_pattern) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_after_update_password) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_update_pin) - else -> Pair(0, 0) - } -} - -private fun authRequiredAfterPrimaryAuthTimeout(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_pattern_auth_timeout) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_password_auth_timeout) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_pin_auth_timeout) - else -> Pair(0, 0) - } -} - -private fun nonStrongAuthTimeout(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_auth_timeout) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_auth_timeout) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_auth_timeout) - else -> Pair(0, 0) - } -} - -private fun nonStrongAuthTimeoutWithFingerprintAllowed(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_prompt_auth_timeout) - SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_prompt_auth_timeout) - SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_prompt_auth_timeout) - else -> Pair(0, 0) - } -} - -private fun faceLockedOut(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_face_locked_out) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_face_locked_out) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_face_locked_out) - else -> Pair(0, 0) - } -} - -private fun faceLockedOutButFingerprintAvailable(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_face_locked_out) - SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_face_locked_out) - SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_face_locked_out) - else -> Pair(0, 0) - } -} - -private fun fingerprintUnlockUnavailable(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_fp_locked_out) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_fp_locked_out) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_fp_locked_out) - else -> Pair(0, 0) - } -} - -private fun trustAgentDisabled(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_trust_agent_disabled) - SecurityMode.Password -> Pair(keyguard_enter_password, kg_trust_agent_disabled) - SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_trust_agent_disabled) - else -> Pair(0, 0) - } -} - -private fun trustAgentDisabledWithFingerprintAllowed(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_trust_agent_disabled) - SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_trust_agent_disabled) - SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_trust_agent_disabled) - else -> Pair(0, 0) - } -} - -private fun primaryAuthLockedOut(securityMode: SecurityMode): Pair<Int, Int> { - return when (securityMode) { - SecurityMode.Pattern -> - Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_pattern) - SecurityMode.Password -> - Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_password) - SecurityMode.PIN -> - Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_pin) - else -> Pair(0, 0) - } -} diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/BouncerMessageRepository.kt b/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/BouncerMessageRepository.kt index 97c1bdb180a16a79e26d6410ce2934bdee7ff020..094dc0a33865bfd900645550a6a1d149a98ba36d 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/BouncerMessageRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/BouncerMessageRepository.kt @@ -16,315 +16,26 @@ package com.android.systemui.bouncer.data.repository -import android.hardware.biometrics.BiometricSourceType -import android.hardware.biometrics.BiometricSourceType.FACE -import android.hardware.biometrics.BiometricSourceType.FINGERPRINT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEVICE_ADMIN -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_FACE_LOCKED_OUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_FINGERPRINT_LOCKED_OUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_FACE_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NONE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PREPARE_FOR_UPDATE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART_FOR_MAINLINE_UPDATE -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TRUSTAGENT_EXPIRED -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST -import com.android.keyguard.KeyguardUpdateMonitor -import com.android.keyguard.KeyguardUpdateMonitorCallback -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging -import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.flags.SystemPropertiesHelper -import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository -import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository -import com.android.systemui.keyguard.data.repository.TrustRepository -import com.android.systemui.user.data.repository.UserRepository import javax.inject.Inject -import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onStart /** Provide different sources of messages that needs to be shown on the bouncer. */ interface BouncerMessageRepository { - /** - * Messages that are shown in response to the incorrect security attempts on the bouncer and - * primary authentication method being locked out, along with countdown messages before primary - * auth is active again. - */ - val primaryAuthMessage: Flow<BouncerMessageModel?> + val bouncerMessage: Flow<BouncerMessageModel> - /** - * Help messages that are shown to the user on how to successfully perform authentication using - * face. - */ - val faceAcquisitionMessage: Flow<BouncerMessageModel?> - - /** - * Help messages that are shown to the user on how to successfully perform authentication using - * fingerprint. - */ - val fingerprintAcquisitionMessage: Flow<BouncerMessageModel?> - - /** Custom message that is displayed when the bouncer is being shown to launch an app. */ - val customMessage: Flow<BouncerMessageModel?> - - /** - * Messages that are shown in response to biometric authentication attempts through face or - * fingerprint. - */ - val biometricAuthMessage: Flow<BouncerMessageModel?> - - /** Messages that are shown when certain auth flags are set. */ - val authFlagsMessage: Flow<BouncerMessageModel?> - - /** Messages that are show after biometrics are locked out temporarily or permanently */ - val biometricLockedOutMessage: Flow<BouncerMessageModel?> - - /** Set the value for [primaryAuthMessage] */ - fun setPrimaryAuthMessage(value: BouncerMessageModel?) - - /** Set the value for [faceAcquisitionMessage] */ - fun setFaceAcquisitionMessage(value: BouncerMessageModel?) - /** Set the value for [fingerprintAcquisitionMessage] */ - fun setFingerprintAcquisitionMessage(value: BouncerMessageModel?) - - /** Set the value for [customMessage] */ - fun setCustomMessage(value: BouncerMessageModel?) - - /** - * Clear any previously set messages for [primaryAuthMessage], [faceAcquisitionMessage], - * [fingerprintAcquisitionMessage] & [customMessage] - */ - fun clearMessage() + fun setMessage(message: BouncerMessageModel) } -private const val SYS_BOOT_REASON_PROP = "sys.boot.reason.last" -private const val REBOOT_MAINLINE_UPDATE = "reboot,mainline_update" - @SysUISingleton -class BouncerMessageRepositoryImpl -@Inject -constructor( - trustRepository: TrustRepository, - biometricSettingsRepository: BiometricSettingsRepository, - updateMonitor: KeyguardUpdateMonitor, - private val bouncerMessageFactory: BouncerMessageFactory, - private val userRepository: UserRepository, - private val systemPropertiesHelper: SystemPropertiesHelper, - fingerprintAuthRepository: DeviceEntryFingerprintAuthRepository, -) : BouncerMessageRepository { - - private val isAnyBiometricsEnabledAndEnrolled = - or( - biometricSettingsRepository.isFaceAuthEnrolledAndEnabled, - biometricSettingsRepository.isFingerprintEnrolledAndEnabled, - ) - - private val wasRebootedForMainlineUpdate - get() = systemPropertiesHelper.get(SYS_BOOT_REASON_PROP) == REBOOT_MAINLINE_UPDATE - - private val authFlagsBasedPromptReason: Flow<Int> = - combine( - biometricSettingsRepository.authenticationFlags, - trustRepository.isCurrentUserTrustManaged, - isAnyBiometricsEnabledAndEnrolled, - ::Triple - ) - .map { (flags, isTrustManaged, biometricsEnrolledAndEnabled) -> - val trustOrBiometricsAvailable = (isTrustManaged || biometricsEnrolledAndEnabled) - return@map if ( - trustOrBiometricsAvailable && flags.isPrimaryAuthRequiredAfterReboot - ) { - if (wasRebootedForMainlineUpdate) PROMPT_REASON_RESTART_FOR_MAINLINE_UPDATE - else PROMPT_REASON_RESTART - } else if (trustOrBiometricsAvailable && flags.isPrimaryAuthRequiredAfterTimeout) { - PROMPT_REASON_TIMEOUT - } else if (flags.isPrimaryAuthRequiredAfterDpmLockdown) { - PROMPT_REASON_DEVICE_ADMIN - } else if (isTrustManaged && flags.someAuthRequiredAfterUserRequest) { - PROMPT_REASON_TRUSTAGENT_EXPIRED - } else if (isTrustManaged && flags.someAuthRequiredAfterTrustAgentExpired) { - PROMPT_REASON_TRUSTAGENT_EXPIRED - } else if (trustOrBiometricsAvailable && flags.isInUserLockdown) { - PROMPT_REASON_USER_REQUEST - } else if ( - trustOrBiometricsAvailable && flags.primaryAuthRequiredForUnattendedUpdate - ) { - PROMPT_REASON_PREPARE_FOR_UPDATE - } else if ( - trustOrBiometricsAvailable && - flags.strongerAuthRequiredAfterNonStrongBiometricsTimeout - ) { - PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT - } else { - PROMPT_REASON_NONE - } - } - - private val biometricAuthReason: Flow<Int> = - conflatedCallbackFlow { - val callback = - object : KeyguardUpdateMonitorCallback() { - override fun onBiometricAuthFailed( - biometricSourceType: BiometricSourceType? - ) { - val promptReason = - if (biometricSourceType == FINGERPRINT) - PROMPT_REASON_INCORRECT_FINGERPRINT_INPUT - else if ( - biometricSourceType == FACE && !updateMonitor.isFaceLockedOut - ) { - PROMPT_REASON_INCORRECT_FACE_INPUT - } else PROMPT_REASON_NONE - trySendWithFailureLogging(promptReason, TAG, "onBiometricAuthFailed") - } - - override fun onBiometricsCleared() { - trySendWithFailureLogging( - PROMPT_REASON_NONE, - TAG, - "onBiometricsCleared" - ) - } - - override fun onBiometricAcquired( - biometricSourceType: BiometricSourceType?, - acquireInfo: Int - ) { - trySendWithFailureLogging( - PROMPT_REASON_NONE, - TAG, - "clearBiometricPrompt for new auth session." - ) - } - - override fun onBiometricAuthenticated( - userId: Int, - biometricSourceType: BiometricSourceType?, - isStrongBiometric: Boolean - ) { - trySendWithFailureLogging( - PROMPT_REASON_NONE, - TAG, - "onBiometricAuthenticated" - ) - } - } - updateMonitor.registerCallback(callback) - awaitClose { updateMonitor.removeCallback(callback) } - } - .distinctUntilChanged() - - private val _primaryAuthMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val primaryAuthMessage: Flow<BouncerMessageModel?> = _primaryAuthMessage +class BouncerMessageRepositoryImpl @Inject constructor() : BouncerMessageRepository { - private val _faceAcquisitionMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val faceAcquisitionMessage: Flow<BouncerMessageModel?> = _faceAcquisitionMessage + private val _bouncerMessage = MutableStateFlow(BouncerMessageModel()) + override val bouncerMessage: Flow<BouncerMessageModel> = _bouncerMessage - private val _fingerprintAcquisitionMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val fingerprintAcquisitionMessage: Flow<BouncerMessageModel?> = - _fingerprintAcquisitionMessage - - private val _customMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val customMessage: Flow<BouncerMessageModel?> = _customMessage - - override val biometricAuthMessage: Flow<BouncerMessageModel?> = - biometricAuthReason - .map { - if (it == PROMPT_REASON_NONE) null - else - bouncerMessageFactory.createFromPromptReason( - it, - userRepository.getSelectedUserInfo().id - ) - } - .onStart { emit(null) } - .distinctUntilChanged() - - override val authFlagsMessage: Flow<BouncerMessageModel?> = - authFlagsBasedPromptReason - .map { - if (it == PROMPT_REASON_NONE) null - else - bouncerMessageFactory.createFromPromptReason( - it, - userRepository.getSelectedUserInfo().id - ) - } - .onStart { emit(null) } - .distinctUntilChanged() - - // TODO (b/262838215): Replace with DeviceEntryFaceAuthRepository when the new face auth system - // has been launched. - private val faceLockedOut: Flow<Boolean> = conflatedCallbackFlow { - val callback = - object : KeyguardUpdateMonitorCallback() { - override fun onLockedOutStateChanged(biometricSourceType: BiometricSourceType?) { - if (biometricSourceType == FACE) { - trySendWithFailureLogging( - updateMonitor.isFaceLockedOut, - TAG, - "face lock out state changed." - ) - } - } - } - updateMonitor.registerCallback(callback) - trySendWithFailureLogging(updateMonitor.isFaceLockedOut, TAG, "face lockout initial value") - awaitClose { updateMonitor.removeCallback(callback) } - } - - override val biometricLockedOutMessage: Flow<BouncerMessageModel?> = - combine(fingerprintAuthRepository.isLockedOut, faceLockedOut) { fp, face -> - return@combine if (fp) { - bouncerMessageFactory.createFromPromptReason( - PROMPT_REASON_FINGERPRINT_LOCKED_OUT, - userRepository.getSelectedUserInfo().id - ) - } else if (face) { - bouncerMessageFactory.createFromPromptReason( - PROMPT_REASON_FACE_LOCKED_OUT, - userRepository.getSelectedUserInfo().id - ) - } else null - } - - override fun setPrimaryAuthMessage(value: BouncerMessageModel?) { - _primaryAuthMessage.value = value - } - - override fun setFaceAcquisitionMessage(value: BouncerMessageModel?) { - _faceAcquisitionMessage.value = value - } - - override fun setFingerprintAcquisitionMessage(value: BouncerMessageModel?) { - _fingerprintAcquisitionMessage.value = value - } - - override fun setCustomMessage(value: BouncerMessageModel?) { - _customMessage.value = value - } - - override fun clearMessage() { - _fingerprintAcquisitionMessage.value = null - _faceAcquisitionMessage.value = null - _primaryAuthMessage.value = null - _customMessage.value = null - } - - companion object { - const val TAG = "BouncerDetailedMessageRepository" + override fun setMessage(message: BouncerMessageModel) { + _bouncerMessage.value = message } } - -private fun or(flow: Flow<Boolean>, anotherFlow: Flow<Boolean>) = - flow.combine(anotherFlow) { a, b -> a || b } diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageAuditLogger.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageAuditLogger.kt index 497747f59034388992918828a08c44e43af9b0fe..aecfe1d2c9ada533f3ecc1e46f29fc6538095930 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageAuditLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageAuditLogger.kt @@ -16,16 +16,13 @@ package com.android.systemui.bouncer.domain.interactor -import android.os.Build import android.util.Log import com.android.systemui.CoreStartable import com.android.systemui.bouncer.data.repository.BouncerMessageRepository -import com.android.systemui.bouncer.shared.model.BouncerMessageModel import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import javax.inject.Inject import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch private val TAG = BouncerMessageAuditLogger::class.simpleName!! @@ -37,24 +34,8 @@ class BouncerMessageAuditLogger constructor( @Application private val scope: CoroutineScope, private val repository: BouncerMessageRepository, - private val interactor: BouncerMessageInteractor, ) : CoreStartable { override fun start() { - if (Build.isDebuggable()) { - collectAndLog(repository.biometricAuthMessage, "biometricMessage: ") - collectAndLog(repository.primaryAuthMessage, "primaryAuthMessage: ") - collectAndLog(repository.customMessage, "customMessage: ") - collectAndLog(repository.faceAcquisitionMessage, "faceAcquisitionMessage: ") - collectAndLog( - repository.fingerprintAcquisitionMessage, - "fingerprintAcquisitionMessage: " - ) - collectAndLog(repository.authFlagsMessage, "authFlagsMessage: ") - collectAndLog(interactor.bouncerMessage, "interactor.bouncerMessage: ") - } - } - - private fun collectAndLog(flow: Flow<BouncerMessageModel?>, context: String) { - scope.launch { flow.collect { Log.d(TAG, context + it) } } + scope.launch { repository.bouncerMessage.collect { Log.d(TAG, "bouncerMessage: $it") } } } } diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt index fe01d081e60caaf237ee866e9a7ed610db2f9fb1..f612f9afed7740ac31dde6c86914b8cacf112098 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt @@ -16,55 +16,234 @@ package com.android.systemui.bouncer.domain.interactor +import android.hardware.biometrics.BiometricSourceType import android.os.CountDownTimer -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEFAULT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory +import com.android.keyguard.KeyguardSecurityModel +import com.android.keyguard.KeyguardSecurityModel.SecurityMode +import com.android.keyguard.KeyguardUpdateMonitor +import com.android.keyguard.KeyguardUpdateMonitorCallback +import com.android.systemui.biometrics.data.repository.FacePropertyRepository +import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.bouncer.data.repository.BouncerMessageRepository import com.android.systemui.bouncer.shared.model.BouncerMessageModel +import com.android.systemui.bouncer.shared.model.Message import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags.REVAMPED_BOUNCER_MESSAGES +import com.android.systemui.flags.SystemPropertiesHelper +import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository +import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.TrustRepository +import com.android.systemui.res.R.string.bouncer_face_not_recognized +import com.android.systemui.res.R.string.keyguard_enter_password +import com.android.systemui.res.R.string.keyguard_enter_pattern +import com.android.systemui.res.R.string.keyguard_enter_pin +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_password +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pattern +import com.android.systemui.res.R.string.kg_bio_too_many_attempts_pin +import com.android.systemui.res.R.string.kg_bio_try_again_or_password +import com.android.systemui.res.R.string.kg_bio_try_again_or_pattern +import com.android.systemui.res.R.string.kg_bio_try_again_or_pin +import com.android.systemui.res.R.string.kg_face_locked_out +import com.android.systemui.res.R.string.kg_fp_not_recognized +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_password +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pattern +import com.android.systemui.res.R.string.kg_primary_auth_locked_out_pin +import com.android.systemui.res.R.string.kg_prompt_after_dpm_lock +import com.android.systemui.res.R.string.kg_prompt_after_update_password +import com.android.systemui.res.R.string.kg_prompt_after_update_pattern +import com.android.systemui.res.R.string.kg_prompt_after_update_pin +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_password +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pattern +import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pin +import com.android.systemui.res.R.string.kg_prompt_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_password_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_pattern_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_pin_auth_timeout +import com.android.systemui.res.R.string.kg_prompt_reason_restart_password +import com.android.systemui.res.R.string.kg_prompt_reason_restart_pattern +import com.android.systemui.res.R.string.kg_prompt_reason_restart_pin +import com.android.systemui.res.R.string.kg_prompt_unattended_update +import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown +import com.android.systemui.res.R.string.kg_trust_agent_disabled +import com.android.systemui.res.R.string.kg_unlock_with_password_or_fp +import com.android.systemui.res.R.string.kg_unlock_with_pattern_or_fp +import com.android.systemui.res.R.string.kg_unlock_with_pin_or_fp +import com.android.systemui.res.R.string.kg_wrong_input_try_fp_suggestion +import com.android.systemui.res.R.string.kg_wrong_password_try_again +import com.android.systemui.res.R.string.kg_wrong_pattern_try_again +import com.android.systemui.res.R.string.kg_wrong_pin_try_again import com.android.systemui.user.data.repository.UserRepository +import com.android.systemui.util.kotlin.Quint import javax.inject.Inject import kotlin.math.roundToInt +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn + +private const val SYS_BOOT_REASON_PROP = "sys.boot.reason.last" +private const val REBOOT_MAINLINE_UPDATE = "reboot,mainline_update" +private const val TAG = "BouncerMessageInteractor" @SysUISingleton class BouncerMessageInteractor @Inject constructor( private val repository: BouncerMessageRepository, - private val factory: BouncerMessageFactory, private val userRepository: UserRepository, private val countDownTimerUtil: CountDownTimerUtil, private val featureFlags: FeatureFlags, + private val updateMonitor: KeyguardUpdateMonitor, + trustRepository: TrustRepository, + biometricSettingsRepository: BiometricSettingsRepository, + private val systemPropertiesHelper: SystemPropertiesHelper, + primaryBouncerInteractor: PrimaryBouncerInteractor, + @Application private val applicationScope: CoroutineScope, + private val facePropertyRepository: FacePropertyRepository, + deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository, + faceAuthRepository: DeviceEntryFaceAuthRepository, + private val securityModel: KeyguardSecurityModel, ) { + + private val isFingerprintAuthCurrentlyAllowed = + deviceEntryFingerprintAuthRepository.isLockedOut + .isFalse() + .and(biometricSettingsRepository.isFingerprintAuthCurrentlyAllowed) + .stateIn(applicationScope, SharingStarted.Eagerly, false) + + private val currentSecurityMode + get() = securityModel.getSecurityMode(currentUserId) + private val currentUserId + get() = userRepository.getSelectedUserInfo().id + + private val kumCallback = + object : KeyguardUpdateMonitorCallback() { + override fun onBiometricAuthFailed(biometricSourceType: BiometricSourceType?) { + repository.setMessage( + when (biometricSourceType) { + BiometricSourceType.FINGERPRINT -> + incorrectFingerprintInput(currentSecurityMode) + BiometricSourceType.FACE -> + incorrectFaceInput( + currentSecurityMode, + isFingerprintAuthCurrentlyAllowed.value + ) + else -> + defaultMessage( + currentSecurityMode, + isFingerprintAuthCurrentlyAllowed.value + ) + } + ) + } + + override fun onBiometricAcquired( + biometricSourceType: BiometricSourceType?, + acquireInfo: Int + ) { + super.onBiometricAcquired(biometricSourceType, acquireInfo) + } + + override fun onBiometricAuthenticated( + userId: Int, + biometricSourceType: BiometricSourceType?, + isStrongBiometric: Boolean + ) { + repository.setMessage(defaultMessage) + } + } + + private val isAnyBiometricsEnabledAndEnrolled = + biometricSettingsRepository.isFaceAuthEnrolledAndEnabled.or( + biometricSettingsRepository.isFingerprintEnrolledAndEnabled + ) + + private val wasRebootedForMainlineUpdate + get() = systemPropertiesHelper.get(SYS_BOOT_REASON_PROP) == REBOOT_MAINLINE_UPDATE + + private val isFaceAuthClass3 + get() = facePropertyRepository.sensorInfo.value?.strength == SensorStrength.STRONG + + private val initialBouncerMessage: Flow<BouncerMessageModel> = + combine( + biometricSettingsRepository.authenticationFlags, + trustRepository.isCurrentUserTrustManaged, + isAnyBiometricsEnabledAndEnrolled, + deviceEntryFingerprintAuthRepository.isLockedOut, + faceAuthRepository.isLockedOut, + ::Quint + ) + .map { (flags, _, biometricsEnrolledAndEnabled, fpLockedOut, faceLockedOut) -> + val isTrustUsuallyManaged = trustRepository.isCurrentUserTrustUsuallyManaged.value + val trustOrBiometricsAvailable = + (isTrustUsuallyManaged || biometricsEnrolledAndEnabled) + return@map if ( + trustOrBiometricsAvailable && flags.isPrimaryAuthRequiredAfterReboot + ) { + if (wasRebootedForMainlineUpdate) { + authRequiredForMainlineUpdate(currentSecurityMode) + } else { + authRequiredAfterReboot(currentSecurityMode) + } + } else if (trustOrBiometricsAvailable && flags.isPrimaryAuthRequiredAfterTimeout) { + authRequiredAfterPrimaryAuthTimeout(currentSecurityMode) + } else if (flags.isPrimaryAuthRequiredAfterDpmLockdown) { + authRequiredAfterAdminLockdown(currentSecurityMode) + } else if ( + trustOrBiometricsAvailable && flags.primaryAuthRequiredForUnattendedUpdate + ) { + authRequiredForUnattendedUpdate(currentSecurityMode) + } else if (fpLockedOut) { + class3AuthLockedOut(currentSecurityMode) + } else if (faceLockedOut) { + if (isFaceAuthClass3) { + class3AuthLockedOut(currentSecurityMode) + } else { + faceLockedOut(currentSecurityMode, isFingerprintAuthCurrentlyAllowed.value) + } + } else if ( + trustOrBiometricsAvailable && + flags.strongerAuthRequiredAfterNonStrongBiometricsTimeout + ) { + nonStrongAuthTimeout( + currentSecurityMode, + isFingerprintAuthCurrentlyAllowed.value + ) + } else if (isTrustUsuallyManaged && flags.someAuthRequiredAfterUserRequest) { + trustAgentDisabled(currentSecurityMode, isFingerprintAuthCurrentlyAllowed.value) + } else if (isTrustUsuallyManaged && flags.someAuthRequiredAfterTrustAgentExpired) { + trustAgentDisabled(currentSecurityMode, isFingerprintAuthCurrentlyAllowed.value) + } else if (trustOrBiometricsAvailable && flags.isInUserLockdown) { + authRequiredAfterUserLockdown(currentSecurityMode) + } else { + defaultMessage + } + } + fun onPrimaryAuthLockedOut(secondsBeforeLockoutReset: Long) { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return val callback = object : CountDownTimerCallback { override fun onFinish() { - repository.clearMessage() + repository.setMessage(defaultMessage) } override fun onTick(millisUntilFinished: Long) { val secondsRemaining = (millisUntilFinished / 1000.0).roundToInt() - val message = - factory.createFromPromptReason( - reason = PROMPT_REASON_PRIMARY_AUTH_LOCKED_OUT, - userId = userRepository.getSelectedUserInfo().id - ) - message?.message?.animate = false - message?.message?.formatterArgs = + val message = primaryAuthLockedOut(currentSecurityMode) + message.message?.animate = false + message.message?.formatterArgs = mutableMapOf<String, Any>(Pair("count", secondsRemaining)) - repository.setPrimaryAuthMessage(message) + repository.setMessage(message) } } countDownTimerUtil.startNewTimer(secondsBeforeLockoutReset * 1000, 1000, callback) @@ -73,104 +252,58 @@ constructor( fun onPrimaryAuthIncorrectAttempt() { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return - repository.setPrimaryAuthMessage( - factory.createFromPromptReason( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - userRepository.getSelectedUserInfo().id - ) + repository.setMessage( + incorrectSecurityInput(currentSecurityMode, isFingerprintAuthCurrentlyAllowed.value) ) } fun setFingerprintAcquisitionMessage(value: String?) { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return - - repository.setFingerprintAcquisitionMessage( - if (value != null) { - factory.createFromPromptReason( - PROMPT_REASON_DEFAULT, - userRepository.getSelectedUserInfo().id, - secondaryMsgOverride = value - ) - } else { - null - } + repository.setMessage( + defaultMessage(currentSecurityMode, value, isFingerprintAuthCurrentlyAllowed.value) ) } fun setFaceAcquisitionMessage(value: String?) { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return - - repository.setFaceAcquisitionMessage( - if (value != null) { - factory.createFromPromptReason( - PROMPT_REASON_DEFAULT, - userRepository.getSelectedUserInfo().id, - secondaryMsgOverride = value - ) - } else { - null - } + repository.setMessage( + defaultMessage(currentSecurityMode, value, isFingerprintAuthCurrentlyAllowed.value) ) } fun setCustomMessage(value: String?) { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return - repository.setCustomMessage( - if (value != null) { - factory.createFromPromptReason( - PROMPT_REASON_DEFAULT, - userRepository.getSelectedUserInfo().id, - secondaryMsgOverride = value - ) - } else { - null - } + repository.setMessage( + defaultMessage(currentSecurityMode, value, isFingerprintAuthCurrentlyAllowed.value) ) } + private val defaultMessage: BouncerMessageModel + get() = defaultMessage(currentSecurityMode, isFingerprintAuthCurrentlyAllowed.value) + fun onPrimaryBouncerUserInput() { if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return - - repository.clearMessage() + repository.setMessage(defaultMessage) } - fun onBouncerBeingHidden() { - if (!featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) return + val bouncerMessage = repository.bouncerMessage - repository.clearMessage() - } + init { + updateMonitor.registerCallback(kumCallback) - private fun firstNonNullMessage( - oneMessageModel: Flow<BouncerMessageModel?>, - anotherMessageModel: Flow<BouncerMessageModel?> - ): Flow<BouncerMessageModel?> { - return oneMessageModel.combine(anotherMessageModel) { a, b -> a ?: b } + combine(primaryBouncerInteractor.isShowing, initialBouncerMessage) { showing, bouncerMessage + -> + if (showing) { + bouncerMessage + } else { + null + } + } + .filterNotNull() + .onEach { repository.setMessage(it) } + .launchIn(applicationScope) } - - // Null if feature flag is enabled which gets ignored always or empty bouncer message model that - // always maps to an empty string. - private fun nullOrEmptyMessage() = - flowOf( - if (featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) null else factory.emptyMessage() - ) - - val bouncerMessage = - listOf( - nullOrEmptyMessage(), - repository.primaryAuthMessage, - repository.biometricAuthMessage, - repository.fingerprintAcquisitionMessage, - repository.faceAcquisitionMessage, - repository.customMessage, - repository.authFlagsMessage, - repository.biometricLockedOutMessage, - userRepository.selectedUserInfo.map { - factory.createFromPromptReason(PROMPT_REASON_DEFAULT, it.id) - }, - ) - .reduce(::firstNonNullMessage) - .distinctUntilChanged() } interface CountDownTimerCallback { @@ -199,3 +332,272 @@ open class CountDownTimerUtil @Inject constructor() { .start() } } + +private fun Flow<Boolean>.or(anotherFlow: Flow<Boolean>) = + this.combine(anotherFlow) { a, b -> a || b } + +private fun Flow<Boolean>.and(anotherFlow: Flow<Boolean>) = + this.combine(anotherFlow) { a, b -> a && b } + +private fun Flow<Boolean>.isFalse() = this.map { !it } + +private fun defaultMessage( + securityMode: SecurityMode, + secondaryMessage: String?, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return BouncerMessageModel( + message = + Message( + messageResId = defaultMessage(securityMode, fpAuthIsAllowed).message?.messageResId, + animate = false + ), + secondaryMessage = Message(message = secondaryMessage, animate = false) + ) +} + +private fun defaultMessage( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) { + defaultMessageWithFingerprint(securityMode) + } else + when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, 0) + SecurityMode.Password -> Pair(keyguard_enter_password, 0) + SecurityMode.PIN -> Pair(keyguard_enter_pin, 0) + else -> Pair(0, 0) + }.toMessage() +} + +private fun defaultMessageWithFingerprint(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, 0) + SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, 0) + SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, 0) + else -> Pair(0, 0) + }.toMessage() +} + +private fun incorrectSecurityInput( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) { + incorrectSecurityInputWithFingerprint(securityMode) + } else + when (securityMode) { + SecurityMode.Pattern -> Pair(kg_wrong_pattern_try_again, 0) + SecurityMode.Password -> Pair(kg_wrong_password_try_again, 0) + SecurityMode.PIN -> Pair(kg_wrong_pin_try_again, 0) + else -> Pair(0, 0) + }.toMessage() +} + +private fun incorrectSecurityInputWithFingerprint(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_wrong_pattern_try_again, kg_wrong_input_try_fp_suggestion) + SecurityMode.Password -> Pair(kg_wrong_password_try_again, kg_wrong_input_try_fp_suggestion) + SecurityMode.PIN -> Pair(kg_wrong_pin_try_again, kg_wrong_input_try_fp_suggestion) + else -> Pair(0, 0) + }.toMessage() +} + +private fun incorrectFingerprintInput(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_pattern) + SecurityMode.Password -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_password) + SecurityMode.PIN -> Pair(kg_fp_not_recognized, kg_bio_try_again_or_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun incorrectFaceInput( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) incorrectFaceInputWithFingerprintAllowed(securityMode) + else + when (securityMode) { + SecurityMode.Pattern -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_pattern) + SecurityMode.Password -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_password) + SecurityMode.PIN -> Pair(bouncer_face_not_recognized, kg_bio_try_again_or_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun incorrectFaceInputWithFingerprintAllowed( + securityMode: SecurityMode +): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, bouncer_face_not_recognized) + SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, bouncer_face_not_recognized) + SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, bouncer_face_not_recognized) + else -> Pair(0, 0) + }.toMessage() +} + +private fun biometricLockout(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_bio_too_many_attempts_pattern) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_bio_too_many_attempts_password) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_bio_too_many_attempts_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredAfterReboot(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_reason_restart_pattern) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_reason_restart_password) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_reason_restart_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredAfterAdminLockdown(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_dpm_lock) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_after_dpm_lock) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredAfterUserLockdown(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_user_lockdown_pattern) + SecurityMode.Password -> + Pair(keyguard_enter_password, kg_prompt_after_user_lockdown_password) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_user_lockdown_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredForUnattendedUpdate(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_unattended_update) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_unattended_update) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_unattended_update) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredForMainlineUpdate(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_after_update_pattern) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_after_update_password) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_after_update_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun authRequiredAfterPrimaryAuthTimeout(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_pattern_auth_timeout) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_password_auth_timeout) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_pin_auth_timeout) + else -> Pair(0, 0) + }.toMessage() +} + +private fun nonStrongAuthTimeout( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) { + nonStrongAuthTimeoutWithFingerprintAllowed(securityMode) + } else + when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_prompt_auth_timeout) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_prompt_auth_timeout) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_prompt_auth_timeout) + else -> Pair(0, 0) + }.toMessage() +} + +fun nonStrongAuthTimeoutWithFingerprintAllowed(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_prompt_auth_timeout) + SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_prompt_auth_timeout) + SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_prompt_auth_timeout) + else -> Pair(0, 0) + }.toMessage() +} + +private fun faceLockedOut( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) faceLockedOutButFingerprintAvailable(securityMode) + else + when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_face_locked_out) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_face_locked_out) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_face_locked_out) + else -> Pair(0, 0) + }.toMessage() +} + +private fun faceLockedOutButFingerprintAvailable(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_face_locked_out) + SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_face_locked_out) + SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_face_locked_out) + else -> Pair(0, 0) + }.toMessage() +} + +private fun class3AuthLockedOut(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_bio_too_many_attempts_pattern) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_bio_too_many_attempts_password) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_bio_too_many_attempts_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun trustAgentDisabled( + securityMode: SecurityMode, + fpAuthIsAllowed: Boolean +): BouncerMessageModel { + return if (fpAuthIsAllowed) trustAgentDisabledWithFingerprintAllowed(securityMode) + else + when (securityMode) { + SecurityMode.Pattern -> Pair(keyguard_enter_pattern, kg_trust_agent_disabled) + SecurityMode.Password -> Pair(keyguard_enter_password, kg_trust_agent_disabled) + SecurityMode.PIN -> Pair(keyguard_enter_pin, kg_trust_agent_disabled) + else -> Pair(0, 0) + }.toMessage() +} + +private fun trustAgentDisabledWithFingerprintAllowed( + securityMode: SecurityMode +): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> Pair(kg_unlock_with_pattern_or_fp, kg_trust_agent_disabled) + SecurityMode.Password -> Pair(kg_unlock_with_password_or_fp, kg_trust_agent_disabled) + SecurityMode.PIN -> Pair(kg_unlock_with_pin_or_fp, kg_trust_agent_disabled) + else -> Pair(0, 0) + }.toMessage() +} + +private fun primaryAuthLockedOut(securityMode: SecurityMode): BouncerMessageModel { + return when (securityMode) { + SecurityMode.Pattern -> + Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_pattern) + SecurityMode.Password -> + Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_password) + SecurityMode.PIN -> + Pair(kg_too_many_failed_attempts_countdown, kg_primary_auth_locked_out_pin) + else -> Pair(0, 0) + }.toMessage() +} + +private fun Pair<Int, Int>.toMessage(): BouncerMessageModel { + return BouncerMessageModel( + message = Message(messageResId = this.first, animate = false), + secondaryMessage = Message(messageResId = this.second, animate = false) + ) +} diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/shared/model/BouncerMessageModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/shared/model/BouncerMessageModel.kt index 0e9e96213340dcb1a537c688cba06d014de84bb1..7b169f4b0a57115235a99908218b74a3752b1b05 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/shared/model/BouncerMessageModel.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/shared/model/BouncerMessageModel.kt @@ -22,7 +22,10 @@ import android.content.res.ColorStateList * Represents the message displayed on the bouncer. It has two parts, primary and a secondary * message */ -data class BouncerMessageModel(val message: Message? = null, val secondaryMessage: Message? = null) +data class BouncerMessageModel( + val message: Message? = null, + val secondaryMessage: Message? = null, +) /** * Representation of a single message on the bouncer. It can be either a string or a string resource diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt index e29d6bdf14ef0010d600629d402e3945df0bfbe7..36e5db4c62e0941950e1de24a8ca89cf55be1255 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt @@ -144,7 +144,6 @@ object KeyguardBouncerViewBinder { ) } } else { - bouncerMessageInteractor.onBouncerBeingHidden() securityContainerController.onBouncerVisibilityChanged( /* isVisible= */ false ) diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index a325ee2038380f2d48e9fdcb28969b9a960126cf..283a07b206b96cd2514ea0bb53fc5e353c3052bb 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -38,6 +38,7 @@ import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; import com.android.systemui.biometrics.FingerprintReEnrollNotification; import com.android.systemui.biometrics.UdfpsDisplayModeProvider; import com.android.systemui.biometrics.dagger.BiometricsModule; +import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule; import com.android.systemui.bouncer.ui.BouncerViewModule; import com.android.systemui.classifier.FalsingModule; import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule; @@ -122,6 +123,7 @@ import com.android.systemui.temporarydisplay.dagger.TemporaryDisplayModule; import com.android.systemui.tuner.dagger.TunerModule; import com.android.systemui.unfold.SysUIUnfoldModule; import com.android.systemui.user.UserModule; +import com.android.systemui.user.domain.UserDomainLayerModule; import com.android.systemui.util.concurrency.SysUIConcurrencyModule; import com.android.systemui.util.dagger.UtilModule; import com.android.systemui.util.kotlin.CoroutinesModule; @@ -162,6 +164,7 @@ import javax.inject.Named; AssistModule.class, AuthenticationModule.class, BiometricsModule.class, + BiometricsDomainLayerModule.class, BouncerViewModule.class, ClipboardOverlayModule.class, ClockRegistryModule.class, @@ -209,6 +212,7 @@ import javax.inject.Named; TelephonyRepositoryModule.class, TemporaryDisplayModule.class, TunerModule.class, + UserDomainLayerModule.class, UserModule.class, UtilModule.class, NoteTaskModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index e170849e487fea64bc915210fa6d0b8d0c43ddac..ecad9d7c67bcbe1642d403cc25f4d73f1c68f56d 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -124,6 +124,11 @@ object Flags { val NOTIFICATION_GROUP_EXPANSION_CHANGE = unreleasedFlag("notification_group_expansion_change") + // TODO(b/301955929) + @JvmField + val NOTIF_LS_BACKGROUND_THREAD = + unreleasedFlag("notification_lockscreen_mgr_bg_thread") + // 200 - keyguard/lockscreen // ** Flag retired ** // public static final BooleanFlag KEYGUARD_LAYOUT = @@ -798,7 +803,7 @@ object Flags { /** Enable showing a dialog when clicking on Quick Settings bluetooth tile. */ @JvmField - val BLUETOOTH_QS_TILE_DIALOG = unreleasedFlag("bluetooth_qs_tile_dialog") + val BLUETOOTH_QS_TILE_DIALOG = unreleasedFlag("bluetooth_qs_tile_dialog", teamfood = true) // TODO(b/300995746): Tracking Bug /** Enable communal hub features. */ diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt index cc51d21744e86394b8e9fd9111e8d19dd2db4380..d9b2c39b9bef90ba7309278180655cd272811ba1 100644 --- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt @@ -36,8 +36,8 @@ import kotlinx.coroutines.launch * * @param[sliderStateListener] Listener of the slider state. * @param[sliderEventProducer] Producer of slider events arising from the slider. - * @property[scope] [CoroutineScope] where the collection of slider events and the launch of timer - * jobs occur. + * @param[mainDispatcher] [CoroutineDispatcher] used to launch coroutines for the collection of + * slider events and the launch of timer jobs. * @property[config] Configuration parameters of the slider tracker. */ class SeekableSliderTracker( diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt index e1f57089d7925bb71eed0abb815264ac9b427d6c..002b5aa743ba832839e12c6806d358f295c31a1b 100644 --- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt +++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderTracker.kt @@ -27,7 +27,8 @@ import kotlinx.coroutines.launch * The tracker maintains a state machine operated by slider events coming from a * [SliderEventProducer]. An action is executed in each state via a [SliderListener]. * - * @param[scope] [CoroutineScope] to launch the collection of [SliderEvent]. + * @property[scope] [CoroutineScope] to launch the collection of [SliderEvent] and state machine + * logic. * @property[sliderListener] [SliderListener] to execute actions on a given [SliderState]. * @property[eventProducer] Producer of [SliderEvent] to iterate over a state machine. */ diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index efd25d5d69e698cb1698cd87534f30efdcb16294..b506a363d3d40bdb82c0c09d8369408c766d3e11 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -3797,6 +3797,13 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, } } + /** + * Notify whether keyguard has created a remote animation runner for next app launch. + */ + public void launchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { + mKeyguardTransitions.setLaunchingActivityOverLockscreen(isLaunchingActivityOverLockscreen); + } + /** * Implementation of RemoteAnimationRunner that creates a new * {@link ActivityLaunchAnimator.Runner} whenever onAnimationStart is called, delegating the diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt index 4e71ef4e34f2586cd2e454db43931ae5498d587e..cc36961ff97301da8d8dc4750437ca663cec33f7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt @@ -78,6 +78,7 @@ constructor( component.getControlsListingController().getOrNull()?.getCurrentServices() val hasFavorites = component.getControlsController().getOrNull()?.getFavorites()?.isNotEmpty() == true + val hasPanels = currentServices?.any { it.panelActivity != null } == true val componentPackageName = component.getPackageName() when { currentServices.isNullOrEmpty() && !componentPackageName.isNullOrEmpty() -> { @@ -100,8 +101,8 @@ constructor( ), ) } - !hasFavorites -> { - // Home app installed but no favorites selected. + !hasFavorites && !hasPanels -> { + // Home app installed but no favorites selected or panel activities available. val activityClass = component.getControlsUiController().get().resolveActivity() return disabledPickerState( explanation = diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt index 00036ce5e2267a8418220ba39d8a6bafb2a08210..6522439460e48417ee2fa7f16d9aa3f40ec810d9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.shared.model.TrustModel import com.android.systemui.user.data.repository.UserRepository import javax.inject.Inject import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted @@ -36,6 +37,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart @@ -44,19 +47,25 @@ import kotlinx.coroutines.flow.stateIn /** Encapsulates any state relevant to trust agents and trust grants. */ interface TrustRepository { + /** Flow representing whether the current user has enabled any trust agents. */ + val isCurrentUserTrustUsuallyManaged: StateFlow<Boolean> + /** Flow representing whether the current user is trusted. */ val isCurrentUserTrusted: Flow<Boolean> /** Flow representing whether active unlock is running for the current user. */ val isCurrentUserActiveUnlockRunning: Flow<Boolean> - /** Reports that whether trust is managed has changed for the current user. */ + /** + * Reports whether a trust agent is currently enabled and managing the trust of the current user + */ val isCurrentUserTrustManaged: StateFlow<Boolean> /** A trust agent is requesting to dismiss the keyguard from a trust change. */ val trustAgentRequestingToDismissKeyguard: Flow<TrustModel> } +@OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton class TrustRepositoryImpl @Inject @@ -174,6 +183,11 @@ constructor( } .map { it!! } + override val isCurrentUserTrustUsuallyManaged: StateFlow<Boolean> = + userRepository.selectedUserInfo + .flatMapLatest { flowOf(trustManager.isTrustUsuallyManaged(it.id)) } + .stateIn(applicationScope, started = SharingStarted.Eagerly, false) + private fun isUserTrustManaged(userId: Int) = trustManagedForUser[userId]?.isTrustManaged ?: false diff --git a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt index b52554d4e99745c6f0c2af338e8b2ea6a2eafd50..11759f7ce06ba433907c85df0a2b9d9eb77de01a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt @@ -18,6 +18,8 @@ package com.android.systemui.qs import android.content.Context import android.util.AttributeSet +import com.android.systemui.flags.Flags +import com.android.systemui.flags.ViewRefactorFlag import com.android.systemui.res.R open class SideLabelTileLayout( @@ -25,9 +27,25 @@ open class SideLabelTileLayout( attrs: AttributeSet? ) : TileLayout(context, attrs) { + private final val isSmallLandscapeLockscreenEnabled = + ViewRefactorFlag(flag = Flags.LOCKSCREEN_ENABLE_LANDSCAPE).isEnabled + override fun updateResources(): Boolean { return super.updateResources().also { - mMaxAllowedRows = context.resources.getInteger(R.integer.quick_settings_max_rows) + // TODO (b/293252410) remove condition here when flag is launched + // Instead update quick_settings_max_rows resource to be the same as + // small_land_lockscreen_quick_settings_max_rows whenever is_small_screen_landscape is + // true. Then, only use quick_settings_max_rows resource. + val useSmallLandscapeLockscreenResources = + isSmallLandscapeLockscreenEnabled && + mContext.resources.getBoolean(R.bool.is_small_screen_landscape) + + mMaxAllowedRows = if (useSmallLandscapeLockscreenResources) { + context.resources.getInteger( + R.integer.small_land_lockscreen_quick_settings_max_rows) + } else { + context.resources.getInteger(R.integer.quick_settings_max_rows) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 9dc6aeebc41c8a0ff668122ddcae72a283dc349c..9ba16454aea65e5453ca38ce7ce3c0f05daa147f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -15,7 +15,9 @@ import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; import com.android.systemui.FontSizeUtils; +import com.android.systemui.flags.ViewRefactorFlag; import com.android.systemui.res.R; +import com.android.systemui.flags.Flags; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSPanelControllerBase.TileRecord; import com.android.systemui.qs.tileimpl.HeightOverrideable; @@ -51,8 +53,9 @@ public class TileLayout extends ViewGroup implements QSTileLayout { protected int mResourceColumns; private float mSquishinessFraction = 1f; protected int mLastTileBottom; - protected TextView mTempTextView; + private final Boolean mIsSmallLandscapeLockscreenEnabled = + new ViewRefactorFlag(Flags.LOCKSCREEN_ENABLE_LANDSCAPE).isEnabled(); public TileLayout(Context context) { this(context, null); @@ -127,12 +130,18 @@ public class TileLayout extends ViewGroup implements QSTileLayout { public boolean updateResources() { Resources res = getResources(); - mResourceColumns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns)); + int columns = useSmallLandscapeLockscreenResources() + ? res.getInteger(R.integer.small_land_lockscreen_quick_settings_num_columns) + : res.getInteger(R.integer.quick_settings_num_columns); + mResourceColumns = Math.max(1, columns); mResourceCellHeight = res.getDimensionPixelSize(mResourceCellHeightResId); mCellMarginHorizontal = res.getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal); mSidePadding = useSidePadding() ? mCellMarginHorizontal / 2 : 0; mCellMarginVertical= res.getDimensionPixelSize(R.dimen.qs_tile_margin_vertical); - mMaxAllowedRows = Math.max(1, getResources().getInteger(R.integer.quick_settings_max_rows)); + int rows = useSmallLandscapeLockscreenResources() + ? res.getInteger(R.integer.small_land_lockscreen_quick_settings_max_rows) + : res.getInteger(R.integer.quick_settings_max_rows); + mMaxAllowedRows = Math.max(1, rows); if (mLessRows) { mMaxAllowedRows = Math.max(mMinRows, mMaxAllowedRows - 1); } @@ -146,6 +155,17 @@ public class TileLayout extends ViewGroup implements QSTileLayout { return false; } + // TODO (b/293252410) remove condition here when flag is launched + // Instead update quick_settings_num_columns and quick_settings_max_rows to be the same as + // the small_land_lockscreen_quick_settings_num_columns or + // small_land_lockscreen_quick_settings_max_rows respectively whenever + // is_small_screen_landscape is true. + // Then, only use quick_settings_num_columns and quick_settings_max_rows. + private boolean useSmallLandscapeLockscreenResources() { + return mIsSmallLandscapeLockscreenEnabled + && mContext.getResources().getBoolean(R.bool.is_small_screen_landscape); + } + protected boolean useSidePadding() { return true; } 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 c9a24d6a4608b160ccc75058715a0c5f4c9c5bf9..e5af8e6df93271e97293acf64d2893bb2c1011e5 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -44,6 +44,8 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.android.internal.logging.UiEventLogger; import com.android.systemui.FontSizeUtils; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.res.R; import com.android.systemui.qs.QSEditEvent; import com.android.systemui.qs.QSHost; @@ -117,12 +119,14 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private TextView mTempTextView; private int mMinTileViewHeight; + private final boolean mIsSmallLandscapeLockscreenEnabled; @Inject public TileAdapter( @QSThemedContext Context context, QSHost qsHost, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, + FeatureFlags featureFlags) { mContext = context; mHost = qsHost; mUiEventLogger = uiEventLogger; @@ -130,7 +134,12 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta mDecoration = new TileItemDecoration(context); mMarginDecoration = new MarginTileDecoration(); mMinNumTiles = context.getResources().getInteger(R.integer.quick_settings_min_num_tiles); - mNumColumns = context.getResources().getInteger(NUM_COLUMNS_ID); + mIsSmallLandscapeLockscreenEnabled = + featureFlags.isEnabled(Flags.LOCKSCREEN_ENABLE_LANDSCAPE); + mNumColumns = useSmallLandscapeLockscreenResources() + ? context.getResources().getInteger( + R.integer.small_land_lockscreen_quick_settings_num_columns) + : context.getResources().getInteger(NUM_COLUMNS_ID); mAccessibilityDelegate = new TileAdapterDelegate(); mSizeLookup.setSpanIndexCacheEnabled(true); mTempTextView = new TextView(context); @@ -153,7 +162,10 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta * @return {@code true} if the number of columns changed, {@code false} otherwise */ public boolean updateNumColumns() { - int numColumns = mContext.getResources().getInteger(NUM_COLUMNS_ID); + int numColumns = useSmallLandscapeLockscreenResources() + ? mContext.getResources().getInteger( + R.integer.small_land_lockscreen_quick_settings_num_columns) + : mContext.getResources().getInteger(NUM_COLUMNS_ID); if (numColumns != mNumColumns) { mNumColumns = numColumns; return true; @@ -162,6 +174,17 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta } } + // TODO (b/293252410) remove condition here when flag is launched + // Instead update quick_settings_num_columns and quick_settings_max_rows to be the same as + // the small_land_lockscreen_quick_settings_num_columns or + // small_land_lockscreen_quick_settings_max_rows respectively whenever + // is_small_screen_landscape is true. + // Then, only use quick_settings_num_columns and quick_settings_max_rows. + private boolean useSmallLandscapeLockscreenResources() { + return mIsSmallLandscapeLockscreenEnabled + && mContext.getResources().getBoolean(R.bool.is_small_screen_landscape); + } + public int getNumColumns() { return mNumColumns; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 1be514db44c46f8ac810559150a65eb64f525b9b..d862f563c8f9842bb5c3404e9ba5e5a8f6d767eb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -42,6 +42,8 @@ import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QSTile.BooleanState; @@ -50,6 +52,7 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QsEventLogger; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialogViewModel; import com.android.systemui.statusbar.policy.BluetoothController; import java.util.List; @@ -72,6 +75,10 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { private final Executor mExecutor; + private final BluetoothTileDialogViewModel mDialogViewModel; + + private final FeatureFlags mFeatureFlags; + @Inject public BluetoothTile( QSHost host, @@ -83,13 +90,17 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger, - BluetoothController bluetoothController + BluetoothController bluetoothController, + FeatureFlags featureFlags, + BluetoothTileDialogViewModel dialogViewModel ) { super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger); mController = bluetoothController; mController.observe(getLifecycle(), mCallback); mExecutor = new HandlerExecutor(mainHandler); + mFeatureFlags = featureFlags; + mDialogViewModel = dialogViewModel; } @Override @@ -99,11 +110,15 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { @Override protected void handleClick(@Nullable View view) { - // Secondary clicks are header clicks, just toggle. - final boolean isEnabled = mState.value; - // Immediately enter transient enabling state when turning bluetooth on. - refreshState(isEnabled ? null : ARG_SHOW_TRANSIENT_ENABLING); - mController.setBluetoothEnabled(!isEnabled); + if (mFeatureFlags.isEnabled(Flags.BLUETOOTH_QS_TILE_DIALOG)) { + mDialogViewModel.showDialog(mContext, view); + } else { + // Secondary clicks are header clicks, just toggle. + final boolean isEnabled = mState.value; + // Immediately enter transient enabling state when turning bluetooth on. + refreshState(isEnabled ? null : ARG_SHOW_TRANSIENT_ENABLING); + mController.setBluetoothEnabled(!isEnabled); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java index b393f39719e7c9cb70710b68997a3c77e1c19ea2..736f035ace6f74edf5ac29270b744c9596cd4f53 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java @@ -25,6 +25,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor; import android.os.Handler; import android.os.Looper; import android.provider.DeviceConfig; +import android.safetycenter.SafetyCenterManager; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -60,10 +61,11 @@ public class CameraToggleTile extends SensorPrivacyToggleTile { ActivityStarter activityStarter, QSLogger qsLogger, IndividualSensorPrivacyController sensorPrivacyController, - KeyguardStateController keyguardStateController) { + KeyguardStateController keyguardStateController, + SafetyCenterManager safetyCenterManager) { super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger, sensorPrivacyController, - keyguardStateController); + keyguardStateController, safetyCenterManager); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java index 7a7dbbc79558a01bdf8ff8155ef1dc6d9e2e4159..92338cbc3410dab4a05f197939a26907936bf935 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java @@ -25,6 +25,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor; import android.os.Handler; import android.os.Looper; import android.provider.DeviceConfig; +import android.safetycenter.SafetyCenterManager; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -60,10 +61,11 @@ public class MicrophoneToggleTile extends SensorPrivacyToggleTile { ActivityStarter activityStarter, QSLogger qsLogger, IndividualSensorPrivacyController sensorPrivacyController, - KeyguardStateController keyguardStateController) { + KeyguardStateController keyguardStateController, + SafetyCenterManager safetyCenterManager) { super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger, sensorPrivacyController, - keyguardStateController); + keyguardStateController, safetyCenterManager); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java index 5832217f3e851b1f1228d6ec0b08088221e2a83b..1b0d5f9a9fdf39bd81a5f1a963b4c11b46029b5b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java @@ -23,6 +23,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor; import android.os.Handler; import android.os.Looper; import android.provider.Settings; +import android.safetycenter.SafetyCenterManager; import android.service.quicksettings.Tile; import android.view.View; import android.widget.Switch; @@ -54,6 +55,8 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS private final KeyguardStateController mKeyguard; protected IndividualSensorPrivacyController mSensorPrivacyController; + private final SafetyCenterManager mSafetyCenterManager; + /** * @return Id of the sensor that will be toggled */ @@ -80,11 +83,13 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS ActivityStarter activityStarter, QSLogger qsLogger, IndividualSensorPrivacyController sensorPrivacyController, - KeyguardStateController keyguardStateController) { + KeyguardStateController keyguardStateController, + SafetyCenterManager safetyCenterManager) { super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger); mSensorPrivacyController = sensorPrivacyController; mKeyguard = keyguardStateController; + mSafetyCenterManager = safetyCenterManager; mSensorPrivacyController.observe(getLifecycle(), this); } @@ -133,7 +138,11 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS @Override public Intent getLongClickIntent() { - return new Intent(Settings.ACTION_PRIVACY_SETTINGS); + if (mSafetyCenterManager.isSafetyCenterEnabled()) { + return new Intent(Settings.ACTION_PRIVACY_CONTROLS); + } else { + return new Intent(Settings.ACTION_PRIVACY_SETTINGS); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractor.kt new file mode 100644 index 0000000000000000000000000000000000000000..efad9ec548f9c4528adaafe2dfdb358645a6162c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractor.kt @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothAdapter.STATE_OFF +import android.bluetooth.BluetoothAdapter.STATE_ON +import com.android.settingslib.bluetooth.BluetoothCallback +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging +import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn + +/** Holds business logic for the Bluetooth Dialog's bluetooth and device connection state */ +@SysUISingleton +internal class BluetoothStateInteractor +@Inject +constructor( + private val localBluetoothManager: LocalBluetoothManager?, + @Application private val coroutineScope: CoroutineScope, +) { + + internal val updateBluetoothStateFlow: StateFlow<Boolean?> = + conflatedCallbackFlow { + val listener = + object : BluetoothCallback { + override fun onBluetoothStateChanged(bluetoothState: Int) { + if (bluetoothState == STATE_ON || bluetoothState == STATE_OFF) { + super.onBluetoothStateChanged(bluetoothState) + trySendWithFailureLogging( + bluetoothState == STATE_ON, + TAG, + "onBluetoothStateChanged" + ) + } + } + } + localBluetoothManager?.eventManager?.registerCallback(listener) + awaitClose { localBluetoothManager?.eventManager?.unregisterCallback(listener) } + } + .stateIn( + coroutineScope, + SharingStarted.WhileSubscribed(replayExpirationMillis = 0), + initialValue = null + ) + + internal var isBluetoothEnabled: Boolean + get() = localBluetoothManager?.bluetoothAdapter?.isEnabled == true + set(value) { + if (isBluetoothEnabled != value) { + localBluetoothManager?.bluetoothAdapter?.apply { + if (value) enable() else disable() + } + } + } + + companion object { + private const val TAG = "BtStateInteractor" + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialog.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialog.kt new file mode 100644 index 0000000000000000000000000000000000000000..6815a732508196daca4818125b2a0b34a19606ac --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialog.kt @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.Switch +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.android.internal.logging.UiEventLogger +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.res.R +import com.android.systemui.statusbar.phone.SystemUIDialog +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.asStateFlow + +/** Dialog for showing active, connected and saved bluetooth devices. */ +@SysUISingleton +internal class BluetoothTileDialog +constructor( + private val bluetoothToggleInitialValue: Boolean, + private val bluetoothTileDialogCallback: BluetoothTileDialogCallback, + private val uiEventLogger: UiEventLogger, + context: Context, +) : SystemUIDialog(context, DEFAULT_THEME, DEFAULT_DISMISS_ON_DEVICE_LOCK) { + + private val mutableBluetoothStateSwitchedFlow: MutableStateFlow<Boolean> = + MutableStateFlow(bluetoothToggleInitialValue) + internal val bluetoothStateSwitchedFlow + get() = mutableBluetoothStateSwitchedFlow.asStateFlow() + + private val mutableClickedFlow: MutableSharedFlow<Pair<DeviceItem, Int>> = + MutableSharedFlow(extraBufferCapacity = 1) + internal val deviceItemClickedFlow + get() = mutableClickedFlow.asSharedFlow() + + private val deviceItemAdapter: Adapter = Adapter(bluetoothTileDialogCallback) + + private lateinit var toggleView: Switch + private lateinit var doneButton: View + private lateinit var seeAllViewGroup: View + private lateinit var pairNewDeviceViewGroup: View + private lateinit var seeAllText: View + private lateinit var pairNewDeviceText: View + private lateinit var deviceListView: RecyclerView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + uiEventLogger.log(BluetoothTileDialogUiEvent.BLUETOOTH_TILE_DIALOG_SHOWN) + + setContentView(LayoutInflater.from(context).inflate(R.layout.bluetooth_tile_dialog, null)) + + toggleView = requireViewById(R.id.bluetooth_toggle) + doneButton = requireViewById(R.id.done_button) + seeAllViewGroup = requireViewById(R.id.see_all_layout_group) + pairNewDeviceViewGroup = requireViewById(R.id.pair_new_device_layout_group) + seeAllText = requireViewById(R.id.see_all_text) + pairNewDeviceText = requireViewById(R.id.pair_new_device_text) + deviceListView = requireViewById<RecyclerView>(R.id.device_list) + + setupToggle() + setupRecyclerView() + + doneButton.setOnClickListener { dismiss() } + seeAllText.setOnClickListener { bluetoothTileDialogCallback.onSeeAllClicked(it) } + pairNewDeviceText.setOnClickListener { + bluetoothTileDialogCallback.onPairNewDeviceClicked(it) + } + } + + // TODO(b/298124674): use DiffUtil or AsyncListDiffer to avoid updating the whole list + internal fun onDeviceItemUpdated( + deviceItem: List<DeviceItem>, + showSeeAll: Boolean, + showPairNewDevice: Boolean + ) { + seeAllViewGroup.visibility = if (showSeeAll) VISIBLE else GONE + pairNewDeviceViewGroup.visibility = if (showPairNewDevice) VISIBLE else GONE + deviceItemAdapter.refreshDeviceItemList(deviceItem) + } + + internal fun onDeviceItemUpdatedAtPosition(deviceItem: DeviceItem, position: Int) { + deviceItemAdapter.refreshDeviceItem(deviceItem, position) + } + + internal fun onBluetoothStateUpdated(isEnabled: Boolean) { + toggleView.isChecked = isEnabled + } + + private fun setupToggle() { + toggleView.isChecked = bluetoothToggleInitialValue + toggleView.setOnCheckedChangeListener { _, isChecked -> + mutableBluetoothStateSwitchedFlow.value = isChecked + uiEventLogger.log(BluetoothTileDialogUiEvent.BLUETOOTH_TOGGLE_CLICKED) + } + } + + private fun setupRecyclerView() { + deviceListView.apply { + layoutManager = LinearLayoutManager(context) + adapter = deviceItemAdapter + } + } + + internal inner class Adapter(private val onClickCallback: BluetoothTileDialogCallback) : + RecyclerView.Adapter<Adapter.DeviceItemViewHolder>() { + + private val deviceItem: MutableList<DeviceItem> = mutableListOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DeviceItemViewHolder { + val view = + LayoutInflater.from(parent.context) + .inflate(R.layout.bluetooth_device_item, parent, false) + return DeviceItemViewHolder(view) + } + + override fun getItemCount() = deviceItem.size + + override fun onBindViewHolder(holder: DeviceItemViewHolder, position: Int) { + val item = getItem(position) + holder.bind(item, position, onClickCallback) + } + + internal fun getItem(position: Int) = deviceItem[position] + + internal fun refreshDeviceItemList(updated: List<DeviceItem>) { + deviceItem.clear() + deviceItem.addAll(updated) + notifyDataSetChanged() + } + + internal fun refreshDeviceItem(updated: DeviceItem, position: Int) { + deviceItem[position] = updated + notifyItemChanged(position) + } + + internal inner class DeviceItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + private val container = view.requireViewById<View>(R.id.bluetooth_device_row) + private val deviceView = view.requireViewById<View>(R.id.bluetooth_device) + private val nameView = view.requireViewById<TextView>(R.id.bluetooth_device_name) + private val summaryView = view.requireViewById<TextView>(R.id.bluetooth_device_summary) + private val iconView = view.requireViewById<ImageView>(R.id.bluetooth_device_icon) + private val gearView = view.requireViewById<View>(R.id.gear_icon) + + internal fun bind( + item: DeviceItem, + position: Int, + deviceItemOnClickCallback: BluetoothTileDialogCallback + ) { + container.apply { + isEnabled = item.isEnabled + alpha = item.alpha + background = item.background + } + deviceView.setOnClickListener { + mutableClickedFlow.tryEmit(Pair(item, position)) + uiEventLogger.log(BluetoothTileDialogUiEvent.DEVICE_CLICKED) + } + nameView.text = item.deviceName + summaryView.text = item.connectionSummary + iconView.apply { + item.iconWithDescription?.let { + setImageDrawable(it.first) + contentDescription = it.second + } + } + gearView.setOnClickListener { + deviceItemOnClickCallback.onDeviceItemGearClicked(item, it) + } + } + } + } + + internal companion object { + const val ENABLED_ALPHA = 1.0f + const val DISABLED_ALPHA = 0.3f + const val MAX_DEVICE_ITEM_ENTRY = 3 + const val ACTION_BLUETOOTH_DEVICE_DETAILS = + "com.android.settings.BLUETOOTH_DEVICE_DETAIL_SETTINGS" + const val ACTION_PREVIOUSLY_CONNECTED_DEVICE = + "com.android.settings.PREVIOUSLY_CONNECTED_DEVICE" + const val ACTION_PAIR_NEW_DEVICE = "android.settings.BLUETOOTH_PAIRING_SETTINGS" + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepository.kt new file mode 100644 index 0000000000000000000000000000000000000000..ea51beecc2c13bc483b2c3d5932b045a98c2660c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepository.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothAdapter +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.dagger.SysUISingleton +import javax.inject.Inject + +/** Repository to get CachedBluetoothDevices for the Bluetooth Dialog. */ +@SysUISingleton +internal class BluetoothTileDialogRepository +@Inject +constructor( + private val localBluetoothManager: LocalBluetoothManager?, + private val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() +) { + internal val cachedDevices: Collection<CachedBluetoothDevice> + get() { + return if ( + localBluetoothManager == null || + bluetoothAdapter == null || + !bluetoothAdapter.isEnabled + ) { + emptyList() + } else { + localBluetoothManager.cachedDeviceManager.cachedDevicesCopy + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogUiEvent.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogUiEvent.kt new file mode 100644 index 0000000000000000000000000000000000000000..2865ad7a3e834885ee29a4dab08f664e58c02ea6 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogUiEvent.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import com.android.internal.logging.UiEvent +import com.android.internal.logging.UiEventLogger + +/** UI Events for the bluetooth tile dialog. */ +enum class BluetoothTileDialogUiEvent(val metricId: Int) : UiEventLogger.UiEventEnum { + @UiEvent(doc = "The bluetooth tile dialog is shown") BLUETOOTH_TILE_DIALOG_SHOWN(1493), + @UiEvent(doc = "The master toggle is clicked") BLUETOOTH_TOGGLE_CLICKED(1494), + @UiEvent(doc = "Pair new device is clicked") PAIR_NEW_DEVICE_CLICKED(1495), + @UiEvent(doc = "See all is clicked") SEE_ALL_CLICKED(1496), + @UiEvent(doc = "Gear icon clicked") DEVICE_GEAR_CLICKED(1497), + @UiEvent(doc = "Device clicked") DEVICE_CLICKED(1498), + @UiEvent(doc = "Connected device clicked to active") CONNECTED_DEVICE_SET_ACTIVE(1499), + @UiEvent(doc = "Saved clicked to connect") SAVED_DEVICE_CONNECT(1500); + + override fun getId() = metricId +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..012484f2f0a686c43f63c0b20d4f7921060d8453 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModel.kt @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import androidx.annotation.VisibleForTesting +import com.android.internal.logging.UiEventLogger +import com.android.systemui.animation.DialogLaunchAnimator +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.ACTION_BLUETOOTH_DEVICE_DETAILS +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.ACTION_PAIR_NEW_DEVICE +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.ACTION_PREVIOUSLY_CONNECTED_DEVICE +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.MAX_DEVICE_ITEM_ENTRY +import com.android.systemui.statusbar.phone.SystemUIDialog +import javax.inject.Inject +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch + +/** ViewModel for Bluetooth Dialog after clicking on the Bluetooth QS tile. */ +@SysUISingleton +internal class BluetoothTileDialogViewModel +@Inject +constructor( + private val deviceItemInteractor: DeviceItemInteractor, + private val bluetoothStateInteractor: BluetoothStateInteractor, + private val dialogLaunchAnimator: DialogLaunchAnimator, + private val activityStarter: ActivityStarter, + private val uiEventLogger: UiEventLogger, + @Application private val coroutineScope: CoroutineScope, + @Main private val mainDispatcher: CoroutineDispatcher, +) : BluetoothTileDialogCallback { + + private var job: Job? = null + + @VisibleForTesting internal var dialog: BluetoothTileDialog? = null + + /** + * Shows the dialog. + * + * @param context The context in which the dialog is displayed. + * @param view The view from which the dialog is shown. + */ + fun showDialog(context: Context, view: View?) { + dismissDialog() + + var updateDeviceItemJob: Job? = null + + job = + coroutineScope.launch(mainDispatcher) { + dialog = createBluetoothTileDialog(context) + view?.let { dialogLaunchAnimator.showFromView(dialog!!, it) } ?: dialog!!.show() + updateDeviceItemJob?.cancel() + updateDeviceItemJob = launch { deviceItemInteractor.updateDeviceItems(context) } + + bluetoothStateInteractor.updateBluetoothStateFlow + .filterNotNull() + .onEach { + dialog!!.onBluetoothStateUpdated(it) + updateDeviceItemJob?.cancel() + updateDeviceItemJob = launch { + deviceItemInteractor.updateDeviceItems(context) + } + } + .launchIn(this) + + deviceItemInteractor.updateDeviceItemsFlow + .onEach { + updateDeviceItemJob?.cancel() + updateDeviceItemJob = launch { + deviceItemInteractor.updateDeviceItems(context) + } + } + .launchIn(this) + + deviceItemInteractor.deviceItemFlow + .filterNotNull() + .onEach { + dialog!!.onDeviceItemUpdated( + it.take(MAX_DEVICE_ITEM_ENTRY), + showSeeAll = it.size > MAX_DEVICE_ITEM_ENTRY, + showPairNewDevice = bluetoothStateInteractor.isBluetoothEnabled + ) + } + .launchIn(this) + + dialog!! + .bluetoothStateSwitchedFlow + .onEach { bluetoothStateInteractor.isBluetoothEnabled = it } + .launchIn(this) + + dialog!! + .deviceItemClickedFlow + .onEach { + if (deviceItemInteractor.updateDeviceItemOnClick(it.first)) { + dialog!!.onDeviceItemUpdatedAtPosition(it.first, it.second) + } + } + .launchIn(this) + } + } + + private fun createBluetoothTileDialog(context: Context): BluetoothTileDialog { + return BluetoothTileDialog( + bluetoothStateInteractor.isBluetoothEnabled, + this@BluetoothTileDialogViewModel, + uiEventLogger, + context + ) + .apply { SystemUIDialog.registerDismissListener(this) { dismissDialog() } } + } + + override fun onDeviceItemGearClicked(deviceItem: DeviceItem, view: View) { + uiEventLogger.log(BluetoothTileDialogUiEvent.DEVICE_GEAR_CLICKED) + val intent = + Intent(ACTION_BLUETOOTH_DEVICE_DETAILS).apply { + putExtra( + ":settings:show_fragment_args", + Bundle().apply { + putString("device_address", deviceItem.cachedBluetoothDevice.address) + } + ) + } + startSettingsActivity(intent, view) + } + + override fun onSeeAllClicked(view: View) { + uiEventLogger.log(BluetoothTileDialogUiEvent.SEE_ALL_CLICKED) + startSettingsActivity(Intent(ACTION_PREVIOUSLY_CONNECTED_DEVICE), view) + } + + override fun onPairNewDeviceClicked(view: View) { + uiEventLogger.log(BluetoothTileDialogUiEvent.PAIR_NEW_DEVICE_CLICKED) + startSettingsActivity(Intent(ACTION_PAIR_NEW_DEVICE), view) + } + + private fun dismissDialog() { + job?.cancel() + job = null + dialog?.dismiss() + dialog = null + } + + private fun startSettingsActivity(intent: Intent, view: View) { + dialog?.run { + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + activityStarter.postStartActivityDismissingKeyguard( + intent, + 0, + dialogLaunchAnimator.createActivityLaunchController(view) + ) + } + } +} + +internal interface BluetoothTileDialogCallback { + fun onDeviceItemGearClicked(deviceItem: DeviceItem, view: View) + fun onSeeAllClicked(view: View) + fun onPairNewDeviceClicked(view: View) +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItem.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItem.kt new file mode 100644 index 0000000000000000000000000000000000000000..03ae5e88f1b0975a6e4f7dc6e256f637ea356693 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItem.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.graphics.drawable.Drawable +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.ENABLED_ALPHA + +enum class DeviceItemType { + AVAILABLE_MEDIA_BLUETOOTH_DEVICE, + CONNECTED_BLUETOOTH_DEVICE, + SAVED_BLUETOOTH_DEVICE, +} + +data class DeviceItem( + val type: DeviceItemType, + val cachedBluetoothDevice: CachedBluetoothDevice, + val deviceName: String = "", + val connectionSummary: String = "", + val iconWithDescription: Pair<Drawable, String>? = null, + val background: Drawable? = null, + var isEnabled: Boolean = true, + var alpha: Float = ENABLED_ALPHA +) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactory.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..a16a9f1f1017810dded3182d5b62ee9e743f56f3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactory.kt @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothDevice +import android.content.Context +import android.media.AudioManager +import com.android.settingslib.bluetooth.BluetoothUtils +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.systemui.res.R + +private val backgroundOn = R.drawable.settingslib_switch_bar_bg_on +private val connected = R.string.quick_settings_bluetooth_device_connected +private val saved = R.string.quick_settings_bluetooth_device_saved + +/** Factories to create different types of Bluetooth device items from CachedBluetoothDevice. */ +internal abstract class DeviceItemFactory { + abstract fun isFilterMatched( + cachedDevice: CachedBluetoothDevice, + audioManager: AudioManager? + ): Boolean + + abstract fun create(context: Context, cachedDevice: CachedBluetoothDevice): DeviceItem +} + +internal class AvailableMediaDeviceItemFactory : DeviceItemFactory() { + override fun isFilterMatched( + cachedDevice: CachedBluetoothDevice, + audioManager: AudioManager? + ): Boolean { + return BluetoothUtils.isAvailableMediaBluetoothDevice(cachedDevice, audioManager) + } + + // TODO(b/298124674): move create() to the abstract class to reduce duplicate code + override fun create(context: Context, cachedDevice: CachedBluetoothDevice): DeviceItem { + return DeviceItem( + type = DeviceItemType.AVAILABLE_MEDIA_BLUETOOTH_DEVICE, + cachedBluetoothDevice = cachedDevice, + deviceName = cachedDevice.name, + connectionSummary = cachedDevice.connectionSummary.takeUnless { it.isNullOrEmpty() } + ?: context.getString(connected), + iconWithDescription = + BluetoothUtils.getBtClassDrawableWithDescription(context, cachedDevice).let { p -> + Pair(p.first, p.second) + }, + background = context.getDrawable(backgroundOn), + isEnabled = !cachedDevice.isBusy, + alpha = + if (cachedDevice.isBusy) BluetoothTileDialog.DISABLED_ALPHA + else BluetoothTileDialog.ENABLED_ALPHA, + ) + } +} + +internal class ConnectedDeviceItemFactory : DeviceItemFactory() { + override fun isFilterMatched( + cachedDevice: CachedBluetoothDevice, + audioManager: AudioManager? + ): Boolean { + return BluetoothUtils.isConnectedBluetoothDevice(cachedDevice, audioManager) + } + + override fun create(context: Context, cachedDevice: CachedBluetoothDevice): DeviceItem { + return DeviceItem( + type = DeviceItemType.CONNECTED_BLUETOOTH_DEVICE, + cachedBluetoothDevice = cachedDevice, + deviceName = cachedDevice.name, + connectionSummary = cachedDevice.connectionSummary.takeUnless { it.isNullOrEmpty() } + ?: context.getString(connected), + iconWithDescription = + BluetoothUtils.getBtClassDrawableWithDescription(context, cachedDevice).let { p -> + Pair(p.first, p.second) + }, + isEnabled = !cachedDevice.isBusy, + alpha = + if (cachedDevice.isBusy) BluetoothTileDialog.DISABLED_ALPHA + else BluetoothTileDialog.ENABLED_ALPHA, + ) + } +} + +internal class SavedDeviceItemFactory : DeviceItemFactory() { + override fun isFilterMatched( + cachedDevice: CachedBluetoothDevice, + audioManager: AudioManager? + ): Boolean { + return cachedDevice.bondState == BluetoothDevice.BOND_BONDED && !cachedDevice.isConnected + } + + override fun create(context: Context, cachedDevice: CachedBluetoothDevice): DeviceItem { + return DeviceItem( + type = DeviceItemType.SAVED_BLUETOOTH_DEVICE, + cachedBluetoothDevice = cachedDevice, + deviceName = cachedDevice.name, + connectionSummary = cachedDevice.connectionSummary.takeUnless { it.isNullOrEmpty() } + ?: context.getString(saved), + iconWithDescription = + BluetoothUtils.getBtClassDrawableWithDescription(context, cachedDevice).let { p -> + Pair(p.first, p.second) + }, + isEnabled = !cachedDevice.isBusy, + alpha = + if (cachedDevice.isBusy) BluetoothTileDialog.DISABLED_ALPHA + else BluetoothTileDialog.ENABLED_ALPHA, + ) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractor.kt new file mode 100644 index 0000000000000000000000000000000000000000..fcd0ce6807fd34a1ab9ec1370dcf9818edd4e912 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractor.kt @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothDevice +import android.content.Context +import android.media.AudioManager +import com.android.internal.logging.UiEventLogger +import com.android.settingslib.bluetooth.BluetoothCallback +import com.android.settingslib.bluetooth.BluetoothUtils +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging +import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.dagger.qualifiers.Background +import javax.inject.Inject +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.withContext + +/** Holds business logic for the Bluetooth Dialog after clicking on the Bluetooth QS tile. */ +@SysUISingleton +internal class DeviceItemInteractor +@Inject +constructor( + private val bluetoothTileDialogRepository: BluetoothTileDialogRepository, + private val audioManager: AudioManager, + private val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter(), + private val localBluetoothManager: LocalBluetoothManager?, + private val uiEventLogger: UiEventLogger, + @Application private val coroutineScope: CoroutineScope, + @Background private val backgroundDispatcher: CoroutineDispatcher, +) { + + private val mutableDeviceItemFlow: MutableStateFlow<List<DeviceItem>?> = MutableStateFlow(null) + internal val deviceItemFlow + get() = mutableDeviceItemFlow.asStateFlow() + + internal val updateDeviceItemsFlow: SharedFlow<Unit> = + conflatedCallbackFlow { + val listener = + object : BluetoothCallback { + override fun onActiveDeviceChanged( + activeDevice: CachedBluetoothDevice?, + bluetoothProfile: Int + ) { + super.onActiveDeviceChanged(activeDevice, bluetoothProfile) + trySendWithFailureLogging(Unit, TAG, "onActiveDeviceChanged") + } + + override fun onConnectionStateChanged( + cachedDevice: CachedBluetoothDevice?, + state: Int + ) { + super.onConnectionStateChanged(cachedDevice, state) + trySendWithFailureLogging(Unit, TAG, "onConnectionStateChanged") + } + + override fun onDeviceAdded(cachedDevice: CachedBluetoothDevice) { + super.onDeviceAdded(cachedDevice) + trySendWithFailureLogging(Unit, TAG, "onDeviceAdded") + } + + override fun onProfileConnectionStateChanged( + cachedDevice: CachedBluetoothDevice, + state: Int, + bluetoothProfile: Int + ) { + super.onProfileConnectionStateChanged( + cachedDevice, + state, + bluetoothProfile + ) + trySendWithFailureLogging(Unit, TAG, "onProfileConnectionStateChanged") + } + } + localBluetoothManager?.eventManager?.registerCallback(listener) + awaitClose { localBluetoothManager?.eventManager?.unregisterCallback(listener) } + } + .shareIn(coroutineScope, SharingStarted.WhileSubscribed(replayExpirationMillis = 0)) + + private var deviceItemFactoryList: List<DeviceItemFactory> = + listOf( + AvailableMediaDeviceItemFactory(), + ConnectedDeviceItemFactory(), + SavedDeviceItemFactory() + ) + + private var displayPriority: List<DeviceItemType> = + listOf( + DeviceItemType.AVAILABLE_MEDIA_BLUETOOTH_DEVICE, + DeviceItemType.CONNECTED_BLUETOOTH_DEVICE, + DeviceItemType.SAVED_BLUETOOTH_DEVICE, + ) + + internal suspend fun updateDeviceItems(context: Context) { + withContext(backgroundDispatcher) { + val mostRecentlyConnectedDevices = bluetoothAdapter?.mostRecentlyConnectedDevices + + mutableDeviceItemFlow.value = + bluetoothTileDialogRepository.cachedDevices + .mapNotNull { cachedDevice -> + deviceItemFactoryList + .firstOrNull { it.isFilterMatched(cachedDevice, audioManager) } + ?.create(context, cachedDevice) + } + .sort(displayPriority, mostRecentlyConnectedDevices) + } + } + + private fun List<DeviceItem>.sort( + displayPriority: List<DeviceItemType>, + mostRecentlyConnectedDevices: List<BluetoothDevice>? + ): List<DeviceItem> { + return this.sortedWith( + compareBy<DeviceItem> { displayPriority.indexOf(it.type) } + .thenBy { + mostRecentlyConnectedDevices?.indexOf(it.cachedBluetoothDevice.device) ?: 0 + } + ) + } + + internal fun updateDeviceItemOnClick(deviceItem: DeviceItem): Boolean { + var isClicked = false + when (deviceItem.type) { + DeviceItemType.AVAILABLE_MEDIA_BLUETOOTH_DEVICE -> { + if (!BluetoothUtils.isActiveMediaDevice(deviceItem.cachedBluetoothDevice)) { + deviceItem.cachedBluetoothDevice.setActive() + uiEventLogger.log(BluetoothTileDialogUiEvent.CONNECTED_DEVICE_SET_ACTIVE) + isClicked = true + } + } + DeviceItemType.CONNECTED_BLUETOOTH_DEVICE -> {} + DeviceItemType.SAVED_BLUETOOTH_DEVICE -> { + deviceItem.cachedBluetoothDevice.connect() + uiEventLogger.log(BluetoothTileDialogUiEvent.SAVED_DEVICE_CONNECT) + isClicked = true + } + } + if (isClicked) { + deviceItem.isEnabled = false + deviceItem.alpha = BluetoothTileDialog.DISABLED_ALPHA + } + return isClicked + } + + internal fun setDeviceItemFactoryListForTesting(list: List<DeviceItemFactory>) { + deviceItemFactoryList = list + } + + internal fun setDisplayPriorityForTesting(list: List<DeviceItemType>) { + displayPriority = list + } + + companion object { + private const val TAG = "DeviceItemInteractor" + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 98e5124f77362f3de75e2930437265238f6c2d7d..2f1b589899a0295a9bb0280d968fc29b6c3325f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -84,7 +84,6 @@ import com.android.keyguard.TrustGrantFlags; import com.android.keyguard.logging.KeyguardLogger; import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; -import com.android.systemui.res.R; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.FaceHelpMessageDeferral; import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor; @@ -103,6 +102,7 @@ import com.android.systemui.keyguard.util.IndicationHelper; import com.android.systemui.log.core.LogLevel; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; @@ -1256,8 +1256,6 @@ public class KeyguardIndicationController { if (biometricSourceType == FACE) { mFaceAcquiredMessageDeferral.reset(); } - mBouncerMessageInteractor.setFaceAcquisitionMessage(null); - mBouncerMessageInteractor.setFingerprintAcquisitionMessage(null); } @Override @@ -1278,8 +1276,6 @@ public class KeyguardIndicationController { } else if (biometricSourceType == FINGERPRINT) { onFingerprintAuthError(msgId, errString); } - mBouncerMessageInteractor.setFaceAcquisitionMessage(null); - mBouncerMessageInteractor.setFingerprintAcquisitionMessage(null); } private void onFaceAuthError(int msgId, String errString) { @@ -1351,8 +1347,6 @@ public class KeyguardIndicationController { showActionToUnlock(); } } - mBouncerMessageInteractor.setFaceAcquisitionMessage(null); - mBouncerMessageInteractor.setFingerprintAcquisitionMessage(null); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/TEST_MAPPING b/packages/SystemUI/src/com/android/systemui/statusbar/TEST_MAPPING index 8849d6e11e26c21302438ca305130ea62633b323..10e7573a757e0f1411c26740857a7f1491feb001 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/TEST_MAPPING +++ b/packages/SystemUI/src/com/android/systemui/statusbar/TEST_MAPPING @@ -13,7 +13,7 @@ "exclude-annotation": "org.junit.Ignore" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.LargeTest" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 3a8850408f18763a2fb51f3c560de00426c6b61d..6f69ea8170c0a08d1b25d25d5fe18ff4188e628b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -3429,6 +3429,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { @Override public void setIsLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen; + mKeyguardViewMediator.launchingActivityOverLockscreen(mIsLaunchingActivityOverLockscreen); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java index 518a9b3f61ec9130b01d4f973fd17ba824dc79a8..e5f72ebdaab12ac8ab751b3322c7f547f7cf870f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java @@ -40,6 +40,7 @@ import android.os.UserManager; import android.provider.DeviceConfig; import android.provider.Settings; +import androidx.annotation.GuardedBy; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; @@ -361,6 +362,7 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio private static final int MSG_ADD_CALLBACK = 3; private static final int MSG_REMOVE_CALLBACK = 4; + @GuardedBy("mSettingsChangeCallbacks") private final ArrayList<LocationChangeCallback> mSettingsChangeCallbacks = new ArrayList<>(); @@ -378,10 +380,14 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio locationActiveChanged(); break; case MSG_ADD_CALLBACK: - mSettingsChangeCallbacks.add((LocationChangeCallback) msg.obj); + synchronized (mSettingsChangeCallbacks) { + mSettingsChangeCallbacks.add((LocationChangeCallback) msg.obj); + } break; case MSG_REMOVE_CALLBACK: - mSettingsChangeCallbacks.remove((LocationChangeCallback) msg.obj); + synchronized (mSettingsChangeCallbacks) { + mSettingsChangeCallbacks.remove((LocationChangeCallback) msg.obj); + } break; } diff --git a/packages/SystemUI/src/com/android/systemui/user/UserModule.java b/packages/SystemUI/src/com/android/systemui/user/UserModule.java index d8ee686ea60f17b47b4dbd049d24bae6b5a5340d..348670f09836ca19d82af6ec62c654c163abdf62 100644 --- a/packages/SystemUI/src/com/android/systemui/user/UserModule.java +++ b/packages/SystemUI/src/com/android/systemui/user/UserModule.java @@ -21,7 +21,6 @@ import android.os.UserHandle; import com.android.settingslib.users.CreateUserDialogController; import com.android.settingslib.users.EditUserInfoController; import com.android.systemui.user.data.repository.UserRepositoryModule; -import com.android.systemui.user.domain.interactor.HeadlessSystemUserModeModule; import com.android.systemui.user.ui.dialog.UserDialogModule; import dagger.Module; @@ -34,7 +33,6 @@ import dagger.Provides; includes = { UserDialogModule.class, UserRepositoryModule.class, - HeadlessSystemUserModeModule.class, } ) public abstract class UserModule { diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/UserDomainLayerModule.kt b/packages/SystemUI/src/com/android/systemui/user/domain/UserDomainLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..4122404c92f70b0beee7119cb14e9fbc5c8846eb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/user/domain/UserDomainLayerModule.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.user.domain + +import com.android.systemui.user.domain.interactor.HeadlessSystemUserModeModule +import dagger.Module + +@Module(includes = [HeadlessSystemUserModeModule::class]) object UserDomainLayerModule diff --git a/packages/SystemUI/tests/src/com/android/CoroutineTestScopeModule.kt b/packages/SystemUI/tests/src/com/android/CoroutineTestScopeModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..360aa0f89a4692954fd7e67c7c4b12470a4c1a5d --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/CoroutineTestScopeModule.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 + +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.dagger.qualifiers.Background +import com.android.systemui.dagger.qualifiers.Main +import dagger.Binds +import dagger.Module +import dagger.Provides +import kotlin.coroutines.ContinuationInterceptor +import kotlin.coroutines.CoroutineContext +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.test.TestCoroutineScheduler +import kotlinx.coroutines.test.TestDispatcher +import kotlinx.coroutines.test.TestScope + +@Module(includes = [CoroutineTestScopeModule.Bindings::class]) +class CoroutineTestScopeModule +private constructor( + @get:Provides val scope: TestScope, + @get:Provides val dispatcher: TestDispatcher, + @get:Provides val scheduler: TestCoroutineScheduler = dispatcher.scheduler, +) { + + constructor() : this(TestScope()) + + constructor( + scope: TestScope + ) : this(scope, scope.coroutineContext[ContinuationInterceptor] as TestDispatcher) + + constructor(context: CoroutineContext) : this(TestScope(context)) + + @get:[Provides Application] + val appScope: CoroutineScope = scope.backgroundScope + + @Module + interface Bindings { + @Binds @Main fun bindMainDispatcher(dispatcher: TestDispatcher): CoroutineDispatcher + @Binds @Background fun bindBgDispatcher(dispatcher: TestDispatcher): CoroutineDispatcher + } +} diff --git a/packages/SystemUI/tests/src/com/android/SysUITestModule.kt b/packages/SystemUI/tests/src/com/android/SysUITestModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..ea74510a907050a4aa87591532fdfd1f40edd72c --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/SysUITestModule.kt @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 + +import android.content.Context +import com.android.systemui.FakeSystemUiModule +import com.android.systemui.SysuiTestCase +import com.android.systemui.broadcast.BroadcastDispatcher +import com.android.systemui.dagger.qualifiers.Application +import dagger.Module +import dagger.Provides + +@Module( + includes = + [ + TestMocksModule::class, + CoroutineTestScopeModule::class, + FakeSystemUiModule::class, + ] +) +class SysUITestModule { + @Provides fun provideContext(test: SysuiTestCase): Context = test.context + + @Provides @Application fun provideAppContext(test: SysuiTestCase): Context = test.context + + @Provides + fun provideBroadcastDispatcher(test: SysuiTestCase): BroadcastDispatcher = + test.fakeBroadcastDispatcher +} diff --git a/packages/SystemUI/tests/src/com/android/TestMocksModule.kt b/packages/SystemUI/tests/src/com/android/TestMocksModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..8990583cf9de73575a67343aa126077d9710596d --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/TestMocksModule.kt @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 + +import android.app.ActivityManager +import android.app.admin.DevicePolicyManager +import android.os.UserManager +import com.android.keyguard.KeyguardSecurityModel +import com.android.keyguard.KeyguardUpdateMonitor +import com.android.systemui.GuestResumeSessionReceiver +import com.android.systemui.demomode.DemoModeController +import com.android.systemui.log.LogBuffer +import com.android.systemui.log.dagger.BroadcastDispatcherLog +import com.android.systemui.log.dagger.SceneFrameworkLog +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.plugins.DarkIconDispatcher +import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.statusbar.NotificationListener +import com.android.systemui.statusbar.NotificationMediaManager +import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator +import com.android.systemui.statusbar.phone.DozeParameters +import com.android.systemui.statusbar.phone.KeyguardBypassController +import com.android.systemui.statusbar.phone.ScreenOffAnimationController +import com.android.systemui.statusbar.policy.ConfigurationController +import com.android.systemui.statusbar.policy.DeviceProvisionedController +import com.android.systemui.statusbar.policy.SplitShadeStateController +import com.android.systemui.statusbar.window.StatusBarWindowController +import com.android.systemui.util.mockito.mock +import com.android.wm.shell.bubbles.Bubbles +import dagger.Module +import dagger.Provides +import java.util.Optional + +@Module +data class TestMocksModule( + @get:Provides val activityStarter: ActivityStarter = mock(), + @get:Provides val bubbles: Optional<Bubbles> = Optional.of(mock()), + @get:Provides val configurationController: ConfigurationController = mock(), + @get:Provides val darkIconDispatcher: DarkIconDispatcher = mock(), + @get:Provides val demoModeController: DemoModeController = mock(), + @get:Provides val deviceProvisionedController: DeviceProvisionedController = mock(), + @get:Provides val dozeParameters: DozeParameters = mock(), + @get:Provides val guestResumeSessionReceiver: GuestResumeSessionReceiver = mock(), + @get:Provides val keyguardBypassController: KeyguardBypassController = mock(), + @get:Provides val keyguardSecurityModel: KeyguardSecurityModel = mock(), + @get:Provides val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock(), + @get:Provides val notifListener: NotificationListener = mock(), + @get:Provides val notifMediaManager: NotificationMediaManager = mock(), + @get:Provides val screenOffAnimController: ScreenOffAnimationController = mock(), + @get:Provides val splitShadeStateController: SplitShadeStateController = mock(), + @get:Provides val statusBarStateController: StatusBarStateController = mock(), + @get:Provides val statusBarWindowController: StatusBarWindowController = mock(), + @get:Provides val wakeUpCoordinator: NotificationWakeUpCoordinator = mock(), + + // log buffers + @get:[Provides BroadcastDispatcherLog] + val broadcastDispatcherLogger: LogBuffer = mock(), + @get:[Provides SceneFrameworkLog] + val sceneLogger: LogBuffer = mock(), + + // framework mocks + @get:Provides val activityManager: ActivityManager = mock(), + @get:Provides val devicePolicyManager: DevicePolicyManager = mock(), + @get:Provides val userManager: UserManager = mock(), +) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/DisplayStateRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/DisplayStateRepositoryTest.kt index c9c46cbe84201f7de06b5ab97ed1091b9fe31fa5..c825d2ea65ad1e1aeeeca9bdc269f4fa77895bda 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/DisplayStateRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/DisplayStateRepositoryTest.kt @@ -82,6 +82,11 @@ class DisplayStateRepositoryTest : SysuiTestCase() { rearDisplayDeviceStates ) + mContext.orCreateTestableResources.addOverride( + com.android.internal.R.bool.config_reverseDefaultRotation, + false + ) + mContext = spy(mContext) whenever(mContext.display).thenReturn(display) diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt deleted file mode 100644 index 8eb274a65bc4f869040bf263f1742b056029ec9f..0000000000000000000000000000000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT 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.bouncer.data.factory - -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.SmallTest -import com.android.keyguard.KeyguardSecurityModel -import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN -import com.android.keyguard.KeyguardSecurityModel.SecurityMode.Password -import com.android.keyguard.KeyguardSecurityModel.SecurityMode.Pattern -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEFAULT -import com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT -import com.android.systemui.SysuiTestCase -import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository -import com.android.systemui.util.mockito.whenever -import com.google.common.truth.StringSubject -import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.runTest -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.MockitoAnnotations - -@SmallTest -@RunWith(AndroidJUnit4::class) -class BouncerMessageFactoryTest : SysuiTestCase() { - private lateinit var underTest: BouncerMessageFactory - - @Mock private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository - - @Mock private lateinit var securityModel: KeyguardSecurityModel - - private lateinit var testScope: TestScope - - @Before - fun setUp() { - MockitoAnnotations.initMocks(this) - testScope = TestScope() - biometricSettingsRepository = FakeBiometricSettingsRepository() - underTest = BouncerMessageFactory(biometricSettingsRepository, securityModel) - } - - @Test - fun bouncerMessages_choosesTheRightMessage_basedOnSecurityModeAndFpAuthIsAllowed() = - testScope.runTest { - primaryMessage(PROMPT_REASON_DEFAULT, mode = PIN, fpAuthAllowed = false) - .isEqualTo("Enter PIN") - primaryMessage(PROMPT_REASON_DEFAULT, mode = PIN, fpAuthAllowed = true) - .isEqualTo("Unlock with PIN or fingerprint") - - primaryMessage(PROMPT_REASON_DEFAULT, mode = Password, fpAuthAllowed = false) - .isEqualTo("Enter password") - primaryMessage(PROMPT_REASON_DEFAULT, mode = Password, fpAuthAllowed = true) - .isEqualTo("Unlock with password or fingerprint") - - primaryMessage(PROMPT_REASON_DEFAULT, mode = Pattern, fpAuthAllowed = false) - .isEqualTo("Draw pattern") - primaryMessage(PROMPT_REASON_DEFAULT, mode = Pattern, fpAuthAllowed = true) - .isEqualTo("Unlock with pattern or fingerprint") - } - - @Test - fun bouncerMessages_overridesSecondaryMessageValue() = - testScope.runTest { - val bouncerMessageModel = - bouncerMessageModel( - PIN, - true, - PROMPT_REASON_DEFAULT, - secondaryMessageOverride = "face acquisition message" - )!! - assertThat(context.resources.getString(bouncerMessageModel.message!!.messageResId!!)) - .isEqualTo("Unlock with PIN or fingerprint") - assertThat(bouncerMessageModel.secondaryMessage!!.message!!) - .isEqualTo("face acquisition message") - } - - @Test - fun bouncerMessages_setsPrimaryAndSecondaryMessage_basedOnSecurityModeAndFpAuthIsAllowed() = - testScope.runTest { - primaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = PIN, - fpAuthAllowed = true - ) - .isEqualTo("Wrong PIN. Try again.") - secondaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = PIN, - fpAuthAllowed = true - ) - .isEqualTo("Or unlock with fingerprint") - - primaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = Password, - fpAuthAllowed = true - ) - .isEqualTo("Wrong password. Try again.") - secondaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = Password, - fpAuthAllowed = true - ) - .isEqualTo("Or unlock with fingerprint") - - primaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = Pattern, - fpAuthAllowed = true - ) - .isEqualTo("Wrong pattern. Try again.") - secondaryMessage( - PROMPT_REASON_INCORRECT_PRIMARY_AUTH_INPUT, - mode = Pattern, - fpAuthAllowed = true - ) - .isEqualTo("Or unlock with fingerprint") - } - - private fun primaryMessage( - reason: Int, - mode: KeyguardSecurityModel.SecurityMode, - fpAuthAllowed: Boolean - ): StringSubject { - return assertThat( - context.resources.getString( - bouncerMessageModel(mode, fpAuthAllowed, reason)!!.message!!.messageResId!! - ) - )!! - } - - private fun secondaryMessage( - reason: Int, - mode: KeyguardSecurityModel.SecurityMode, - fpAuthAllowed: Boolean - ): StringSubject { - return assertThat( - context.resources.getString( - bouncerMessageModel(mode, fpAuthAllowed, reason)!!.secondaryMessage!!.messageResId!! - ) - )!! - } - - private fun bouncerMessageModel( - mode: KeyguardSecurityModel.SecurityMode, - fpAuthAllowed: Boolean, - reason: Int, - secondaryMessageOverride: String? = null, - ): BouncerMessageModel? { - whenever(securityModel.getSecurityMode(0)).thenReturn(mode) - biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(fpAuthAllowed) - - return underTest.createFromPromptReason( - reason, - 0, - secondaryMsgOverride = secondaryMessageOverride - ) - } -} diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt deleted file mode 100644 index f158b433d5dc1ac715cf72cbd1b1157a20fcf0d9..0000000000000000000000000000000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT 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.bouncer.data.repo - -import android.content.pm.UserInfo -import android.hardware.biometrics.BiometricSourceType -import android.testing.TestableLooper -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.SmallTest -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN -import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE -import com.android.keyguard.KeyguardSecurityModel -import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN -import com.android.keyguard.KeyguardUpdateMonitor -import com.android.keyguard.KeyguardUpdateMonitorCallback -import com.android.systemui.res.R -import com.android.systemui.res.R.string.keyguard_enter_pin -import com.android.systemui.res.R.string.kg_prompt_after_dpm_lock -import com.android.systemui.res.R.string.kg_prompt_after_user_lockdown_pin -import com.android.systemui.res.R.string.kg_prompt_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_pin_auth_timeout -import com.android.systemui.res.R.string.kg_prompt_reason_restart_pin -import com.android.systemui.res.R.string.kg_prompt_unattended_update -import com.android.systemui.res.R.string.kg_trust_agent_disabled -import com.android.systemui.SysuiTestCase -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory -import com.android.systemui.bouncer.data.repository.BouncerMessageRepository -import com.android.systemui.bouncer.data.repository.BouncerMessageRepositoryImpl -import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import com.android.systemui.bouncer.shared.model.Message -import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.flags.SystemPropertiesHelper -import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository -import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository -import com.android.systemui.keyguard.data.repository.FakeTrustRepository -import com.android.systemui.keyguard.shared.model.AuthenticationFlags -import com.android.systemui.user.data.repository.FakeUserRepository -import com.android.systemui.util.mockito.whenever -import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.runCurrent -import kotlinx.coroutines.test.runTest -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentCaptor -import org.mockito.Captor -import org.mockito.Mock -import org.mockito.Mockito.verify -import org.mockito.MockitoAnnotations - -@OptIn(ExperimentalCoroutinesApi::class) -@SmallTest -@TestableLooper.RunWithLooper(setAsMainLooper = true) -@RunWith(AndroidJUnit4::class) -class BouncerMessageRepositoryTest : SysuiTestCase() { - - @Mock private lateinit var updateMonitor: KeyguardUpdateMonitor - @Mock private lateinit var securityModel: KeyguardSecurityModel - @Mock private lateinit var systemPropertiesHelper: SystemPropertiesHelper - @Captor - private lateinit var updateMonitorCallback: ArgumentCaptor<KeyguardUpdateMonitorCallback> - - private lateinit var underTest: BouncerMessageRepository - private lateinit var trustRepository: FakeTrustRepository - private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository - private lateinit var userRepository: FakeUserRepository - private lateinit var fingerprintRepository: FakeDeviceEntryFingerprintAuthRepository - private lateinit var testScope: TestScope - - @Before - fun setUp() { - MockitoAnnotations.initMocks(this) - trustRepository = FakeTrustRepository() - biometricSettingsRepository = FakeBiometricSettingsRepository() - userRepository = FakeUserRepository() - userRepository.setUserInfos(listOf(PRIMARY_USER)) - fingerprintRepository = FakeDeviceEntryFingerprintAuthRepository() - testScope = TestScope() - - biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(false) - whenever(securityModel.getSecurityMode(PRIMARY_USER_ID)).thenReturn(PIN) - underTest = - BouncerMessageRepositoryImpl( - trustRepository = trustRepository, - biometricSettingsRepository = biometricSettingsRepository, - updateMonitor = updateMonitor, - bouncerMessageFactory = - BouncerMessageFactory(biometricSettingsRepository, securityModel), - userRepository = userRepository, - fingerprintAuthRepository = fingerprintRepository, - systemPropertiesHelper = systemPropertiesHelper - ) - } - - @Test - fun setCustomMessage_propagatesState() = - testScope.runTest { - underTest.setCustomMessage(message("not empty")) - - val customMessage = collectLastValue(underTest.customMessage) - - assertThat(customMessage()).isEqualTo(message("not empty")) - } - - @Test - fun setFaceMessage_propagatesState() = - testScope.runTest { - underTest.setFaceAcquisitionMessage(message("not empty")) - - val faceAcquisitionMessage = collectLastValue(underTest.faceAcquisitionMessage) - - assertThat(faceAcquisitionMessage()).isEqualTo(message("not empty")) - } - - @Test - fun setFpMessage_propagatesState() = - testScope.runTest { - underTest.setFingerprintAcquisitionMessage(message("not empty")) - - val fpAcquisitionMsg = collectLastValue(underTest.fingerprintAcquisitionMessage) - - assertThat(fpAcquisitionMsg()).isEqualTo(message("not empty")) - } - - @Test - fun setPrimaryAuthMessage_propagatesState() = - testScope.runTest { - underTest.setPrimaryAuthMessage(message("not empty")) - - val primaryAuthMessage = collectLastValue(underTest.primaryAuthMessage) - - assertThat(primaryAuthMessage()).isEqualTo(message("not empty")) - } - - @Test - fun biometricAuthMessage_propagatesBiometricAuthMessages() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - val biometricAuthMessage = collectLastValue(underTest.biometricAuthMessage) - runCurrent() - - verify(updateMonitor).registerCallback(updateMonitorCallback.capture()) - - updateMonitorCallback.value.onBiometricAuthFailed(BiometricSourceType.FINGERPRINT) - - assertThat(biometricAuthMessage()) - .isEqualTo(message(R.string.kg_fp_not_recognized, R.string.kg_bio_try_again_or_pin)) - - updateMonitorCallback.value.onBiometricAuthFailed(BiometricSourceType.FACE) - - assertThat(biometricAuthMessage()) - .isEqualTo( - message(R.string.bouncer_face_not_recognized, R.string.kg_bio_try_again_or_pin) - ) - - updateMonitorCallback.value.onBiometricAcquired(BiometricSourceType.FACE, 0) - - assertThat(biometricAuthMessage()).isNull() - } - - @Test - fun onFaceLockout_propagatesState() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - val lockoutMessage = collectLastValue(underTest.biometricLockedOutMessage) - runCurrent() - verify(updateMonitor).registerCallback(updateMonitorCallback.capture()) - - whenever(updateMonitor.isFaceLockedOut).thenReturn(true) - updateMonitorCallback.value.onLockedOutStateChanged(BiometricSourceType.FACE) - - assertThat(lockoutMessage()) - .isEqualTo(message(keyguard_enter_pin, R.string.kg_face_locked_out)) - - whenever(updateMonitor.isFaceLockedOut).thenReturn(false) - updateMonitorCallback.value.onLockedOutStateChanged(BiometricSourceType.FACE) - assertThat(lockoutMessage()).isNull() - } - - @Test - fun onFingerprintLockout_propagatesState() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - val lockedOutMessage = collectLastValue(underTest.biometricLockedOutMessage) - runCurrent() - - fingerprintRepository.setLockedOut(true) - - assertThat(lockedOutMessage()) - .isEqualTo(message(keyguard_enter_pin, R.string.kg_fp_locked_out)) - - fingerprintRepository.setLockedOut(false) - assertThat(lockedOutMessage()).isNull() - } - - @Test - fun onRestartForMainlineUpdate_shouldProvideRelevantMessage() = - testScope.runTest { - whenever(systemPropertiesHelper.get("sys.boot.reason.last")) - .thenReturn("reboot,mainline_update") - userRepository.setSelectedUserInfo(PRIMARY_USER) - biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(true) - - verifyMessagesForAuthFlag( - STRONG_AUTH_REQUIRED_AFTER_BOOT to - Pair(keyguard_enter_pin, R.string.kg_prompt_after_update_pin), - ) - } - - @Test - fun onAuthFlagsChanged_withTrustNotManagedAndNoBiometrics_isANoop() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - trustRepository.setCurrentUserTrustManaged(false) - biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) - biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) - - verifyMessagesForAuthFlag( - STRONG_AUTH_NOT_REQUIRED to null, - STRONG_AUTH_REQUIRED_AFTER_BOOT to null, - SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to null, - STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to null, - STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to null, - STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to null, - STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to null, - SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to null, - STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to null, - STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to - Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock), - ) - } - - @Test - fun authFlagsChanges_withTrustManaged_providesDifferentMessages() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) - biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) - - trustRepository.setCurrentUserTrustManaged(true) - - verifyMessagesForAuthFlag( - STRONG_AUTH_NOT_REQUIRED to null, - STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to null, - STRONG_AUTH_REQUIRED_AFTER_BOOT to - Pair(keyguard_enter_pin, kg_prompt_reason_restart_pin), - STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_pin_auth_timeout), - STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to - Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock), - SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to - Pair(keyguard_enter_pin, kg_trust_agent_disabled), - SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to - Pair(keyguard_enter_pin, kg_trust_agent_disabled), - STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to - Pair(keyguard_enter_pin, kg_prompt_after_user_lockdown_pin), - STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to - Pair(keyguard_enter_pin, kg_prompt_unattended_update), - STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_auth_timeout), - ) - } - - @Test - fun authFlagsChanges_withFaceEnrolled_providesDifferentMessages() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - trustRepository.setCurrentUserTrustManaged(false) - biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) - - biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(true) - - verifyMessagesForAuthFlag( - STRONG_AUTH_NOT_REQUIRED to null, - STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to null, - SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to null, - SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to null, - STRONG_AUTH_REQUIRED_AFTER_BOOT to - Pair(keyguard_enter_pin, kg_prompt_reason_restart_pin), - STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_pin_auth_timeout), - STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to - Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock), - STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to - Pair(keyguard_enter_pin, kg_prompt_after_user_lockdown_pin), - STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to - Pair(keyguard_enter_pin, kg_prompt_unattended_update), - STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_auth_timeout), - ) - } - - @Test - fun authFlagsChanges_withFingerprintEnrolled_providesDifferentMessages() = - testScope.runTest { - userRepository.setSelectedUserInfo(PRIMARY_USER) - trustRepository.setCurrentUserTrustManaged(false) - biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) - - biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(true) - - verifyMessagesForAuthFlag( - STRONG_AUTH_NOT_REQUIRED to null, - STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to null, - SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to null, - SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to null, - STRONG_AUTH_REQUIRED_AFTER_BOOT to - Pair(keyguard_enter_pin, kg_prompt_reason_restart_pin), - STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_pin_auth_timeout), - STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to - Pair(keyguard_enter_pin, kg_prompt_after_dpm_lock), - STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to - Pair(keyguard_enter_pin, kg_prompt_after_user_lockdown_pin), - STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to - Pair(keyguard_enter_pin, kg_prompt_unattended_update), - STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to - Pair(keyguard_enter_pin, kg_prompt_auth_timeout), - ) - } - - private fun TestScope.verifyMessagesForAuthFlag( - vararg authFlagToExpectedMessages: Pair<Int, Pair<Int, Int>?> - ) { - val authFlagsMessage = collectLastValue(underTest.authFlagsMessage) - - authFlagToExpectedMessages.forEach { (flag, messagePair) -> - biometricSettingsRepository.setAuthenticationFlags( - AuthenticationFlags(PRIMARY_USER_ID, flag) - ) - - assertThat(authFlagsMessage()) - .isEqualTo(messagePair?.let { message(it.first, it.second) }) - } - } - - private fun message(primaryResId: Int, secondaryResId: Int): BouncerMessageModel { - return BouncerMessageModel( - message = Message(messageResId = primaryResId, animate = false), - secondaryMessage = Message(messageResId = secondaryResId, animate = false) - ) - } - private fun message(value: String): BouncerMessageModel { - return BouncerMessageModel(message = Message(message = value)) - } - - companion object { - private const val PRIMARY_USER_ID = 0 - private val PRIMARY_USER = - UserInfo( - /* id= */ PRIMARY_USER_ID, - /* name= */ "primary user", - /* flags= */ UserInfo.FLAG_PRIMARY - ) - } -} diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt index c1286a1664217be672e2461a5f49598acea9c056..cc4eca546e174610cbcc7f2801ad7c75dbcf883d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt @@ -17,187 +17,216 @@ package com.android.systemui.bouncer.domain.interactor import android.content.pm.UserInfo +import android.os.Handler import android.testing.TestableLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.internal.widget.LockPatternUtils import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN -import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown -import com.android.systemui.res.R.string.kg_unlock_with_pin_or_fp +import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.SysuiTestCase -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory -import com.android.systemui.bouncer.data.repository.FakeBouncerMessageRepository +import com.android.systemui.biometrics.data.repository.FaceSensorInfo +import com.android.systemui.biometrics.data.repository.FakeFacePropertyRepository +import com.android.systemui.biometrics.shared.model.SensorStrength +import com.android.systemui.bouncer.data.repository.BouncerMessageRepositoryImpl +import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import com.android.systemui.bouncer.shared.model.Message -import com.android.systemui.coroutines.FlowValue +import com.android.systemui.bouncer.ui.BouncerView +import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.flags.SystemPropertiesHelper +import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.FakeTrustRepository +import com.android.systemui.keyguard.shared.model.AuthenticationFlags +import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown +import com.android.systemui.res.R.string.kg_trust_agent_disabled +import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.util.mockito.KotlinArgumentCaptor import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.eq import org.mockito.Mock +import org.mockito.Mockito import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations +@OptIn(ExperimentalCoroutinesApi::class) @SmallTest @TestableLooper.RunWithLooper(setAsMainLooper = true) @RunWith(AndroidJUnit4::class) class BouncerMessageInteractorTest : SysuiTestCase() { + private val countDownTimerCallback = KotlinArgumentCaptor(CountDownTimerCallback::class.java) + private val repository = BouncerMessageRepositoryImpl() + private val userRepository = FakeUserRepository() + private val fakeTrustRepository = FakeTrustRepository() + private val fakeFacePropertyRepository = FakeFacePropertyRepository() + private val bouncerRepository = FakeKeyguardBouncerRepository() + private val fakeDeviceEntryFingerprintAuthRepository = + FakeDeviceEntryFingerprintAuthRepository() + private val fakeDeviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository() + private val biometricSettingsRepository: FakeBiometricSettingsRepository = + FakeBiometricSettingsRepository() + @Mock private lateinit var updateMonitor: KeyguardUpdateMonitor @Mock private lateinit var securityModel: KeyguardSecurityModel - @Mock private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository @Mock private lateinit var countDownTimerUtil: CountDownTimerUtil - private lateinit var countDownTimerCallback: KotlinArgumentCaptor<CountDownTimerCallback> - private lateinit var underTest: BouncerMessageInteractor - private lateinit var repository: FakeBouncerMessageRepository - private lateinit var userRepository: FakeUserRepository + @Mock private lateinit var systemPropertiesHelper: SystemPropertiesHelper + @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + + private lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor private lateinit var testScope: TestScope - private lateinit var bouncerMessage: FlowValue<BouncerMessageModel?> + private lateinit var underTest: BouncerMessageInteractor @Before fun setUp() { MockitoAnnotations.initMocks(this) - repository = FakeBouncerMessageRepository() - userRepository = FakeUserRepository() userRepository.setUserInfos(listOf(PRIMARY_USER)) testScope = TestScope() - countDownTimerCallback = KotlinArgumentCaptor(CountDownTimerCallback::class.java) - biometricSettingsRepository = FakeBiometricSettingsRepository() - allowTestableLooperAsMainThread() whenever(securityModel.getSecurityMode(PRIMARY_USER_ID)).thenReturn(PIN) biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true) + overrideResource(kg_trust_agent_disabled, "Trust agent is unavailable") } suspend fun TestScope.init() { userRepository.setSelectedUserInfo(PRIMARY_USER) - val featureFlags = FakeFeatureFlags() - featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true) + val featureFlags = FakeFeatureFlags().apply { set(Flags.REVAMPED_BOUNCER_MESSAGES, true) } + primaryBouncerInteractor = + PrimaryBouncerInteractor( + bouncerRepository, + Mockito.mock(BouncerView::class.java), + Mockito.mock(Handler::class.java), + Mockito.mock(KeyguardStateController::class.java), + Mockito.mock(KeyguardSecurityModel::class.java), + Mockito.mock(PrimaryBouncerCallbackInteractor::class.java), + Mockito.mock(FalsingCollector::class.java), + Mockito.mock(DismissCallbackRegistry::class.java), + context, + keyguardUpdateMonitor, + fakeTrustRepository, + testScope.backgroundScope, + ) underTest = BouncerMessageInteractor( repository = repository, - factory = BouncerMessageFactory(biometricSettingsRepository, securityModel), userRepository = userRepository, countDownTimerUtil = countDownTimerUtil, - featureFlags = featureFlags + featureFlags = featureFlags, + updateMonitor = updateMonitor, + biometricSettingsRepository = biometricSettingsRepository, + applicationScope = this.backgroundScope, + trustRepository = fakeTrustRepository, + systemPropertiesHelper = systemPropertiesHelper, + primaryBouncerInteractor = primaryBouncerInteractor, + facePropertyRepository = fakeFacePropertyRepository, + deviceEntryFingerprintAuthRepository = fakeDeviceEntryFingerprintAuthRepository, + faceAuthRepository = fakeDeviceEntryFaceAuthRepository, + securityModel = securityModel ) - bouncerMessage = collectLastValue(underTest.bouncerMessage) + biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true) + fakeDeviceEntryFingerprintAuthRepository.setLockedOut(false) + bouncerRepository.setPrimaryShow(true) + runCurrent() } @Test - fun onIncorrectSecurityInput_setsTheBouncerModelInTheRepository() = + fun onIncorrectSecurityInput_providesTheAppropriateValueForBouncerMessage() = testScope.runTest { init() + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.onPrimaryAuthIncorrectAttempt() - assertThat(repository.primaryAuthMessage).isNotNull() - assertThat( - context.resources.getString( - repository.primaryAuthMessage.value!!.message!!.messageResId!! - ) - ) - .isEqualTo("Wrong PIN. Try again.") + assertThat(bouncerMessage).isNotNull() + assertThat(primaryResMessage(bouncerMessage)).isEqualTo("Wrong PIN. Try again.") } @Test fun onUserStartsPrimaryAuthInput_clearsAllSetBouncerMessages() = testScope.runTest { init() - repository.setCustomMessage(message("not empty")) - repository.setFaceAcquisitionMessage(message("not empty")) - repository.setFingerprintAcquisitionMessage(message("not empty")) - repository.setPrimaryAuthMessage(message("not empty")) + val bouncerMessage by collectLastValue(underTest.bouncerMessage) + underTest.onPrimaryAuthIncorrectAttempt() + assertThat(primaryResMessage(bouncerMessage)).isEqualTo("Wrong PIN. Try again.") underTest.onPrimaryBouncerUserInput() - assertThat(repository.customMessage.value).isNull() - assertThat(repository.faceAcquisitionMessage.value).isNull() - assertThat(repository.fingerprintAcquisitionMessage.value).isNull() - assertThat(repository.primaryAuthMessage.value).isNull() + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") } @Test - fun onBouncerBeingHidden_clearsAllSetBouncerMessages() = - testScope.runTest { - init() - repository.setCustomMessage(message("not empty")) - repository.setFaceAcquisitionMessage(message("not empty")) - repository.setFingerprintAcquisitionMessage(message("not empty")) - repository.setPrimaryAuthMessage(message("not empty")) - - underTest.onBouncerBeingHidden() - - assertThat(repository.customMessage.value).isNull() - assertThat(repository.faceAcquisitionMessage.value).isNull() - assertThat(repository.fingerprintAcquisitionMessage.value).isNull() - assertThat(repository.primaryAuthMessage.value).isNull() - } - - @Test - fun setCustomMessage_setsRepositoryValue() = + fun setCustomMessage_propagateValue() = testScope.runTest { init() + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.setCustomMessage("not empty") - val customMessage = repository.customMessage - assertThat(customMessage.value!!.message!!.messageResId) - .isEqualTo(kg_unlock_with_pin_or_fp) - assertThat(customMessage.value!!.secondaryMessage!!.message).isEqualTo("not empty") + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isEqualTo("not empty") underTest.setCustomMessage(null) - assertThat(customMessage.value).isNull() + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isNull() } @Test - fun setFaceMessage_setsRepositoryValue() = + fun setFaceMessage_propagateValue() = testScope.runTest { init() + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.setFaceAcquisitionMessage("not empty") - val faceAcquisitionMessage = repository.faceAcquisitionMessage - - assertThat(faceAcquisitionMessage.value!!.message!!.messageResId) - .isEqualTo(kg_unlock_with_pin_or_fp) - assertThat(faceAcquisitionMessage.value!!.secondaryMessage!!.message) - .isEqualTo("not empty") + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isEqualTo("not empty") underTest.setFaceAcquisitionMessage(null) - assertThat(faceAcquisitionMessage.value).isNull() + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isNull() } @Test - fun setFingerprintMessage_setsRepositoryValue() = + fun setFingerprintMessage_propagateValue() = testScope.runTest { init() + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.setFingerprintAcquisitionMessage("not empty") - val fingerprintAcquisitionMessage = repository.fingerprintAcquisitionMessage - - assertThat(fingerprintAcquisitionMessage.value!!.message!!.messageResId) - .isEqualTo(kg_unlock_with_pin_or_fp) - assertThat(fingerprintAcquisitionMessage.value!!.secondaryMessage!!.message) - .isEqualTo("not empty") + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isEqualTo("not empty") underTest.setFingerprintAcquisitionMessage(null) - assertThat(fingerprintAcquisitionMessage.value).isNull() + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isNull() } @Test fun onPrimaryAuthLockout_startsTimerForSpecifiedNumberOfSeconds() = testScope.runTest { init() + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.onPrimaryAuthLockedOut(3) @@ -206,7 +235,7 @@ class BouncerMessageInteractorTest : SysuiTestCase() { countDownTimerCallback.value.onTick(2000L) - val primaryMessage = repository.primaryAuthMessage.value!!.message!! + val primaryMessage = bouncerMessage!!.message!! assertThat(primaryMessage.messageResId!!) .isEqualTo(kg_too_many_failed_attempts_countdown) assertThat(primaryMessage.formatterArgs).isEqualTo(mapOf(Pair("count", 2))) @@ -216,10 +245,7 @@ class BouncerMessageInteractorTest : SysuiTestCase() { fun onPrimaryAuthLockout_timerComplete_resetsRepositoryMessages() = testScope.runTest { init() - repository.setCustomMessage(message("not empty")) - repository.setFaceAcquisitionMessage(message("not empty")) - repository.setFingerprintAcquisitionMessage(message("not empty")) - repository.setPrimaryAuthMessage(message("not empty")) + val bouncerMessage by collectLastValue(underTest.bouncerMessage) underTest.onPrimaryAuthLockedOut(3) @@ -228,59 +254,269 @@ class BouncerMessageInteractorTest : SysuiTestCase() { countDownTimerCallback.value.onFinish() - assertThat(repository.customMessage.value).isNull() - assertThat(repository.faceAcquisitionMessage.value).isNull() - assertThat(repository.fingerprintAcquisitionMessage.value).isNull() - assertThat(repository.primaryAuthMessage.value).isNull() + assertThat(primaryResMessage(bouncerMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(bouncerMessage?.secondaryMessage?.message).isNull() + } + + @Test + fun onFaceLockout_propagatesState() = + testScope.runTest { + init() + val lockoutMessage by collectLastValue(underTest.bouncerMessage) + + fakeDeviceEntryFaceAuthRepository.setLockedOut(true) + runCurrent() + + assertThat(primaryResMessage(lockoutMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(secondaryResMessage(lockoutMessage)) + .isEqualTo("Can’t unlock with face. Too many attempts.") + + fakeDeviceEntryFaceAuthRepository.setLockedOut(false) + runCurrent() + + assertThat(primaryResMessage(lockoutMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(lockoutMessage?.secondaryMessage?.message).isNull() } @Test - fun bouncerMessage_hasPriorityOrderOfMessages() = + fun onFaceLockout_whenItIsClass3_propagatesState() = testScope.runTest { init() - repository.setBiometricAuthMessage(message("biometric message")) - repository.setFaceAcquisitionMessage(message("face acquisition message")) - repository.setFingerprintAcquisitionMessage(message("fingerprint acquisition message")) - repository.setPrimaryAuthMessage(message("primary auth message")) - repository.setAuthFlagsMessage(message("auth flags message")) - repository.setBiometricLockedOutMessage(message("biometrics locked out")) - repository.setCustomMessage(message("custom message")) + val lockoutMessage by collectLastValue(underTest.bouncerMessage) + fakeFacePropertyRepository.setSensorInfo(FaceSensorInfo(1, SensorStrength.STRONG)) + fakeDeviceEntryFaceAuthRepository.setLockedOut(true) + runCurrent() + + assertThat(primaryResMessage(lockoutMessage)).isEqualTo("Enter PIN") + assertThat(secondaryResMessage(lockoutMessage)) + .isEqualTo("PIN is required after too many attempts") + + fakeDeviceEntryFaceAuthRepository.setLockedOut(false) + runCurrent() - assertThat(bouncerMessage()).isEqualTo(message("primary auth message")) + assertThat(primaryResMessage(lockoutMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(lockoutMessage?.secondaryMessage?.message).isNull() + } + + @Test + fun onFingerprintLockout_propagatesState() = + testScope.runTest { + init() + val lockedOutMessage by collectLastValue(underTest.bouncerMessage) - repository.setPrimaryAuthMessage(null) + fakeDeviceEntryFingerprintAuthRepository.setLockedOut(true) + runCurrent() - assertThat(bouncerMessage()).isEqualTo(message("biometric message")) + assertThat(primaryResMessage(lockedOutMessage)).isEqualTo("Enter PIN") + assertThat(secondaryResMessage(lockedOutMessage)) + .isEqualTo("PIN is required after too many attempts") - repository.setBiometricAuthMessage(null) + fakeDeviceEntryFingerprintAuthRepository.setLockedOut(false) + runCurrent() - assertThat(bouncerMessage()).isEqualTo(message("fingerprint acquisition message")) + assertThat(primaryResMessage(lockedOutMessage)) + .isEqualTo("Unlock with PIN or fingerprint") + assertThat(lockedOutMessage?.secondaryMessage?.message).isNull() + } - repository.setFingerprintAcquisitionMessage(null) + @Test + fun onRestartForMainlineUpdate_shouldProvideRelevantMessage() = + testScope.runTest { + init() + whenever(systemPropertiesHelper.get("sys.boot.reason.last")) + .thenReturn("reboot,mainline_update") + biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(true) - assertThat(bouncerMessage()).isEqualTo(message("face acquisition message")) + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT to + Pair("Enter PIN", "Device updated. Enter PIN to continue.") + ) + } - repository.setFaceAcquisitionMessage(null) + @Test + fun onAuthFlagsChanged_withTrustNotManagedAndNoBiometrics_isANoop() = + testScope.runTest { + init() + fakeTrustRepository.setTrustUsuallyManaged(false) + biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) + biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) + + val defaultMessage = Pair("Enter PIN", null) + + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT to + defaultMessage, + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to + defaultMessage, + LockPatternUtils.StrongAuthTracker + .STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to defaultMessage, + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to + Pair("Enter PIN", "For added security, device was locked by work policy") + ) + } - assertThat(bouncerMessage()).isEqualTo(message("custom message")) + @Test + fun authFlagsChanges_withTrustManaged_providesDifferentMessages() = + testScope.runTest { + init() - repository.setCustomMessage(null) + userRepository.setSelectedUserInfo(PRIMARY_USER) + biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) + biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) + + fakeTrustRepository.setCurrentUserTrustManaged(true) + fakeTrustRepository.setTrustUsuallyManaged(true) + + val defaultMessage = Pair("Enter PIN", null) + + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED to defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT to + Pair("Enter PIN", "PIN is required after device restarts"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to + Pair("Enter PIN", "Added security required. PIN not used for a while."), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to + Pair("Enter PIN", "For added security, device was locked by work policy"), + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to + Pair("Enter PIN", "Trust agent is unavailable"), + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to + Pair("Enter PIN", "Trust agent is unavailable"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to + Pair("Enter PIN", "PIN is required after lockdown"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to + Pair("Enter PIN", "Update will install when device not in use"), + LockPatternUtils.StrongAuthTracker + .STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to + Pair( + "Enter PIN", + "Added security required. Device wasn’t unlocked for a while." + ), + ) + } - assertThat(bouncerMessage()).isEqualTo(message("auth flags message")) + @Test + fun authFlagsChanges_withFaceEnrolled_providesDifferentMessages() = + testScope.runTest { + init() + userRepository.setSelectedUserInfo(PRIMARY_USER) + fakeTrustRepository.setTrustUsuallyManaged(false) + biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false) + + biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(true) + val defaultMessage = Pair("Enter PIN", null) + + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED to defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT to + defaultMessage, + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to + defaultMessage, + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to + defaultMessage, + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT to + Pair("Enter PIN", "PIN is required after device restarts"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to + Pair("Enter PIN", "Added security required. PIN not used for a while."), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to + Pair("Enter PIN", "For added security, device was locked by work policy"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to + Pair("Enter PIN", "PIN is required after lockdown"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to + Pair("Enter PIN", "Update will install when device not in use"), + LockPatternUtils.StrongAuthTracker + .STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to + Pair( + "Enter PIN", + "Added security required. Device wasn’t unlocked for a while." + ), + ) + } - repository.setAuthFlagsMessage(null) + @Test + fun authFlagsChanges_withFingerprintEnrolled_providesDifferentMessages() = + testScope.runTest { + init() + userRepository.setSelectedUserInfo(PRIMARY_USER) + fakeTrustRepository.setCurrentUserTrustManaged(false) + biometricSettingsRepository.setIsFaceAuthEnrolledAndEnabled(false) - assertThat(bouncerMessage()).isEqualTo(message("biometrics locked out")) + biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(true) + biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true) - repository.setBiometricLockedOutMessage(null) + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED to + Pair("Unlock with PIN or fingerprint", null) + ) - // sets the default message if everything else is null - assertThat(bouncerMessage()!!.message!!.messageResId) - .isEqualTo(kg_unlock_with_pin_or_fp) + biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(false) + + verifyMessagesForAuthFlag( + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST to + Pair("Enter PIN", null), + LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_TRUSTAGENT_EXPIRED to + Pair("Enter PIN", null), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT to + Pair("Enter PIN", "PIN is required after device restarts"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_TIMEOUT to + Pair("Enter PIN", "Added security required. PIN not used for a while."), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW to + Pair("Enter PIN", "For added security, device was locked by work policy"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN to + Pair("Enter PIN", "PIN is required after lockdown"), + LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE to + Pair("Enter PIN", "Update will install when device not in use"), + LockPatternUtils.StrongAuthTracker + .STRONG_AUTH_REQUIRED_AFTER_NON_STRONG_BIOMETRICS_TIMEOUT to + Pair( + "Enter PIN", + "Added security required. Device wasn’t unlocked for a while." + ), + ) } - private fun message(value: String): BouncerMessageModel { - return BouncerMessageModel(message = Message(message = value)) + private fun primaryResMessage(bouncerMessage: BouncerMessageModel?) = + resString(bouncerMessage?.message?.messageResId) + + private fun secondaryResMessage(bouncerMessage: BouncerMessageModel?) = + resString(bouncerMessage?.secondaryMessage?.messageResId) + + private fun resString(msgResId: Int?): String? = + msgResId?.let { context.resources.getString(it) } + + private fun TestScope.verifyMessagesForAuthFlag( + vararg authFlagToExpectedMessages: Pair<Int, Pair<String, String?>> + ) { + val authFlagsMessage by collectLastValue(underTest.bouncerMessage) + + authFlagToExpectedMessages.forEach { (flag, messagePair) -> + biometricSettingsRepository.setAuthenticationFlags( + AuthenticationFlags(PRIMARY_USER_ID, flag) + ) + runCurrent() + + assertThat(primaryResMessage(authFlagsMessage)).isEqualTo(messagePair.first) + if (messagePair.second == null) { + assertThat(authFlagsMessage?.secondaryMessage?.messageResId).isEqualTo(0) + assertThat(authFlagsMessage?.secondaryMessage?.message).isNull() + } else { + assertThat(authFlagsMessage?.secondaryMessage?.messageResId).isNotEqualTo(0) + assertThat(secondaryResMessage(authFlagsMessage)).isEqualTo(messagePair.second) + } + } } companion object { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt index 12fa4c85c34d02a2a67717a6cb27b162aae89486..477f4555ea65cf9f92436823e596ba7cfe3ddf7e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt @@ -176,7 +176,7 @@ class HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest : SysuiTes !isFeatureEnabled -> KeyguardQuickAffordanceConfig.PickerScreenState.UnavailableOnDevice::class .java - hasServiceInfos && hasFavorites -> + hasServiceInfos && (hasFavorites || hasPanels) -> KeyguardQuickAffordanceConfig.PickerScreenState.Default::class.java else -> KeyguardQuickAffordanceConfig.PickerScreenState.Disabled::class.java } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt index 29d75001148ab9b52c4a867190d57a751508f920..7f784d88da6de0f51bac6a2651f040a6cd3e43fd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.log.LogBuffer import com.android.systemui.log.LogcatEchoTracker import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope @@ -260,4 +261,19 @@ class TrustRepositoryTest : SysuiTestCase() { listener.value.onIsActiveUnlockRunningChanged(true, users[0].id) assertThat(isCurrentUserActiveUnlockRunning).isTrue() } + + @Test + fun isTrustUsuallyManaged_providesTheValueForCurrentUser() = + testScope.runTest { + runCurrent() + val trustUsuallyManaged by collectLastValue(underTest.isCurrentUserTrustUsuallyManaged) + whenever(trustManager.isTrustUsuallyManaged(users[0].id)).thenReturn(true) + whenever(trustManager.isTrustUsuallyManaged(users[1].id)).thenReturn(false) + + userRepository.setSelectedUserInfo(users[0]) + + assertThat(trustUsuallyManaged).isTrue() + userRepository.setSelectedUserInfo(users[1]) + assertThat(trustUsuallyManaged).isFalse() + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt index 435a1f1327d91ff19cb263e64730cd8081e7c26e..5eda263be7a4adaf66c63bf41125cefaa35f353d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt @@ -57,10 +57,7 @@ class PowerInteractorTest : SysuiTestCase() { fun setUp() { MockitoAnnotations.initMocks(this) - repository = - FakePowerRepository( - initialInteractive = true, - ) + repository = FakePowerRepository() underTest = PowerInteractor( repository, 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 c041cb6d0b1ff9574b2f7c4ac8f5e545eb596a7f..f8a98afef978292e81605c20dcd0a64633832642 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 @@ -25,6 +25,8 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.SysuiTestCase; +import com.android.systemui.flags.FakeFeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.qs.QSHost; import org.junit.Before; @@ -46,10 +48,13 @@ public class TileAdapterTest extends SysuiTestCase { @Before public void setup() throws Exception { + FakeFeatureFlags fakeFeatureFlags = new FakeFeatureFlags(); + fakeFeatureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, false); + MockitoAnnotations.initMocks(this); TestableLooper.get(this).runWithLooper(() -> mTileAdapter = - new TileAdapter(mContext, mQSHost, new UiEventLoggerFake())); + new TileAdapter(mContext, mQSHost, new UiEventLoggerFake(), fakeFeatureFlags)); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt index 623a8e0f7437bdda6a4c0ec768767df634949b5f..82ee99a29427752b3f347edb6dd39b5385450fb8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt @@ -14,6 +14,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDevice import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake +import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QSTile @@ -22,6 +23,7 @@ import com.android.systemui.qs.QSHost import com.android.systemui.qs.QsEventLogger import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.tileimpl.QSTileImpl +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialogViewModel import com.android.systemui.statusbar.policy.BluetoothController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq @@ -50,6 +52,8 @@ class BluetoothTileTest : SysuiTestCase() { @Mock private lateinit var activityStarter: ActivityStarter @Mock private lateinit var bluetoothController: BluetoothController @Mock private lateinit var uiEventLogger: QsEventLogger + @Mock private lateinit var featureFlags: FeatureFlagsClassic + @Mock private lateinit var bluetoothTileDialogViewModel: BluetoothTileDialogViewModel private lateinit var testableLooper: TestableLooper private lateinit var tile: FakeBluetoothTile @@ -73,6 +77,8 @@ class BluetoothTileTest : SysuiTestCase() { activityStarter, qsLogger, bluetoothController, + featureFlags, + bluetoothTileDialogViewModel ) tile.initialize() @@ -220,6 +226,8 @@ class BluetoothTileTest : SysuiTestCase() { activityStarter: ActivityStarter, qsLogger: QSLogger, bluetoothController: BluetoothController, + featureFlags: FeatureFlagsClassic, + bluetoothTileDialogViewModel: BluetoothTileDialogViewModel ) : BluetoothTile( qsHost, @@ -232,6 +240,8 @@ class BluetoothTileTest : SysuiTestCase() { activityStarter, qsLogger, bluetoothController, + featureFlags, + bluetoothTileDialogViewModel ) { var restrictionChecked: String? = null diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt index c4cf3425ed760ffa212efd099dacb8027b926767..0552ced1d678df328db13f83923c1415781f3ed5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt @@ -17,6 +17,8 @@ package com.android.systemui.qs.tiles import android.os.Handler +import android.provider.Settings +import android.safetycenter.SafetyCenterManager import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest @@ -68,6 +70,8 @@ class CameraToggleTileTest : SysuiTestCase() { private lateinit var keyguardStateController: KeyguardStateController @Mock private lateinit var uiEventLogger: QsEventLoggerFake + @Mock + private lateinit var safetyCenterManager: SafetyCenterManager private lateinit var testableLooper: TestableLooper private lateinit var tile: CameraToggleTile @@ -89,7 +93,8 @@ class CameraToggleTileTest : SysuiTestCase() { activityStarter, qsLogger, privacyController, - keyguardStateController) + keyguardStateController, + safetyCenterManager) } @After @@ -117,4 +122,13 @@ class CameraToggleTileTest : SysuiTestCase() { assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_off)) } + + @Test + fun testLongClickIntent() { + whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(true) + assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_CONTROLS) + + whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(false) + assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_SETTINGS) + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt index 3511bb31c443111a5f3f74c6d06f521bb6f9a46f..0fcfdb6f318fe1469bdc47630413fbe93284a59d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt @@ -17,6 +17,8 @@ package com.android.systemui.qs.tiles import android.os.Handler +import android.provider.Settings +import android.safetycenter.SafetyCenterManager import android.testing.AndroidTestingRunner import android.testing.TestableLooper import androidx.test.filters.SmallTest @@ -68,6 +70,8 @@ class MicrophoneToggleTileTest : SysuiTestCase() { private lateinit var keyguardStateController: KeyguardStateController @Mock private lateinit var uiEventLogger: QsEventLogger + @Mock + private lateinit var safetyCenterManager: SafetyCenterManager private lateinit var testableLooper: TestableLooper private lateinit var tile: MicrophoneToggleTile @@ -90,7 +94,8 @@ class MicrophoneToggleTileTest : SysuiTestCase() { activityStarter, qsLogger, privacyController, - keyguardStateController) + keyguardStateController, + safetyCenterManager) } @After @@ -116,4 +121,13 @@ class MicrophoneToggleTileTest : SysuiTestCase() { assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_mic_access_off)) } + + @Test + fun testLongClickIntent() { + whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(true) + assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_CONTROLS) + + whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(false) + assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_SETTINGS) + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractorTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..fc2b7a64957d1ccdb6d42e6591ae7e936765f48c --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothStateInteractorTest.kt @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.settingslib.bluetooth.LocalBluetoothAdapter +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class BluetoothStateInteractorTest : SysuiTestCase() { + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + private val testScope = TestScope() + + private lateinit var bluetoothStateInteractor: BluetoothStateInteractor + + @Mock private lateinit var bluetoothAdapter: LocalBluetoothAdapter + @Mock private lateinit var localBluetoothManager: LocalBluetoothManager + + @Before + fun setUp() { + bluetoothStateInteractor = + BluetoothStateInteractor(localBluetoothManager, testScope.backgroundScope) + `when`(localBluetoothManager.bluetoothAdapter).thenReturn(bluetoothAdapter) + } + + @Test + fun testGet_isBluetoothEnabled() { + testScope.runTest { + `when`(bluetoothAdapter.isEnabled).thenReturn(true) + + assertThat(bluetoothStateInteractor.isBluetoothEnabled).isTrue() + } + } + + @Test + fun testGet_isBluetoothDisabled() { + testScope.runTest { + `when`(bluetoothAdapter.isEnabled).thenReturn(false) + + assertThat(bluetoothStateInteractor.isBluetoothEnabled).isFalse() + } + } + + @Test + fun testSet_bluetoothEnabled() { + testScope.runTest { + `when`(bluetoothAdapter.isEnabled).thenReturn(false) + + bluetoothStateInteractor.isBluetoothEnabled = true + verify(bluetoothAdapter).enable() + } + } + + @Test + fun testSet_bluetoothNoChange() { + testScope.runTest { + `when`(bluetoothAdapter.isEnabled).thenReturn(false) + + bluetoothStateInteractor.isBluetoothEnabled = false + verify(bluetoothAdapter, never()).enable() + } + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepositoryTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..da8f60a9b9269063d7a94a70ef6ae4b4f2803e58 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogRepositoryTest.kt @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothAdapter +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class BluetoothTileDialogRepositoryTest : SysuiTestCase() { + + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + + @Mock private lateinit var localBluetoothManager: LocalBluetoothManager + + @Mock private lateinit var bluetoothAdapter: BluetoothAdapter + + @Mock private lateinit var cachedDeviceManager: CachedBluetoothDeviceManager + + @Mock private lateinit var cachedDevicesCopy: Collection<CachedBluetoothDevice> + + private lateinit var repository: BluetoothTileDialogRepository + + @Before + fun setUp() { + `when`(localBluetoothManager.cachedDeviceManager).thenReturn(cachedDeviceManager) + `when`(cachedDeviceManager.cachedDevicesCopy).thenReturn(cachedDevicesCopy) + + repository = BluetoothTileDialogRepository(localBluetoothManager, bluetoothAdapter) + } + + @Test + fun testCachedDevices_bluetoothOff_emptyList() { + `when`(bluetoothAdapter.isEnabled).thenReturn(false) + + val result = repository.cachedDevices + + assertThat(result).isEmpty() + } + + @Test + fun testCachedDevices_bluetoothOn_returnDevice() { + `when`(bluetoothAdapter.isEnabled).thenReturn(true) + + val result = repository.cachedDevices + + assertThat(result).isEqualTo(cachedDevicesCopy) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..89fa55b319ba3a14fc2359ceada373963dc97cdb --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogTest.kt @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.graphics.drawable.Drawable +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.test.filters.SmallTest +import com.android.internal.logging.UiEventLogger +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.systemui.SysuiTestCase +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.DISABLED_ALPHA +import com.android.systemui.qs.tiles.dialog.bluetooth.BluetoothTileDialog.Companion.ENABLED_ALPHA +import com.android.systemui.res.R +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class BluetoothTileDialogTest : SysuiTestCase() { + companion object { + const val DEVICE_NAME = "device" + const val DEVICE_CONNECTION_SUMMARY = "active" + const val ENABLED = true + } + + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + + @Mock private lateinit var cachedBluetoothDevice: CachedBluetoothDevice + + @Mock private lateinit var bluetoothTileDialogCallback: BluetoothTileDialogCallback + + @Mock private lateinit var drawable: Drawable + + @Mock private lateinit var uiEventLogger: UiEventLogger + + private lateinit var icon: Pair<Drawable, String> + private lateinit var bluetoothTileDialog: BluetoothTileDialog + private lateinit var deviceItem: DeviceItem + + @Before + fun setUp() { + bluetoothTileDialog = + BluetoothTileDialog(ENABLED, bluetoothTileDialogCallback, uiEventLogger, mContext) + icon = Pair(drawable, DEVICE_NAME) + deviceItem = + DeviceItem( + type = DeviceItemType.AVAILABLE_MEDIA_BLUETOOTH_DEVICE, + cachedBluetoothDevice = cachedBluetoothDevice, + deviceName = DEVICE_NAME, + connectionSummary = DEVICE_CONNECTION_SUMMARY, + iconWithDescription = icon, + background = null + ) + `when`(cachedBluetoothDevice.isBusy).thenReturn(false) + } + + @Test + fun testShowDialog_createRecyclerViewWithAdapter() { + bluetoothTileDialog.show() + + val recyclerView = bluetoothTileDialog.requireViewById<RecyclerView>(R.id.device_list) + + assertThat(bluetoothTileDialog.isShowing).isTrue() + assertThat(recyclerView).isNotNull() + assertThat(recyclerView?.visibility).isEqualTo(VISIBLE) + assertThat(recyclerView?.adapter).isNotNull() + assertThat(recyclerView?.layoutManager is LinearLayoutManager).isTrue() + } + + @Test + fun testShowDialog_displayBluetoothDevice() { + bluetoothTileDialog = + BluetoothTileDialog(ENABLED, bluetoothTileDialogCallback, uiEventLogger, mContext) + bluetoothTileDialog.show() + bluetoothTileDialog.onDeviceItemUpdated( + listOf(deviceItem), + showSeeAll = false, + showPairNewDevice = false + ) + + val recyclerView = bluetoothTileDialog.requireViewById<RecyclerView>(R.id.device_list) + val adapter = recyclerView?.adapter as BluetoothTileDialog.Adapter + assertThat(adapter.itemCount).isEqualTo(1) + assertThat(adapter.getItem(0).deviceName).isEqualTo(DEVICE_NAME) + assertThat(adapter.getItem(0).connectionSummary).isEqualTo(DEVICE_CONNECTION_SUMMARY) + assertThat(adapter.getItem(0).iconWithDescription).isEqualTo(icon) + } + + @Test + fun testDeviceItemViewHolder_cachedDeviceNotBusy() { + deviceItem.isEnabled = true + deviceItem.alpha = ENABLED_ALPHA + + val view = + LayoutInflater.from(mContext).inflate(R.layout.bluetooth_device_item, null, false) + val viewHolder = + BluetoothTileDialog(ENABLED, bluetoothTileDialogCallback, uiEventLogger, mContext) + .Adapter(bluetoothTileDialogCallback) + .DeviceItemViewHolder(view) + viewHolder.bind(deviceItem, 0, bluetoothTileDialogCallback) + val container = view.requireViewById<View>(R.id.bluetooth_device) + val deviceView = view.requireViewById<View>(R.id.bluetooth_device) + + assertThat(container).isNotNull() + assertThat(container.isEnabled).isTrue() + assertThat(container.alpha).isEqualTo(ENABLED_ALPHA) + assertThat(deviceView.hasOnClickListeners()).isTrue() + } + + @Test + fun testDeviceItemViewHolder_cachedDeviceBusy() { + deviceItem.isEnabled = false + deviceItem.alpha = DISABLED_ALPHA + + val view = + LayoutInflater.from(mContext).inflate(R.layout.bluetooth_device_item, null, false) + val viewHolder = + BluetoothTileDialog(ENABLED, bluetoothTileDialogCallback, uiEventLogger, mContext) + .Adapter(bluetoothTileDialogCallback) + .DeviceItemViewHolder(view) + viewHolder.bind(deviceItem, 0, bluetoothTileDialogCallback) + val container = view.requireViewById<View>(R.id.bluetooth_device_row) + val deviceView = view.requireViewById<View>(R.id.bluetooth_device) + + assertThat(container).isNotNull() + assertThat(container.isEnabled).isFalse() + assertThat(container.alpha).isEqualTo(DISABLED_ALPHA) + assertThat(deviceView.hasOnClickListeners()).isTrue() + } + + @Test + fun testOnDeviceUpdated_hideSeeAll_showPairNew() { + bluetoothTileDialog = + BluetoothTileDialog(ENABLED, bluetoothTileDialogCallback, uiEventLogger, mContext) + bluetoothTileDialog.show() + bluetoothTileDialog.onDeviceItemUpdated( + listOf(deviceItem), + showSeeAll = false, + showPairNewDevice = true + ) + + val seeAllLayout = bluetoothTileDialog.requireViewById<View>(R.id.see_all_layout_group) + val pairNewLayout = + bluetoothTileDialog.requireViewById<View>(R.id.pair_new_device_layout_group) + val recyclerView = bluetoothTileDialog.requireViewById<RecyclerView>(R.id.device_list) + val adapter = recyclerView?.adapter as BluetoothTileDialog.Adapter + + assertThat(seeAllLayout).isNotNull() + assertThat(seeAllLayout.visibility).isEqualTo(GONE) + assertThat(pairNewLayout).isNotNull() + assertThat(pairNewLayout.visibility).isEqualTo(VISIBLE) + assertThat(adapter.itemCount).isEqualTo(1) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModelTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..7157cce8e60745ff53f17022cc8339ad2d092f84 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/BluetoothTileDialogViewModelTest.kt @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import android.view.View +import android.widget.LinearLayout +import androidx.test.filters.SmallTest +import com.android.internal.logging.UiEventLogger +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.systemui.SysuiTestCase +import com.android.systemui.animation.DialogLaunchAnimator +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.nullable +import com.android.systemui.util.time.FakeSystemClock +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.test.TestCoroutineScheduler +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.Mock +import org.mockito.Mockito.anyBoolean +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class BluetoothTileDialogViewModelTest : SysuiTestCase() { + + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + private val fakeSystemClock = FakeSystemClock() + private val backgroundExecutor = FakeExecutor(fakeSystemClock) + + private lateinit var bluetoothTileDialogViewModel: BluetoothTileDialogViewModel + + @Mock private lateinit var bluetoothStateInteractor: BluetoothStateInteractor + + @Mock private lateinit var deviceItemInteractor: DeviceItemInteractor + + @Mock private lateinit var activityStarter: ActivityStarter + + @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator + + @Mock private lateinit var cachedBluetoothDevice: CachedBluetoothDevice + + @Mock private lateinit var deviceItem: DeviceItem + + @Mock private lateinit var uiEventLogger: UiEventLogger + + private lateinit var scheduler: TestCoroutineScheduler + private lateinit var dispatcher: CoroutineDispatcher + private lateinit var testScope: TestScope + + @Before + fun setUp() { + scheduler = TestCoroutineScheduler() + dispatcher = UnconfinedTestDispatcher(scheduler) + testScope = TestScope(dispatcher) + bluetoothTileDialogViewModel = + BluetoothTileDialogViewModel( + deviceItemInteractor, + bluetoothStateInteractor, + dialogLaunchAnimator, + activityStarter, + uiEventLogger, + testScope.backgroundScope, + dispatcher, + ) + `when`(deviceItemInteractor.deviceItemFlow).thenReturn(MutableStateFlow(null).asStateFlow()) + `when`(bluetoothStateInteractor.updateBluetoothStateFlow) + .thenReturn(MutableStateFlow(null).asStateFlow()) + `when`(deviceItemInteractor.updateDeviceItemsFlow) + .thenReturn(MutableStateFlow(Unit).asStateFlow()) + `when`(bluetoothStateInteractor.isBluetoothEnabled).thenReturn(true) + } + + @Test + fun testShowDialog_noAnimation() { + testScope.runTest { + bluetoothTileDialogViewModel.showDialog(context, null) + + assertThat(bluetoothTileDialogViewModel.dialog).isNotNull() + verify(dialogLaunchAnimator, never()).showFromView(any(), any(), any(), any()) + assertThat(bluetoothTileDialogViewModel.dialog?.isShowing).isTrue() + verify(uiEventLogger).log(BluetoothTileDialogUiEvent.BLUETOOTH_TILE_DIALOG_SHOWN) + } + } + + @Test + fun testShowDialog_animated() { + testScope.runTest { + bluetoothTileDialogViewModel.showDialog(mContext, LinearLayout(mContext)) + + assertThat(bluetoothTileDialogViewModel.dialog).isNotNull() + verify(dialogLaunchAnimator).showFromView(any(), any(), nullable(), anyBoolean()) + } + } + + @Test + fun testShowDialog_animated_callInBackgroundThread() { + testScope.runTest { + backgroundExecutor.execute { + bluetoothTileDialogViewModel.showDialog(mContext, LinearLayout(mContext)) + + assertThat(bluetoothTileDialogViewModel.dialog).isNotNull() + verify(dialogLaunchAnimator).showFromView(any(), any(), nullable(), anyBoolean()) + } + } + } + + @Test + fun testShowDialog_fetchDeviceItem() { + testScope.runTest { + bluetoothTileDialogViewModel.showDialog(context, null) + + assertThat(bluetoothTileDialogViewModel.dialog).isNotNull() + verify(deviceItemInteractor).deviceItemFlow + } + } + + @Test + fun testShowDialog_withBluetoothStateValue() { + testScope.runTest { + bluetoothTileDialogViewModel.showDialog(context, null) + + assertThat(bluetoothTileDialogViewModel.dialog).isNotNull() + verify(bluetoothStateInteractor).updateBluetoothStateFlow + } + } + + @Test + fun testStartSettingsActivity_activityLaunched_dialogDismissed() { + `when`(deviceItem.cachedBluetoothDevice).thenReturn(cachedBluetoothDevice) + bluetoothTileDialogViewModel.showDialog(context, null) + + val clickedView = View(context) + bluetoothTileDialogViewModel.onPairNewDeviceClicked(clickedView) + + verify(uiEventLogger).log(BluetoothTileDialogUiEvent.PAIR_NEW_DEVICE_CLICKED) + verify(activityStarter).postStartActivityDismissingKeyguard(any(), anyInt(), nullable()) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactoryTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..34519023e3161bb2e91eb1e1958c8d9ba79f0857 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemFactoryTest.kt @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class DeviceItemFactoryTest : SysuiTestCase() { + + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + + @Mock private lateinit var cachedDevice: CachedBluetoothDevice + + private val availableMediaDeviceItemFactory = AvailableMediaDeviceItemFactory() + private val connectedDeviceItemFactory = ConnectedDeviceItemFactory() + private val savedDeviceItemFactory = SavedDeviceItemFactory() + + @Before + fun setup() { + `when`(cachedDevice.name).thenReturn(DEVICE_NAME) + `when`(cachedDevice.connectionSummary).thenReturn(CONNECTION_SUMMARY) + } + + @Test + fun testAvailableMediaDeviceItemFactory_createFromCachedDevice() { + val deviceItem = availableMediaDeviceItemFactory.create(context, cachedDevice) + + assertDeviceItem(deviceItem, DeviceItemType.AVAILABLE_MEDIA_BLUETOOTH_DEVICE) + } + + @Test + fun testConnectedDeviceItemFactory_createFromCachedDevice() { + val deviceItem = connectedDeviceItemFactory.create(context, cachedDevice) + + assertDeviceItem(deviceItem, DeviceItemType.CONNECTED_BLUETOOTH_DEVICE) + } + + @Test + fun testSavedDeviceItemFactory_createFromCachedDevice() { + val deviceItem = savedDeviceItemFactory.create(context, cachedDevice) + + assertDeviceItem(deviceItem, DeviceItemType.SAVED_BLUETOOTH_DEVICE) + assertThat(deviceItem.background).isNull() + } + + private fun assertDeviceItem(deviceItem: DeviceItem?, deviceItemType: DeviceItemType) { + assertThat(deviceItem).isNotNull() + assertThat(deviceItem!!.type).isEqualTo(deviceItemType) + assertThat(deviceItem.cachedBluetoothDevice).isEqualTo(cachedDevice) + assertThat(deviceItem.deviceName).isEqualTo(DEVICE_NAME) + assertThat(deviceItem.connectionSummary).isEqualTo(CONNECTION_SUMMARY) + } + + companion object { + const val DEVICE_NAME = "DeviceName" + const val CONNECTION_SUMMARY = "ConnectionSummary" + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractorTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..07a95ae330c608a53614d48444611bd4c967325d --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/bluetooth/DeviceItemInteractorTest.kt @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.tiles.dialog.bluetooth + +import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothDevice +import android.content.Context +import android.media.AudioManager +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.internal.logging.UiEventLogger +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.junit.MockitoJUnit +import org.mockito.junit.MockitoRule + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper(setAsMainLooper = true) +class DeviceItemInteractorTest : SysuiTestCase() { + + @get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule() + + @Mock private lateinit var bluetoothTileDialogRepository: BluetoothTileDialogRepository + + @Mock private lateinit var cachedDevice1: CachedBluetoothDevice + + @Mock private lateinit var cachedDevice2: CachedBluetoothDevice + + @Mock private lateinit var device1: BluetoothDevice + + @Mock private lateinit var device2: BluetoothDevice + + @Mock private lateinit var deviceItem1: DeviceItem + + @Mock private lateinit var deviceItem2: DeviceItem + + @Mock private lateinit var audioManager: AudioManager + + @Mock private lateinit var adapter: BluetoothAdapter + + @Mock private lateinit var localBluetoothManager: LocalBluetoothManager + + @Mock private lateinit var uiEventLogger: UiEventLogger + + private lateinit var interactor: DeviceItemInteractor + + private lateinit var dispatcher: CoroutineDispatcher + + private lateinit var testScope: TestScope + + @Before + fun setUp() { + dispatcher = StandardTestDispatcher() + testScope = TestScope(dispatcher) + interactor = + DeviceItemInteractor( + bluetoothTileDialogRepository, + audioManager, + adapter, + localBluetoothManager, + uiEventLogger, + testScope.backgroundScope, + dispatcher + ) + + `when`(deviceItem1.cachedBluetoothDevice).thenReturn(cachedDevice1) + `when`(deviceItem2.cachedBluetoothDevice).thenReturn(cachedDevice2) + `when`(cachedDevice1.device).thenReturn(device1) + `when`(cachedDevice2.device).thenReturn(device2) + `when`(bluetoothTileDialogRepository.cachedDevices) + .thenReturn(listOf(cachedDevice1, cachedDevice2)) + } + + @Test + fun testUpdateDeviceItems_noCachedDevice_returnEmpty() { + testScope.runTest { + `when`(bluetoothTileDialogRepository.cachedDevices).thenReturn(emptyList()) + interactor.setDeviceItemFactoryListForTesting( + listOf(createFactory({ true }, deviceItem1)) + ) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).isEmpty() + } + } + + @Test + fun testUpdateDeviceItems_hasCachedDevice_filterNotMatch_returnEmpty() { + testScope.runTest { + `when`(bluetoothTileDialogRepository.cachedDevices).thenReturn(listOf(cachedDevice1)) + interactor.setDeviceItemFactoryListForTesting( + listOf(createFactory({ false }, deviceItem1)) + ) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).isEmpty() + } + } + + @Test + fun testUpdateDeviceItems_hasCachedDevice_filterMatch_returnDeviceItem() { + testScope.runTest { + `when`(bluetoothTileDialogRepository.cachedDevices).thenReturn(listOf(cachedDevice1)) + interactor.setDeviceItemFactoryListForTesting( + listOf(createFactory({ true }, deviceItem1)) + ) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).hasSize(1) + assertThat(interactor.deviceItemFlow.value!![0]).isEqualTo(deviceItem1) + } + } + + @Test + fun testUpdateDeviceItems_hasCachedDevice_filterMatch_returnMultipleDeviceItem() { + testScope.runTest { + `when`(adapter.mostRecentlyConnectedDevices).thenReturn(null) + interactor.setDeviceItemFactoryListForTesting( + listOf(createFactory({ false }, deviceItem1), createFactory({ true }, deviceItem2)) + ) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).hasSize(2) + assertThat(interactor.deviceItemFlow.value!![0]).isEqualTo(deviceItem2) + assertThat(interactor.deviceItemFlow.value!![1]).isEqualTo(deviceItem2) + } + } + + @Test + fun testUpdateDeviceItems_sortByDisplayPriority() { + testScope.runTest { + `when`(adapter.mostRecentlyConnectedDevices).thenReturn(null) + interactor.setDeviceItemFactoryListForTesting( + listOf( + createFactory({ cachedDevice -> cachedDevice.device == device1 }, deviceItem1), + createFactory({ cachedDevice -> cachedDevice.device == device2 }, deviceItem2) + ) + ) + interactor.setDisplayPriorityForTesting( + listOf( + DeviceItemType.SAVED_BLUETOOTH_DEVICE, + DeviceItemType.CONNECTED_BLUETOOTH_DEVICE + ) + ) + `when`(deviceItem1.type).thenReturn(DeviceItemType.CONNECTED_BLUETOOTH_DEVICE) + `when`(deviceItem2.type).thenReturn(DeviceItemType.SAVED_BLUETOOTH_DEVICE) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).isEqualTo(listOf(deviceItem2, deviceItem1)) + } + } + + @Test + fun testUpdateDeviceItems_sameType_sortByRecentlyConnected() { + testScope.runTest { + `when`(adapter.mostRecentlyConnectedDevices).thenReturn(listOf(device2, device1)) + interactor.setDeviceItemFactoryListForTesting( + listOf( + createFactory({ cachedDevice -> cachedDevice.device == device1 }, deviceItem1), + createFactory({ cachedDevice -> cachedDevice.device == device2 }, deviceItem2) + ) + ) + interactor.setDisplayPriorityForTesting( + listOf(DeviceItemType.CONNECTED_BLUETOOTH_DEVICE) + ) + `when`(deviceItem1.type).thenReturn(DeviceItemType.CONNECTED_BLUETOOTH_DEVICE) + `when`(deviceItem2.type).thenReturn(DeviceItemType.CONNECTED_BLUETOOTH_DEVICE) + + interactor.updateDeviceItems(mContext) + + assertThat(interactor.deviceItemFlow.value).isEqualTo(listOf(deviceItem2, deviceItem1)) + } + } + + private fun createFactory( + isFilterMatchFunc: (CachedBluetoothDevice) -> Boolean, + deviceItem: DeviceItem + ): DeviceItemFactory { + return object : DeviceItemFactory() { + override fun isFilterMatched( + cachedDevice: CachedBluetoothDevice, + audioManager: AudioManager? + ) = isFilterMatchFunc(cachedDevice) + + override fun create(context: Context, cachedDevice: CachedBluetoothDevice) = deviceItem + } + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt index 223b1c431b2ddce06b71d09749f7fb8b4d163638..96510721baa5a93957d7cf4a013686fdb82409e2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt @@ -16,6 +16,7 @@ package com.android.systemui.shade +import android.os.Handler import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import android.view.KeyEvent @@ -24,29 +25,42 @@ import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardMessageAreaController import com.android.keyguard.KeyguardSecurityContainerController +import com.android.keyguard.KeyguardSecurityModel +import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.LockIconViewController import com.android.keyguard.dagger.KeyguardBouncerComponent -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.back.domain.interactor.BackActionInteractor -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory -import com.android.systemui.bouncer.data.repository.FakeBouncerMessageRepository +import com.android.systemui.biometrics.data.repository.FakeFacePropertyRepository +import com.android.systemui.bouncer.data.repository.BouncerMessageRepositoryImpl +import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor import com.android.systemui.bouncer.domain.interactor.CountDownTimerUtil +import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor +import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor +import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel +import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.dock.DockManager import com.android.systemui.dump.DumpManager import com.android.systemui.dump.logcatLogBuffer import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.flags.SystemPropertiesHelper import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor +import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.KeyguardUnlockAnimationController +import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel import com.android.systemui.log.BouncerLogger import com.android.systemui.power.domain.interactor.PowerInteractor +import com.android.systemui.res.R import com.android.systemui.shade.NotificationShadeWindowView.InteractionEventHandler import com.android.systemui.statusbar.DragDownHelper import com.android.systemui.statusbar.LockscreenShadeTransitionController @@ -62,6 +76,7 @@ import com.android.systemui.statusbar.phone.DozeScrimController import com.android.systemui.statusbar.phone.DozeServiceHost import com.android.systemui.statusbar.phone.PhoneStatusBarViewController import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager +import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.unfold.UnfoldTransitionProgressProvider import com.android.systemui.user.data.repository.FakeUserRepository @@ -201,11 +216,35 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() { featureFlags, fakeClock, BouncerMessageInteractor( - FakeBouncerMessageRepository(), - mock(BouncerMessageFactory::class.java), - FakeUserRepository(), - CountDownTimerUtil(), - featureFlags + repository = BouncerMessageRepositoryImpl(), + userRepository = FakeUserRepository(), + countDownTimerUtil = mock(CountDownTimerUtil::class.java), + featureFlags = featureFlags, + updateMonitor = mock(KeyguardUpdateMonitor::class.java), + biometricSettingsRepository = FakeBiometricSettingsRepository(), + applicationScope = testScope.backgroundScope, + trustRepository = FakeTrustRepository(), + systemPropertiesHelper = mock(SystemPropertiesHelper::class.java), + primaryBouncerInteractor = + PrimaryBouncerInteractor( + FakeKeyguardBouncerRepository(), + mock(BouncerView::class.java), + mock(Handler::class.java), + mock(KeyguardStateController::class.java), + mock(KeyguardSecurityModel::class.java), + mock(PrimaryBouncerCallbackInteractor::class.java), + mock(FalsingCollector::class.java), + mock(DismissCallbackRegistry::class.java), + context, + mock(KeyguardUpdateMonitor::class.java), + FakeTrustRepository(), + testScope.backgroundScope, + ), + facePropertyRepository = FakeFacePropertyRepository(), + deviceEntryFingerprintAuthRepository = + FakeDeviceEntryFingerprintAuthRepository(), + faceAuthRepository = FakeDeviceEntryFaceAuthRepository(), + securityModel = mock(KeyguardSecurityModel::class.java), ), BouncerLogger(logcatLogBuffer("BouncerLog")), keyEventInteractor, diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt index e8170163d616175cfdcfb8f4ccb093a712a48bee..00230202d9412b287cf8b54c8205f20031b60acd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt @@ -15,6 +15,7 @@ */ package com.android.systemui.shade +import android.os.Handler import android.os.SystemClock import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper @@ -23,28 +24,41 @@ import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardMessageAreaController import com.android.keyguard.KeyguardSecurityContainerController +import com.android.keyguard.KeyguardSecurityModel +import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.LockIconViewController import com.android.keyguard.dagger.KeyguardBouncerComponent -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.back.domain.interactor.BackActionInteractor -import com.android.systemui.bouncer.data.factory.BouncerMessageFactory -import com.android.systemui.bouncer.data.repository.FakeBouncerMessageRepository +import com.android.systemui.biometrics.data.repository.FakeFacePropertyRepository +import com.android.systemui.bouncer.data.repository.BouncerMessageRepositoryImpl +import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor import com.android.systemui.bouncer.domain.interactor.CountDownTimerUtil +import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor +import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor +import com.android.systemui.bouncer.ui.BouncerView import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel +import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.dock.DockManager import com.android.systemui.dump.DumpManager import com.android.systemui.dump.logcatLogBuffer import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.flags.SystemPropertiesHelper import com.android.systemui.keyevent.domain.interactor.KeyEventInteractor +import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.KeyguardUnlockAnimationController +import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository +import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel import com.android.systemui.log.BouncerLogger import com.android.systemui.power.domain.interactor.PowerInteractor +import com.android.systemui.res.R import com.android.systemui.shade.NotificationShadeWindowView.InteractionEventHandler import com.android.systemui.statusbar.DragDownHelper import com.android.systemui.statusbar.LockscreenShadeTransitionController @@ -60,6 +74,7 @@ import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.DozeScrimController import com.android.systemui.statusbar.phone.DozeServiceHost import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager +import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.unfold.UnfoldTransitionProgressProvider import com.android.systemui.user.data.repository.FakeUserRepository @@ -203,11 +218,35 @@ class NotificationShadeWindowViewTest : SysuiTestCase() { featureFlags, FakeSystemClock(), BouncerMessageInteractor( - FakeBouncerMessageRepository(), - Mockito.mock(BouncerMessageFactory::class.java), - FakeUserRepository(), - CountDownTimerUtil(), - featureFlags + repository = BouncerMessageRepositoryImpl(), + userRepository = FakeUserRepository(), + countDownTimerUtil = Mockito.mock(CountDownTimerUtil::class.java), + featureFlags = featureFlags, + updateMonitor = Mockito.mock(KeyguardUpdateMonitor::class.java), + biometricSettingsRepository = FakeBiometricSettingsRepository(), + applicationScope = testScope.backgroundScope, + trustRepository = FakeTrustRepository(), + systemPropertiesHelper = Mockito.mock(SystemPropertiesHelper::class.java), + primaryBouncerInteractor = + PrimaryBouncerInteractor( + FakeKeyguardBouncerRepository(), + Mockito.mock(BouncerView::class.java), + Mockito.mock(Handler::class.java), + Mockito.mock(KeyguardStateController::class.java), + Mockito.mock(KeyguardSecurityModel::class.java), + Mockito.mock(PrimaryBouncerCallbackInteractor::class.java), + Mockito.mock(FalsingCollector::class.java), + Mockito.mock(DismissCallbackRegistry::class.java), + context, + Mockito.mock(KeyguardUpdateMonitor::class.java), + FakeTrustRepository(), + testScope.backgroundScope, + ), + facePropertyRepository = FakeFacePropertyRepository(), + deviceEntryFingerprintAuthRepository = + FakeDeviceEntryFingerprintAuthRepository(), + faceAuthRepository = FakeDeviceEntryFaceAuthRepository(), + securityModel = Mockito.mock(KeyguardSecurityModel::class.java), ), BouncerLogger(logcatLogBuffer("BouncerLog")), Mockito.mock(KeyEventInteractor::class.java), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImplTest.kt index b8792a8aeacd81d957d88c53fa3535baf7c227d4..126e0e82b21061233441920e0b1c771b45fc717c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImplTest.kt @@ -18,26 +18,19 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest +import com.android.SysUITestModule +import com.android.TestMocksModule import com.android.systemui.SysuiTestCase -import com.android.systemui.demomode.DemoModeController -import com.android.systemui.flags.FeatureFlags -import com.android.systemui.plugins.DarkIconDispatcher -import com.android.systemui.plugins.statusbar.StatusBarStateController -import com.android.systemui.statusbar.NotificationListener -import com.android.systemui.statusbar.NotificationMediaManager -import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator -import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider -import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel -import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerShelfViewModel -import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel +import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.flags.FakeFeatureFlagsClassicModule +import com.android.systemui.flags.Flags import com.android.systemui.statusbar.phone.DozeParameters -import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.NotificationIconContainer -import com.android.systemui.statusbar.phone.ScreenOffAnimationController -import com.android.systemui.statusbar.window.StatusBarWindowController +import com.android.systemui.user.domain.UserDomainLayerModule import com.android.systemui.util.mockito.whenever -import com.android.wm.shell.bubbles.Bubbles -import java.util.Optional +import dagger.BindsInstance +import dagger.Component import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before @@ -51,50 +44,32 @@ import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @RunWithLooper(setAsMainLooper = true) class NotificationIconAreaControllerViewBinderWrapperImplTest : SysuiTestCase() { - @Mock private lateinit var notifListener: NotificationListener - @Mock private lateinit var statusBarStateController: StatusBarStateController - @Mock private lateinit var wakeUpCoordinator: NotificationWakeUpCoordinator - @Mock private lateinit var keyguardBypassController: KeyguardBypassController - @Mock private lateinit var notifMediaManager: NotificationMediaManager + @Mock private lateinit var dozeParams: DozeParameters - @Mock private lateinit var sectionStyleProvider: SectionStyleProvider - @Mock private lateinit var darkIconDispatcher: DarkIconDispatcher - @Mock private lateinit var statusBarWindowController: StatusBarWindowController - @Mock private lateinit var screenOffAnimController: ScreenOffAnimationController - @Mock private lateinit var bubbles: Bubbles - @Mock private lateinit var demoModeController: DemoModeController @Mock private lateinit var aodIcons: NotificationIconContainer - @Mock private lateinit var featureFlags: FeatureFlags - - private val shelfViewModel = NotificationIconContainerShelfViewModel() - private val statusBarViewModel = NotificationIconContainerStatusBarViewModel() - private val aodViewModel = NotificationIconContainerAlwaysOnDisplayViewModel() - private lateinit var underTest: NotificationIconAreaControllerViewBinderWrapperImpl + private lateinit var testComponent: TestComponent + private val underTest + get() = testComponent.underTest @Before fun setup() { MockitoAnnotations.initMocks(this) - underTest = - NotificationIconAreaControllerViewBinderWrapperImpl( - mContext, - statusBarStateController, - wakeUpCoordinator, - keyguardBypassController, - notifMediaManager, - notifListener, - dozeParams, - sectionStyleProvider, - Optional.of(bubbles), - demoModeController, - darkIconDispatcher, - featureFlags, - statusBarWindowController, - screenOffAnimController, - shelfViewModel, - statusBarViewModel, - aodViewModel, - ) + allowTestableLooperAsMainThread() + + testComponent = + DaggerNotificationIconAreaControllerViewBinderWrapperImplTest_TestComponent.factory() + .create( + test = this, + featureFlags = + FakeFeatureFlagsClassicModule { + set(Flags.FACE_AUTH_REFACTOR, value = false) + }, + mocks = + TestMocksModule( + dozeParameters = dozeParams, + ), + ) } @Test @@ -117,4 +92,27 @@ class NotificationIconAreaControllerViewBinderWrapperImplTest : SysuiTestCase() verify(aodIcons).translationY = 0f verify(aodIcons).alpha = 1.0f } + + @SysUISingleton + @Component( + modules = + [ + SysUITestModule::class, + BiometricsDomainLayerModule::class, + UserDomainLayerModule::class, + ] + ) + interface TestComponent { + + val underTest: NotificationIconAreaControllerViewBinderWrapperImpl + + @Component.Factory + interface Factory { + fun create( + @BindsInstance test: SysuiTestCase, + mocks: TestMocksModule, + featureFlags: FakeFeatureFlagsClassicModule, + ): TestComponent + } + } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSystemUiModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSystemUiModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..0e594964bb3057ecb761c79fc995a310c391e461 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSystemUiModule.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 + +import com.android.systemui.data.FakeSystemUiDataLayerModule +import com.android.systemui.flags.FakeFeatureFlagsClassicModule +import com.android.systemui.log.FakeUiEventLoggerModule +import com.android.systemui.scene.FakeSceneModule +import com.android.systemui.settings.FakeSettingsModule +import com.android.systemui.util.concurrency.FakeExecutorModule +import dagger.Module + +@Module( + includes = + [ + FakeExecutorModule::class, + FakeFeatureFlagsClassicModule::class, + FakeSettingsModule::class, + FakeSceneModule::class, + FakeSystemUiDataLayerModule::class, + FakeUiEventLoggerModule::class, + ] +) +object FakeSystemUiModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java index aa88a46d670cbd1a64e9e6f00d4012b4b204a1ad..cd009dff27ff5bad25ad4e8f79d11ac62eaff98e 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java @@ -193,7 +193,7 @@ public abstract class SysuiTestCase { return null; } - protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() { + public FakeBroadcastDispatcher getFakeBroadcastDispatcher() { return mFakeBroadcastDispatcher; } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeDisplayStateRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeDisplayStateRepository.kt index 60291eece70b14ca186fa9cde291f3442a5c2f4a..3fdeb302dc34be3109473ec480b0fd0734ef88da 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeDisplayStateRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeDisplayStateRepository.kt @@ -29,6 +29,8 @@ class FakeDisplayStateRepository : DisplayStateRepository { private val _currentRotation = MutableStateFlow<DisplayRotation>(DisplayRotation.ROTATION_0) override val currentRotation: StateFlow<DisplayRotation> = _currentRotation.asStateFlow() + override val isReverseDefaultRotation = false + fun setIsInRearDisplayMode(isInRearDisplayMode: Boolean) { _isInRearDisplayMode.value = isInRearDisplayMode } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..42c02c49d6a9dbc8f83380bec1cc6ee5e219dc74 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerDataLayerModule.kt @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.bouncer.data.repository + +import dagger.Module + +@Module(includes = [FakeKeyguardBouncerRepositoryModule::class]) object FakeBouncerDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerMessageRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerMessageRepository.kt deleted file mode 100644 index d9b926d8058903bd2e46b7c522b5af70112270e3..0000000000000000000000000000000000000000 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeBouncerMessageRepository.kt +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT 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.bouncer.data.repository - -import com.android.systemui.bouncer.shared.model.BouncerMessageModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow - -class FakeBouncerMessageRepository : BouncerMessageRepository { - private val _primaryAuthMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val primaryAuthMessage: StateFlow<BouncerMessageModel?> - get() = _primaryAuthMessage - - private val _faceAcquisitionMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val faceAcquisitionMessage: StateFlow<BouncerMessageModel?> - get() = _faceAcquisitionMessage - private val _fingerprintAcquisitionMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val fingerprintAcquisitionMessage: StateFlow<BouncerMessageModel?> - get() = _fingerprintAcquisitionMessage - private val _customMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val customMessage: StateFlow<BouncerMessageModel?> - get() = _customMessage - private val _biometricAuthMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val biometricAuthMessage: StateFlow<BouncerMessageModel?> - get() = _biometricAuthMessage - private val _authFlagsMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val authFlagsMessage: StateFlow<BouncerMessageModel?> - get() = _authFlagsMessage - - private val _biometricLockedOutMessage = MutableStateFlow<BouncerMessageModel?>(null) - override val biometricLockedOutMessage: Flow<BouncerMessageModel?> - get() = _biometricLockedOutMessage - - override fun setPrimaryAuthMessage(value: BouncerMessageModel?) { - _primaryAuthMessage.value = value - } - - override fun setFaceAcquisitionMessage(value: BouncerMessageModel?) { - _faceAcquisitionMessage.value = value - } - - override fun setFingerprintAcquisitionMessage(value: BouncerMessageModel?) { - _fingerprintAcquisitionMessage.value = value - } - - override fun setCustomMessage(value: BouncerMessageModel?) { - _customMessage.value = value - } - - fun setBiometricAuthMessage(value: BouncerMessageModel?) { - _biometricAuthMessage.value = value - } - - fun setAuthFlagsMessage(value: BouncerMessageModel?) { - _authFlagsMessage.value = value - } - - fun setBiometricLockedOutMessage(value: BouncerMessageModel?) { - _biometricLockedOutMessage.value = value - } - - override fun clearMessage() { - _primaryAuthMessage.value = null - _faceAcquisitionMessage.value = null - _fingerprintAcquisitionMessage.value = null - _customMessage.value = null - } -} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt index b45c198b55155e6ed08d221c794e17809aa72c95..f84481c556644aa6a39c683dcd318a0133865b12 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt @@ -2,6 +2,10 @@ package com.android.systemui.bouncer.data.repository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -10,7 +14,8 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow /** Fake implementation of [KeyguardBouncerRepository] */ -class FakeKeyguardBouncerRepository : KeyguardBouncerRepository { +@SysUISingleton +class FakeKeyguardBouncerRepository @Inject constructor() : KeyguardBouncerRepository { private val _primaryBouncerShow = MutableStateFlow(false) override val primaryBouncerShow = _primaryBouncerShow.asStateFlow() private val _primaryBouncerShowingSoon = MutableStateFlow(false) @@ -112,3 +117,8 @@ class FakeKeyguardBouncerRepository : KeyguardBouncerRepository { _sideFpsShowing.value = isShowing } } + +@Module +interface FakeKeyguardBouncerRepositoryModule { + @Binds fun bindFake(fake: FakeKeyguardBouncerRepository): KeyguardBouncerRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/FakeCommonDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/FakeCommonDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..1f4cb652822dbc0cdfe392a76f02ee6ddc1a346e --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/FakeCommonDataLayerModule.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.common.ui.data + +import com.android.systemui.common.ui.data.repository.FakeConfigurationRepositoryModule +import dagger.Module + +@Module(includes = [FakeConfigurationRepositoryModule::class]) object FakeCommonDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/repository/FakeConfigurationRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/repository/FakeConfigurationRepository.kt index 72cdbbc978964d70488de64d7f6ddab44fe69329..10b284a03a5961b26044f0433d2154c8de6199ee 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/repository/FakeConfigurationRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/data/repository/FakeConfigurationRepository.kt @@ -16,13 +16,18 @@ package com.android.systemui.common.ui.data.repository +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow -class FakeConfigurationRepository : ConfigurationRepository { +@SysUISingleton +class FakeConfigurationRepository @Inject constructor() : ConfigurationRepository { private val _onAnyConfigurationChange = MutableSharedFlow<Unit>() override val onAnyConfigurationChange: Flow<Unit> = _onAnyConfigurationChange.asSharedFlow() @@ -45,3 +50,8 @@ class FakeConfigurationRepository : ConfigurationRepository { throw IllegalStateException("Don't use for tests") } } + +@Module +interface FakeConfigurationRepositoryModule { + @Binds fun bindFake(fake: FakeConfigurationRepository): ConfigurationRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/data/FakeSystemUiDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/data/FakeSystemUiDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..f866932309bb4d3058c0d2faed297c7c37422799 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/data/FakeSystemUiDataLayerModule.kt @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.data + +import com.android.systemui.bouncer.data.repository.FakeBouncerDataLayerModule +import com.android.systemui.common.ui.data.FakeCommonDataLayerModule +import com.android.systemui.keyguard.data.FakeKeyguardDataLayerModule +import com.android.systemui.power.data.FakePowerDataLayerModule +import com.android.systemui.shade.data.repository.FakeShadeDataLayerModule +import com.android.systemui.statusbar.data.FakeStatusBarDataLayerModule +import com.android.systemui.telephony.data.FakeTelephonyDataLayerModule +import com.android.systemui.user.data.FakeUserDataLayerModule +import dagger.Module + +@Module( + includes = + [ + FakeCommonDataLayerModule::class, + FakeBouncerDataLayerModule::class, + FakeKeyguardDataLayerModule::class, + FakePowerDataLayerModule::class, + FakeShadeDataLayerModule::class, + FakeStatusBarDataLayerModule::class, + FakeTelephonyDataLayerModule::class, + FakeUserDataLayerModule::class, + ] +) +object FakeSystemUiDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FakeFeatureFlags.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FakeFeatureFlags.kt index 43c9c99744c573e3253ce7fa08dd5e4a619c94bf..32469b6cfc302c42d788d7670de6f557becf0b6a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FakeFeatureFlags.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/FakeFeatureFlags.kt @@ -16,6 +16,9 @@ package com.android.systemui.flags +import dagger.Binds +import dagger.Module +import dagger.Provides import java.io.PrintWriter class FakeFeatureFlagsClassic : FakeFeatureFlags() @@ -159,3 +162,20 @@ open class FakeFeatureFlags : FeatureFlagsClassic { ?: error("Flag ${flagName(flagName)} was accessed as int but not specified.") } } + +@Module(includes = [FakeFeatureFlagsClassicModule.Bindings::class]) +class FakeFeatureFlagsClassicModule( + @get:Provides val fakeFeatureFlagsClassic: FakeFeatureFlagsClassic = FakeFeatureFlagsClassic(), +) { + + constructor( + block: FakeFeatureFlagsClassic.() -> Unit + ) : this(FakeFeatureFlagsClassic().apply(block)) + + @Module + interface Bindings { + @Binds fun bindFake(fake: FakeFeatureFlagsClassic): FeatureFlagsClassic + @Binds fun bindClassic(classic: FeatureFlagsClassic): FeatureFlags + @Binds fun bindFakeClassic(fake: FakeFeatureFlagsClassic): FakeFeatureFlags + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/FakeKeyguardDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/FakeKeyguardDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..abf72af0e1d55a4a4484ab4d16fe8fc25dd2d61f --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/FakeKeyguardDataLayerModule.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.keyguard.data + +import com.android.systemui.keyguard.data.repository.FakeCommandQueueModule +import com.android.systemui.keyguard.data.repository.FakeKeyguardRepositoryModule +import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepositoryModule +import dagger.Module + +@Module( + includes = + [ + FakeCommandQueueModule::class, + FakeKeyguardRepositoryModule::class, + FakeKeyguardTransitionRepositoryModule::class, + ] +) +object FakeKeyguardDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeCommandQueue.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeCommandQueue.kt index fe941179830ae3487646334692de98685dc9189a..3a59f6a8784ff26be3c7e58aec612ed3513b153e 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeCommandQueue.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeCommandQueue.kt @@ -18,11 +18,17 @@ package com.android.systemui.keyguard.data.repository import android.content.Context +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.settings.DisplayTracker import com.android.systemui.statusbar.CommandQueue +import dagger.Binds +import dagger.Module +import javax.inject.Inject import org.mockito.Mockito.mock -class FakeCommandQueue : CommandQueue(mock(Context::class.java), mock(DisplayTracker::class.java)) { +@SysUISingleton +class FakeCommandQueue @Inject constructor() : + CommandQueue(mock(Context::class.java), mock(DisplayTracker::class.java)) { private val callbacks = mutableListOf<Callbacks>() override fun addCallback(callback: Callbacks) { @@ -39,3 +45,8 @@ class FakeCommandQueue : CommandQueue(mock(Context::class.java), mock(DisplayTra fun callbackCount(): Int = callbacks.size } + +@Module +interface FakeCommandQueueModule { + @Binds fun bindFake(fake: FakeCommandQueue): CommandQueue +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt index dae8644466fb3753b8771050938d9343fbacf67e..a5f5d52ef56c42d2be90f000b16cec40b71234c9 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.data.repository import android.graphics.Point import com.android.systemui.common.shared.model.Position +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.BiometricUnlockSource import com.android.systemui.keyguard.shared.model.DismissAction @@ -31,6 +32,9 @@ import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.shared.model.WakefulnessState +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -38,7 +42,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow /** Fake implementation of [KeyguardRepository] */ -class FakeKeyguardRepository : KeyguardRepository { +@SysUISingleton +class FakeKeyguardRepository @Inject constructor() : KeyguardRepository { private val _deferKeyguardDone: MutableSharedFlow<KeyguardDone> = MutableSharedFlow() override val keyguardDone: Flow<KeyguardDone> = _deferKeyguardDone @@ -280,3 +285,8 @@ class FakeKeyguardRepository : KeyguardRepository { ) } } + +@Module +interface FakeKeyguardRepositoryModule { + @Binds fun bindFake(fake: FakeKeyguardRepository): KeyguardRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt index dd513db03d34212e862e75d6275e20bd1da7fdb6..e160548fed78095bcb364a499665aea09e950319 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt @@ -18,16 +18,21 @@ package com.android.systemui.keyguard.data.repository import android.annotation.FloatRange +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep +import dagger.Binds +import dagger.Module import java.util.UUID +import javax.inject.Inject import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow /** Fake implementation of [KeyguardTransitionRepository] */ -class FakeKeyguardTransitionRepository : KeyguardTransitionRepository { +@SysUISingleton +class FakeKeyguardTransitionRepository @Inject constructor() : KeyguardTransitionRepository { private val _transitions = MutableSharedFlow<TransitionStep>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST) @@ -47,3 +52,8 @@ class FakeKeyguardTransitionRepository : KeyguardTransitionRepository { state: TransitionState ) = Unit } + +@Module +interface FakeKeyguardTransitionRepositoryModule { + @Binds fun bindFake(fake: FakeKeyguardTransitionRepository): KeyguardTransitionRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt index 9d98f9409ed98b427010bf9c2c921eaa44a66f9e..482126d4bcca17cef50eb9e2bb3ac9cf05f535b6 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt @@ -25,6 +25,9 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow class FakeTrustRepository : TrustRepository { + private val _isTrustUsuallyManaged = MutableStateFlow(false) + override val isCurrentUserTrustUsuallyManaged: StateFlow<Boolean> + get() = _isTrustUsuallyManaged private val _isCurrentUserTrusted = MutableStateFlow(false) override val isCurrentUserTrusted: Flow<Boolean> get() = _isCurrentUserTrusted @@ -55,4 +58,8 @@ class FakeTrustRepository : TrustRepository { fun setRequestDismissKeyguard(trustModel: TrustModel) { _requestDismissKeyguard.value = trustModel } + + fun setTrustUsuallyManaged(value: Boolean) { + _isTrustUsuallyManaged.value = value + } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/log/FakeUiEventLoggerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/log/FakeUiEventLoggerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..3eb909eec463e0c964c922add8e24e25e3462983 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/log/FakeUiEventLoggerModule.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.log + +import com.android.internal.logging.UiEventLogger +import com.android.internal.logging.testing.UiEventLoggerFake +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import dagger.Provides + +@Module +interface FakeUiEventLoggerModule { + + @Binds fun bindFake(fake: UiEventLoggerFake): UiEventLogger + + @Module + companion object { + @Provides @SysUISingleton fun provideFake(): UiEventLoggerFake = UiEventLoggerFake() + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/FakePowerDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/FakePowerDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..7cbfa2467c762f3d3b2b6debdcec2d5e3b9182dc --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/FakePowerDataLayerModule.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.power.data + +import com.android.systemui.power.data.repository.FakePowerRepositoryModule +import dagger.Module + +@Module(includes = [FakePowerRepositoryModule::class]) object FakePowerDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/repository/FakePowerRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/repository/FakePowerRepository.kt index b92d946b3750ccf3fb69a9f9b33e51d2fc9e0414..5ab8204edde4409c261bd8065fa8417bae6e8c6d 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/repository/FakePowerRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/power/data/repository/FakePowerRepository.kt @@ -18,15 +18,18 @@ package com.android.systemui.power.data.repository import android.os.PowerManager +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -class FakePowerRepository( - initialInteractive: Boolean = true, -) : PowerRepository { +@SysUISingleton +class FakePowerRepository @Inject constructor() : PowerRepository { - private val _isInteractive = MutableStateFlow(initialInteractive) + private val _isInteractive = MutableStateFlow(true) override val isInteractive: Flow<Boolean> = _isInteractive.asStateFlow() var lastWakeWhy: String? = null @@ -47,3 +50,8 @@ class FakePowerRepository( userTouchRegistered = true } } + +@Module +interface FakePowerRepositoryModule { + @Binds fun bindFake(fake: FakePowerRepository): PowerRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeSceneModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeSceneModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..5d22a6e10a26f33c81b9024d5ddd3f9923357032 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeSceneModule.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.scene + +import com.android.systemui.scene.shared.flag.FakeSceneContainerFlagsModule +import com.android.systemui.scene.shared.model.FakeSceneContainerConfigModule +import dagger.Module + +@Module(includes = [FakeSceneContainerConfigModule::class, FakeSceneContainerFlagsModule::class]) +object FakeSceneModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/FakeSceneContainerFlags.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/FakeSceneContainerFlags.kt index 01a1ecea9997bf5da45d21b55aa3f70d1743df92..bae5257a98bd0bb721bfe77b4df4c35aaaa9d09e 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/FakeSceneContainerFlags.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/flag/FakeSceneContainerFlags.kt @@ -16,6 +16,10 @@ package com.android.systemui.scene.shared.flag +import dagger.Binds +import dagger.Module +import dagger.Provides + class FakeSceneContainerFlags( var enabled: Boolean = false, ) : SceneContainerFlags { @@ -28,3 +32,13 @@ class FakeSceneContainerFlags( return "" } } + +@Module(includes = [FakeSceneContainerFlagsModule.Bindings::class]) +class FakeSceneContainerFlagsModule( + @get:Provides val sceneContainerFlags: FakeSceneContainerFlags = FakeSceneContainerFlags(), +) { + @Module + interface Bindings { + @Binds fun bindFake(fake: FakeSceneContainerFlags): SceneContainerFlags + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..b4fc948cd2e0a2eb0f5ba87b507f16cf15822a1d --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneContainerConfigModule.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.scene.shared.model + +import dagger.Module +import dagger.Provides + +@Module +data class FakeSceneContainerConfigModule( + @get:Provides + val sceneContainerConfig: SceneContainerConfig = + SceneContainerConfig( + sceneKeys = + listOf( + SceneKey.QuickSettings, + SceneKey.Shade, + SceneKey.Lockscreen, + SceneKey.Bouncer, + SceneKey.Gone, + ), + initialSceneKey = SceneKey.Lockscreen, + ), +) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeSettingsModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeSettingsModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..c9a416ed3c95e7c14d7514cc48a944319ac19dd2 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeSettingsModule.kt @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.settings + +import dagger.Module + +@Module(includes = [FakeUserTrackerModule::class]) object FakeSettingsModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt index f5f924dfce4b39b350c660b60a3f2575afb45915..4307ff980be41b8a8cf8e7af9c83c0edee7f43c7 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt @@ -22,6 +22,9 @@ import android.content.pm.UserInfo import android.os.UserHandle import android.test.mock.MockContentResolver import com.android.systemui.util.mockito.mock +import dagger.Binds +import dagger.Module +import dagger.Provides import java.util.concurrent.Executor /** A fake [UserTracker] to be used in tests. */ @@ -84,3 +87,13 @@ class FakeUserTracker( callbacks.forEach { it.onProfilesChanged(_userProfiles) } } } + +@Module(includes = [FakeUserTrackerModule.Bindings::class]) +class FakeUserTrackerModule( + @get:Provides val fakeUserTracker: FakeUserTracker = FakeUserTracker() +) { + @Module + interface Bindings { + @Binds fun bindFake(fake: FakeUserTracker): UserTracker + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..d90e2ea7f3866dd7f6d700e3409cfcd9507778bf --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeDataLayerModule.kt @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.shade.data.repository + +import dagger.Module + +@Module(includes = [FakeShadeRepositoryModule::class]) object FakeShadeDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt index 8b721b2b5f352d678debbebcbaf82b27018bc45c..3c49c58580cc8fe400618bd4a3582cbabd12f8e8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt @@ -17,12 +17,17 @@ package com.android.systemui.shade.data.repository +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shade.domain.model.ShadeModel +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow /** Fake implementation of [ShadeRepository] */ -class FakeShadeRepository : ShadeRepository { +@SysUISingleton +class FakeShadeRepository @Inject constructor() : ShadeRepository { private val _shadeModel = MutableStateFlow(ShadeModel()) override val shadeModel: Flow<ShadeModel> = _shadeModel @@ -89,3 +94,8 @@ class FakeShadeRepository : ShadeRepository { _legacyShadeExpansion.value = expandedFraction } } + +@Module +interface FakeShadeRepositoryModule { + @Binds fun bindFake(fake: FakeShadeRepository): ShadeRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/FakeStatusBarDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/FakeStatusBarDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..1bec82b0875b9dd2bff8ff7bb23627cde1669e96 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/FakeStatusBarDataLayerModule.kt @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.data + +import com.android.systemui.statusbar.disableflags.data.FakeStatusBarDisableFlagsDataLayerModule +import com.android.systemui.statusbar.pipeline.data.FakeStatusBarPipelineDataLayerModule +import dagger.Module + +@Module( + includes = + [ + FakeStatusBarDisableFlagsDataLayerModule::class, + FakeStatusBarPipelineDataLayerModule::class, + ] +) +object FakeStatusBarDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/FakeStatusBarDisableFlagsDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/FakeStatusBarDisableFlagsDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..1ffb1b98a3a3e7ef00463b41302545e97f77f11a --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/FakeStatusBarDisableFlagsDataLayerModule.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.disableflags.data + +import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepositoryModule +import dagger.Module + +@Module(includes = [FakeDisableFlagsRepositoryModule::class]) +object FakeStatusBarDisableFlagsDataLayerModule diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt similarity index 71% rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt index b66231c63bc6266190ba8e604575f9fd68860b81..466a3eb83e95ca169d1aa4539d80d330608cf81b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/disableflags/data/repository/FakeDisableFlagsRepository.kt @@ -14,9 +14,19 @@ package com.android.systemui.statusbar.disableflags.data.repository +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow -class FakeDisableFlagsRepository : DisableFlagsRepository { +@SysUISingleton +class FakeDisableFlagsRepository @Inject constructor() : DisableFlagsRepository { override val disableFlags = MutableStateFlow(DisableFlagsModel()) } + +@Module +interface FakeDisableFlagsRepositoryModule { + @Binds fun bindFake(fake: FakeDisableFlagsRepository): DisableFlagsRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/data/FakeStatusBarPipelineDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/data/FakeStatusBarPipelineDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..21a52a6f7f85f536dc175307f9b1ad2f24b8ac18 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/data/FakeStatusBarPipelineDataLayerModule.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.pipeline.data + +import com.android.systemui.statusbar.pipeline.mobile.data.FakeStatusBarPipelineMobileDataLayerModule +import dagger.Module + +@Module(includes = [FakeStatusBarPipelineMobileDataLayerModule::class]) +object FakeStatusBarPipelineDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/FakeStatusBarPipelineMobileDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/FakeStatusBarPipelineMobileDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..549929c2c04afc8439212243aef45c0f7252a30d --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/FakeStatusBarPipelineMobileDataLayerModule.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.pipeline.mobile.data + +import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepositoryModule +import dagger.Module + +@Module(includes = [FakeUserSetupRepositoryModule::class]) +object FakeStatusBarPipelineMobileDataLayerModule diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt similarity index 74% rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt index 141b50c017e11b3947e314e877ffed8054a3051b..55e81bbc77e7419821577ae40ecd184dad55cf47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeUserSetupRepository.kt @@ -16,10 +16,15 @@ package com.android.systemui.statusbar.pipeline.mobile.data.repository +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow /** Defaults to `true` */ -class FakeUserSetupRepository : UserSetupRepository { +@SysUISingleton +class FakeUserSetupRepository @Inject constructor() : UserSetupRepository { private val _isUserSetup: MutableStateFlow<Boolean> = MutableStateFlow(true) override val isUserSetupFlow = _isUserSetup @@ -27,3 +32,8 @@ class FakeUserSetupRepository : UserSetupRepository { _isUserSetup.value = setup } } + +@Module +interface FakeUserSetupRepositoryModule { + @Binds fun bindFake(fake: FakeUserSetupRepository): UserSetupRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/FakeTelephonyDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/FakeTelephonyDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..ec866ae84fb2305646a3123a3293a98b7507bbfd --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/FakeTelephonyDataLayerModule.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.telephony.data + +import com.android.systemui.telephony.data.repository.FakeTelephonyRepositoryModule +import dagger.Module + +@Module(includes = [FakeTelephonyRepositoryModule::class]) object FakeTelephonyDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/repository/FakeTelephonyRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/repository/FakeTelephonyRepository.kt index 59f24ef2a7063677a4d2499eba0f8255a7d00f59..7c70846d4d76e0e3b844ef73d212d140b9e4488a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/repository/FakeTelephonyRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/telephony/data/repository/FakeTelephonyRepository.kt @@ -17,11 +17,16 @@ package com.android.systemui.telephony.data.repository +import com.android.systemui.dagger.SysUISingleton +import dagger.Binds +import dagger.Module +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -class FakeTelephonyRepository : TelephonyRepository { +@SysUISingleton +class FakeTelephonyRepository @Inject constructor() : TelephonyRepository { private val _callState = MutableStateFlow(0) override val callState: Flow<Int> = _callState.asStateFlow() @@ -30,3 +35,8 @@ class FakeTelephonyRepository : TelephonyRepository { _callState.value = value } } + +@Module +interface FakeTelephonyRepositoryModule { + @Binds fun bindFake(fake: FakeTelephonyRepository): TelephonyRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/FakeUserDataLayerModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/FakeUserDataLayerModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..b00f8d22ca2ecc890ae4858beb24d6a21c95a76c --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/FakeUserDataLayerModule.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.user.data + +import com.android.systemui.user.data.repository.FakeUserRepositoryModule +import dagger.Module + +@Module(includes = [FakeUserRepositoryModule::class]) object FakeUserDataLayerModule diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/repository/FakeUserRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/repository/FakeUserRepository.kt index 5ad19eed18b8c0ac0ac52c532a8b5742ed70d311..1124425e5d495bb99e0cd98794b134d37d4babc7 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/repository/FakeUserRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/user/data/repository/FakeUserRepository.kt @@ -19,17 +19,22 @@ package com.android.systemui.user.data.repository import android.content.pm.UserInfo import android.os.UserHandle +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.user.data.model.SelectedUserModel import com.android.systemui.user.data.model.SelectionStatus import com.android.systemui.user.data.model.UserSwitcherSettingsModel +import dagger.Binds +import dagger.Module import java.util.concurrent.atomic.AtomicBoolean +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.yield -class FakeUserRepository : UserRepository { +@SysUISingleton +class FakeUserRepository @Inject constructor() : UserRepository { companion object { // User id to represent a non system (human) user id. We presume this is the main user. private const val MAIN_USER_ID = 10 @@ -117,3 +122,8 @@ class FakeUserRepository : UserRepository { _isGuestUserAutoCreated = value } } + +@Module +interface FakeUserRepositoryModule { + @Binds fun bindFake(fake: FakeUserRepository): UserRepository +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeExecutorModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeExecutorModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..5de05c27ba2e7f9cc18236568f2b4b954fef999e --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeExecutorModule.kt @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.util.concurrency + +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.util.time.FakeSystemClock +import dagger.Binds +import dagger.Module +import dagger.Provides +import java.util.concurrent.Executor + +@Module(includes = [FakeExecutorModule.Bindings::class]) +class FakeExecutorModule( + @get:Provides val clock: FakeSystemClock = FakeSystemClock(), +) { + @get:Provides val executor = FakeExecutor(clock) + + @Module + interface Bindings { + @Binds @Main fun bindMainExecutor(executor: FakeExecutor): Executor + } +} diff --git a/services/Android.bp b/services/Android.bp index 9264172974e18c3e813264344d92f0710ea9e3ff..f2370955f5bfaa8d2e7cb552973b7d9cde59eb32 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -34,17 +34,18 @@ java_defaults { }, } -// Opt-in config for optimizing and shrinking the services target using R8. -// Enabled via `export SYSTEM_OPTIMIZE_JAVA=true`, or explicitly in Make via the +// Config to control optimizing and shrinking the services target using R8. +// Set via `export SYSTEM_OPTIMIZE_JAVA=true|false`, or explicitly in Make via the // `SOONG_CONFIG_ANDROID_SYSTEM_OPTIMIZE_JAVA` variable. -// TODO(b/196084106): Enable optimizations by default after stabilizing and -// building out retrace infrastructure. soong_config_module_type { name: "system_optimized_java_defaults", module_type: "java_defaults", config_namespace: "ANDROID", bool_variables: ["SYSTEM_OPTIMIZE_JAVA"], - properties: ["optimize"], + properties: [ + "optimize", + "dxflags", + ], } system_optimized_java_defaults { @@ -75,6 +76,9 @@ system_optimized_java_defaults { // permission subpackage to prune unused jarjar'ed Kotlin dependencies. proguard_flags_files: ["proguard_permission.flags"], }, + // Explicitly configure R8 to preserve debug info, as this path should + // really only allow stripping of permission-specific code and deps. + dxflags: ["--debug"], }, }, }, diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig index 3709f4714a4f00a604cd3896a70e5b839fa25d7b..0480c22233a690cbd6dda52e3bd6c31621eaf5f2 100644 --- a/services/accessibility/accessibility.aconfig +++ b/services/accessibility/accessibility.aconfig @@ -19,4 +19,11 @@ flag { namespace: "accessibility" description: "Whether to enable joystick controls for magnification" bug: "297211257" +} + +flag { + name: "send_a11y_events_based_on_state" + namespace: "accessibility" + description: "Sends accessibility events in TouchExplorer#onAccessibilityEvent based on internal state to keep it consistent. This reduces test flakiness." +bug: "295575684" } \ No newline at end of file diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java index 44ffb51452e1604f5c909d9ff282e8e90baeb5a7..05b6eb4a64c13000f286f0a3b17d65312960b653 100644 --- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java @@ -56,6 +56,7 @@ import android.graphics.ParcelableColorSpace; import android.graphics.Region; import android.hardware.HardwareBuffer; import android.hardware.display.DisplayManager; +import android.hardware.display.DisplayManagerInternal; import android.os.Binder; import android.os.Build; import android.os.Bundle; @@ -97,6 +98,7 @@ import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection; import com.android.internal.os.SomeArgs; import com.android.internal.util.DumpUtils; import com.android.internal.util.function.pooled.PooledLambda; +import com.android.server.LocalServices; import com.android.server.accessibility.AccessibilityWindowManager.RemoteAccessibilityConnection; import com.android.server.accessibility.magnification.MagnificationProcessor; import com.android.server.inputmethod.InputMethodManagerInternal; @@ -1439,24 +1441,19 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY, callback); return; } + final long identity = Binder.clearCallingIdentity(); try { - ScreenCapture.ScreenCaptureListener screenCaptureListener = new - ScreenCapture.ScreenCaptureListener( - (screenshotBuffer, result) -> { - if (screenshotBuffer != null && result == 0) { - sendScreenshotSuccess(screenshotBuffer, callback); - } else { - sendScreenshotFailure( - AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY, - callback); - } - } - ); - mWindowManagerService.captureDisplay(displayId, null, screenCaptureListener); - } catch (Exception e) { - sendScreenshotFailure(AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY, - callback); + mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> { + final ScreenshotHardwareBuffer screenshotBuffer = LocalServices + .getService(DisplayManagerInternal.class).userScreenshot(displayId); + if (screenshotBuffer != null) { + sendScreenshotSuccess(screenshotBuffer, callback); + } else { + sendScreenshotFailure( + AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY, callback); + } + }, null).recycleOnUse()); } finally { Binder.restoreCallingIdentity(identity); } @@ -1464,24 +1461,22 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ private void sendScreenshotSuccess(ScreenshotHardwareBuffer screenshotBuffer, RemoteCallback callback) { - mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> { - final HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer(); - final ParcelableColorSpace colorSpace = - new ParcelableColorSpace(screenshotBuffer.getColorSpace()); - - final Bundle payload = new Bundle(); - payload.putInt(KEY_ACCESSIBILITY_SCREENSHOT_STATUS, - AccessibilityService.TAKE_SCREENSHOT_SUCCESS); - payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER, - hardwareBuffer); - payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace); - payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP, - SystemClock.uptimeMillis()); - - // Send back the result. - callback.sendResult(payload); - hardwareBuffer.close(); - }, null).recycleOnUse()); + final HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer(); + final ParcelableColorSpace colorSpace = + new ParcelableColorSpace(screenshotBuffer.getColorSpace()); + + final Bundle payload = new Bundle(); + payload.putInt(KEY_ACCESSIBILITY_SCREENSHOT_STATUS, + AccessibilityService.TAKE_SCREENSHOT_SUCCESS); + payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER, + hardwareBuffer); + payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace); + payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP, + SystemClock.uptimeMillis()); + + // Send back the result. + callback.sendResult(payload); + hardwareBuffer.close(); } private void sendScreenshotFailure(@AccessibilityService.ScreenshotErrorCode int errorCode, diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java index 8060d5a96aa62018c8e608e7a20471d65e5ec2ba..c4184854e690201ea9515fa26161140fb67cc141 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java @@ -58,6 +58,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.accessibility.AccessibilityManagerService; import com.android.server.accessibility.BaseEventStreamTransformation; import com.android.server.accessibility.EventStreamTransformation; +import com.android.server.accessibility.Flags; import com.android.server.policy.WindowManagerPolicy; import java.util.ArrayList; @@ -352,16 +353,34 @@ public class TouchExplorer extends BaseEventStreamTransformation } // The event for gesture end should be strictly after the // last hover exit event. - if (mSendTouchExplorationEndDelayed.isPending()) { - mSendTouchExplorationEndDelayed.cancel(); - mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_END); - } + if (Flags.sendA11yEventsBasedOnState()) { + if (mSendTouchExplorationEndDelayed.isPending()) { + mSendTouchExplorationEndDelayed.cancel(); + } + if (mState.isTouchExploring()) { + mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_END); + } - // The event for touch interaction end should be strictly after the - // last hover exit and the touch exploration gesture end events. - if (mSendTouchInteractionEndDelayed.isPending()) { - mSendTouchInteractionEndDelayed.cancel(); - mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_INTERACTION_END); + // The event for touch interaction end should be strictly after the + // last hover exit and the touch exploration gesture end events. + if (mSendTouchInteractionEndDelayed.isPending()) { + mSendTouchInteractionEndDelayed.cancel(); + } + if (mState.isTouchInteracting()) { + mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_INTERACTION_END); + } + } else { + if (mSendTouchExplorationEndDelayed.isPending()) { + mSendTouchExplorationEndDelayed.cancel(); + mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_END); + } + + // The event for touch interaction end should be strictly after the + // last hover exit and the touch exploration gesture end events. + if (mSendTouchInteractionEndDelayed.isPending()) { + mSendTouchInteractionEndDelayed.cancel(); + mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_INTERACTION_END); + } } } diff --git a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java index 102c26245dc3c34ed44212bea4e0242358e1ef49..a3ccb168aa4e675c8f19a614babc6cb8e92bea26 100644 --- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java @@ -133,6 +133,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @GuardedBy("mGenericWindowPolicyControllerLock") private boolean mShowTasksInHostDeviceRecents; + @Nullable private final ComponentName mCustomHomeComponent; /** * Creates a window policy controller that is generic to the different use cases of virtual @@ -157,6 +158,10 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController * @param intentListenerCallback Callback that is called to intercept intents when matching * passed in filters. * @param showTasksInHostDeviceRecents whether to show activities in recents on the host device. + * @param customHomeComponent The component acting as a home activity on the virtual display. If + * {@code null}, then the system-default secondary home activity will be used. This is only + * applicable to displays that support home activities, i.e. they're created with the relevant + * virtual display flag. */ public GenericWindowPolicyController( int windowFlags, @@ -172,7 +177,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @Nullable SecureWindowCallback secureWindowCallback, @Nullable IntentListenerCallback intentListenerCallback, @NonNull Set<String> displayCategories, - boolean showTasksInHostDeviceRecents) { + boolean showTasksInHostDeviceRecents, + @Nullable ComponentName customHomeComponent) { super(); mAllowedUsers = allowedUsers; mActivityLaunchAllowedByDefault = activityLaunchAllowedByDefault; @@ -187,6 +193,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController mIntentListenerCallback = intentListenerCallback; mDisplayCategories = displayCategories; mShowTasksInHostDeviceRecents = showTasksInHostDeviceRecents; + mCustomHomeComponent = customHomeComponent; } /** @@ -384,6 +391,11 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController return false; } + @Override + public @Nullable ComponentName getCustomHomeComponent() { + return mCustomHomeComponent; + } + /** * Returns true if an app with the given UID has an activity running on the virtual display for * this controller. diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java index f328b22352aefc898cc247b9f8283473e03679a5..203a152ccc73d3d44975b9810f6d8498a712f199 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java @@ -53,7 +53,7 @@ import android.companion.virtual.flags.Flags; import android.companion.virtual.sensor.VirtualSensor; import android.companion.virtual.sensor.VirtualSensorEvent; import android.compat.annotation.ChangeId; -import android.compat.annotation.EnabledSince; +import android.compat.annotation.EnabledAfter; import android.content.AttributionSource; import android.content.ComponentName; import android.content.Context; @@ -131,7 +131,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT */ @ChangeId - @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM) + @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public static final long MAKE_VIRTUAL_DISPLAY_FLAGS_CONSISTENT_WITH_DISPLAY_MANAGER = 294837146L; @@ -938,6 +938,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub mParams.getDefaultNavigationPolicy() == NAVIGATION_POLICY_DEFAULT_ALLOWED; final boolean showTasksInHostDeviceRecents = getDevicePolicy(POLICY_TYPE_RECENTS) == DEVICE_POLICY_DEFAULT; + final ComponentName homeComponent = + Flags.vdmCustomHome() ? mParams.getHomeComponent() : null; final GenericWindowPolicyController gwpc = new GenericWindowPolicyController( FLAG_SECURE, @@ -955,7 +957,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub this::onSecureWindowShown, this::shouldInterceptIntent, displayCategories, - showTasksInHostDeviceRecents); + showTasksInHostDeviceRecents, + homeComponent); gwpc.registerRunningAppsChangedListener(/* listener= */ this); return gwpc; } diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java index 6d2fc0dc21f63bcb56d51b850b2f674e76293a2b..4a0bc4b9ca6c8c84a7d3c2fa09659fc77e1066d4 100644 --- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java @@ -133,11 +133,14 @@ public class SettingsToPropertiesMapper { "companion", "context_hub", "core_experiments_team_internal", + "core_graphics", "haptics", "hardware_backed_security_mainline", + "machine_learning", "media_audio", "media_solutions", "nfc", + "pixel_audio_android", "pixel_system_sw_touch", "pixel_watch", "platform_security", @@ -151,6 +154,7 @@ public class SettingsToPropertiesMapper { "threadnetwork", "tv_system_ui", "vibrator", + "virtual_devices", "wear_frameworks", "wear_system_health", "wear_systems", diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java index cd867f60ebd01c178c21942ba5029eeca67bc417..0d6635d5b6e41014bcedb0d64478454c1faf9cf8 100644 --- a/services/core/java/com/android/server/display/ColorFade.java +++ b/services/core/java/com/android/server/display/ColorFade.java @@ -43,7 +43,6 @@ import android.window.ScreenCapture; import com.android.internal.annotations.VisibleForTesting; import com.android.server.LocalServices; import com.android.server.policy.WindowManagerPolicy; -import com.android.server.wm.WindowManagerInternal; import libcore.io.Streams; @@ -408,12 +407,6 @@ final class ColorFade { } } - void stop() { - if (mEglContext != null && mEglDisplay != null) { - EGL14.eglDestroyContext(mEglDisplay, mEglContext); - } - } - /** * Draws an animation frame showing the color fade activated at the * specified level. @@ -574,21 +567,8 @@ final class ColorFade { } private ScreenCapture.ScreenshotHardwareBuffer captureScreen() { - WindowManagerInternal windowManagerService = LocalServices.getService( - WindowManagerInternal.class); - ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer; - ScreenCapture.SynchronousScreenCaptureListener screenCaptureListener = - ScreenCapture.createSyncCaptureListener(); - ScreenCapture.CaptureArgs captureArgs = new ScreenCapture.CaptureArgs.Builder<>() - .setCaptureSecureLayers(true) - .setAllowProtected(true) - .build(); - try { - windowManagerService.captureDisplay(mDisplayId, captureArgs, screenCaptureListener); - screenshotBuffer = screenCaptureListener.getBuffer(); - } catch (Exception e) { - screenshotBuffer = null; - } + ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer = + mDisplayManagerInternal.systemScreenshot(mDisplayId); if (screenshotBuffer == null) { Slog.e(TAG, "Failed to take screenshot. Buffer is null"); return null; diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index df45001b708658a0508e5e530333e4ab759b642b..46ef6c3bd3e46acc39ba9effa2255ce90ca8541f 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -137,6 +137,7 @@ import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceControl.RefreshRateRange; import android.window.DisplayWindowPolicyController; +import android.window.ScreenCapture; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -2673,6 +2674,42 @@ public final class DisplayManagerService extends SystemService { return null; } + private ScreenCapture.ScreenshotHardwareBuffer systemScreenshotInternal(int displayId) { + final ScreenCapture.DisplayCaptureArgs captureArgs; + synchronized (mSyncRoot) { + final IBinder token = getDisplayToken(displayId); + if (token == null) { + return null; + } + final LogicalDisplay logicalDisplay = mLogicalDisplayMapper.getDisplayLocked(displayId); + if (logicalDisplay == null) { + return null; + } + + final DisplayInfo displayInfo = logicalDisplay.getDisplayInfoLocked(); + captureArgs = new ScreenCapture.DisplayCaptureArgs.Builder(token) + .setSize(displayInfo.getNaturalWidth(), displayInfo.getNaturalHeight()) + .setCaptureSecureLayers(true) + .setAllowProtected(true) + .build(); + } + return ScreenCapture.captureDisplay(captureArgs); + } + + private ScreenCapture.ScreenshotHardwareBuffer userScreenshotInternal(int displayId) { + synchronized (mSyncRoot) { + final IBinder token = getDisplayToken(displayId); + if (token == null) { + return null; + } + + final ScreenCapture.DisplayCaptureArgs captureArgs = + new ScreenCapture.DisplayCaptureArgs.Builder(token) + .build(); + return ScreenCapture.captureDisplay(captureArgs); + } + } + @VisibleForTesting DisplayedContentSamplingAttributes getDisplayedContentSamplingAttributesInternal( int displayId) { @@ -4440,6 +4477,16 @@ public final class DisplayManagerService extends SystemService { mDisplayGroupListeners.remove(listener); } + @Override + public ScreenCapture.ScreenshotHardwareBuffer systemScreenshot(int displayId) { + return systemScreenshotInternal(displayId); + } + + @Override + public ScreenCapture.ScreenshotHardwareBuffer userScreenshot(int displayId) { + return userScreenshotInternal(displayId); + } + @Override public DisplayInfo getDisplayInfo(int displayId) { return getDisplayInfoInternal(displayId, Process.myUid()); diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index bc81491aefbfaa405f44c85f038b115f54f81819..83f4df97c5dce31b738f7a10bfcccb932b8fa2cc 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -3577,8 +3577,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { - return new DisplayPowerState(blanker, colorFade, displayId, displayState, - new Handler(/*async=*/ true)); + return new DisplayPowerState(blanker, colorFade, displayId, displayState); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 90a8490b6f49793723cf9125c54f707b1279f811..b0d293a1709fc8503277a35a0b290657e3eacea1 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -324,6 +324,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal // Must only be accessed on the handler thread. private DisplayPowerState mPowerState; + + // The currently active screen on unblocker. This field is non-null whenever // we are waiting for a callback to release it and unblock the screen. private ScreenOnUnblocker mPendingScreenOnUnblocker; @@ -2914,8 +2916,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { - return new DisplayPowerState(blanker, colorFade, displayId, displayState, - new Handler(/*async=*/ true)); + return new DisplayPowerState(blanker, colorFade, displayId, displayState); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java index 85c6a6de860f00155ea6cdba9aa3fe53e705d867..2c257a17af916b231c5b9e8f94bfc1d3667f6863 100644 --- a/services/core/java/com/android/server/display/DisplayPowerState.java +++ b/services/core/java/com/android/server/display/DisplayPowerState.java @@ -74,9 +74,8 @@ final class DisplayPowerState { private volatile boolean mStopped; DisplayPowerState( - DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState, - Handler handler) { - mHandler = handler; + DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { + mHandler = new Handler(true /*async*/); mChoreographer = Choreographer.getInstance(); mBlanker = blanker; mColorFade = colorFade; @@ -318,7 +317,6 @@ final class DisplayPowerState { mStopped = true; mPhotonicModulator.interrupt(); dismissColorFade(); - stopColorFade(); mCleanListener = null; mHandler.removeCallbacksAndMessages(null); } @@ -378,11 +376,6 @@ final class DisplayPowerState { } } - // Clears up color fade resources. - private void stopColorFade() { - if (mColorFade != null) mColorFade.stop(); - } - private final Runnable mScreenUpdateRunnable = new Runnable() { @Override public void run() { diff --git a/services/core/java/com/android/server/display/mode/VotesStorage.java b/services/core/java/com/android/server/display/mode/VotesStorage.java index dadcebe8d8a1b5c63be534bfabfc0e81725415bf..bdd2ab7d63b44aa061c25816971364b3a80f7468 100644 --- a/services/core/java/com/android/server/display/mode/VotesStorage.java +++ b/services/core/java/com/android/server/display/mode/VotesStorage.java @@ -18,6 +18,7 @@ package com.android.server.display.mode; import android.annotation.NonNull; import android.annotation.Nullable; +import android.os.Trace; import android.util.Slog; import android.util.SparseArray; @@ -104,6 +105,9 @@ class VotesStorage { votes.remove(priority); } } + Trace.traceCounter(Trace.TRACE_TAG_POWER, + TAG + "." + displayId + ":" + Vote.priorityToString(priority), + getMaxPhysicalRefreshRate(vote)); if (mLoggingEnabled) { Slog.i(TAG, "Updated votes for display=" + displayId + " votes=" + votes); } @@ -146,6 +150,15 @@ class VotesStorage { } } + private int getMaxPhysicalRefreshRate(@Nullable Vote vote) { + if (vote == null) { + return -1; + } else if (vote.refreshRateRanges.physical.max == Float.POSITIVE_INFINITY) { + return 1000; // for visualisation, otherwise e.g. -1 -> 60 will be unnoticeable + } + return (int) vote.refreshRateRanges.physical.max; + } + interface Listener { void onChanged(); } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java index 7045e65a8936817a85c1988d81058e9ed92bf514..c01bc2063a5939decd6b4cd0e497afcaccc8d3a3 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java @@ -867,6 +867,28 @@ public class HdmiCecNetwork { clearLocalDevices(); } + @ServiceThreadOnly + void removeUnusedLocalDevices(ArrayList<HdmiCecLocalDevice> allocatedDevices) { + ArrayList<Integer> deviceTypesToRemove = new ArrayList<>(); + for (int i = 0; i < mLocalDevices.size(); i++) { + int deviceType = mLocalDevices.keyAt(i); + boolean shouldRemoveLocalDevice = allocatedDevices.stream().noneMatch( + localDevice -> localDevice.getDeviceInfo() != null + && localDevice.getDeviceInfo().getDeviceType() == deviceType); + if (shouldRemoveLocalDevice) { + deviceTypesToRemove.add(deviceType); + } + } + for (Integer deviceType : deviceTypesToRemove) { + mLocalDevices.remove(deviceType); + } + } + + @ServiceThreadOnly + void removeLocalDeviceWithType(int deviceType) { + mLocalDevices.remove(deviceType); + } + @ServiceThreadOnly public void clearDeviceList() { assertRunOnServiceThread(); diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 232bc470c95c39125fb62c895ee9406b7bfaf832..429db5eeed4943972d3a0c9bcdb2988512155568 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -1313,9 +1313,6 @@ public class HdmiControlService extends SystemService { localDevice.init(); localDevices.add(localDevice); } - // It's now safe to flush existing local devices from mCecController since they were - // already moved to 'localDevices'. - clearCecLocalDevices(); mHdmiCecNetwork.clearDeviceList(); allocateLogicalAddress(localDevices, initiatedBy); } @@ -1344,6 +1341,7 @@ public class HdmiControlService extends SystemService { if (logicalAddress == Constants.ADDR_UNREGISTERED) { Slog.e(TAG, "Failed to allocate address:[device_type:" + deviceType + "]"); + mHdmiCecNetwork.removeLocalDeviceWithType(deviceType); } else { // Set POWER_STATUS_ON to all local devices because they share // lifetime @@ -1352,6 +1350,8 @@ public class HdmiControlService extends SystemService { deviceType, HdmiControlManager.POWER_STATUS_ON, getCecVersion()); localDevice.setDeviceInfo(deviceInfo); + // If a local device of the same type already exists, it will be + // replaced. mHdmiCecNetwork.addLocalDevice(deviceType, localDevice); mHdmiCecNetwork.addCecDevice(localDevice.getDeviceInfo()); mCecController.addLogicalAddress(logicalAddress); @@ -1367,6 +1367,10 @@ public class HdmiControlService extends SystemService { // since we reallocate the logical address only. onInitializeCecComplete(initiatedBy); } + // We remove local devices here, instead of before the start of + // address allocation, to prevent multiple local devices of the + // same type from existing simultaneously. + mHdmiCecNetwork.removeUnusedLocalDevices(allocatedDevices); mAddressAllocated = true; notifyAddressAllocated(allocatedDevices, initiatedBy); // Reinvoke the saved display status callback once the local @@ -1386,9 +1390,19 @@ public class HdmiControlService extends SystemService { } } + /** + * Notifies local devices that address allocation finished. + * @param devices - list of local devices allocated. + * @param initiatedBy - reason for the address allocation. + */ + @VisibleForTesting @ServiceThreadOnly - private void notifyAddressAllocated(ArrayList<HdmiCecLocalDevice> devices, int initiatedBy) { + public void notifyAddressAllocated(ArrayList<HdmiCecLocalDevice> devices, int initiatedBy) { assertRunOnServiceThread(); + if (devices == null || devices.isEmpty()) { + Slog.w(TAG, "No local device to notify."); + return; + } List<HdmiCecMessage> bufferedMessages = mCecMessageBuffer.getBuffer(); for (HdmiCecLocalDevice device : devices) { int address = device.getDeviceInfo().getLogicalAddress(); diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index d3ad6c437f788f1e3b5626abffe939757345bafa..3435e560b1f9380d8f0a3167cc7203070025bdb1 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -92,7 +92,6 @@ import android.os.IBinder; import android.os.LocaleList; import android.os.Looper; import android.os.Message; -import android.os.Parcel; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; @@ -1868,21 +1867,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub false /* enabledOnly */)); } - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) - throws RemoteException { - try { - return super.onTransact(code, data, reply, flags); - } catch (RuntimeException e) { - // The input method manager only throws security exceptions, so let's - // log all others. - if (!(e instanceof SecurityException)) { - Slog.wtf(TAG, "Input Method Manager Crash", e); - } - throw e; - } - } - /** * TODO(b/32343335): The entire systemRunning() method needs to be revisited. */ diff --git a/services/core/java/com/android/server/notification/TEST_MAPPING b/services/core/java/com/android/server/notification/TEST_MAPPING index 59b2bc1e4f73673a7720d7d8bfb3a08d945ce556..7db2e8b1333f6329e244cb29ac3276c14e9d6117 100644 --- a/services/core/java/com/android/server/notification/TEST_MAPPING +++ b/services/core/java/com/android/server/notification/TEST_MAPPING @@ -13,7 +13,7 @@ "exclude-annotation": "org.junit.Ignore" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.LargeTest" @@ -33,7 +33,7 @@ "exclude-annotation": "org.junit.Ignore" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "androidx.test.filters.LargeTest" diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index f554773becad5908a6513142d1759871c8af31d0..54a2e3adf713cfcf8e893ccbc3c48b981fb3dbb3 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2931,15 +2931,40 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * @return a future that will be completed when the whole process is completed. */ private CompletableFuture<Void> install() { + // `futures` either contains only one session (`this`) or contains one parent session + // (`this`) and n-1 child sessions. List<CompletableFuture<InstallResult>> futures = installNonStaged(); CompletableFuture<InstallResult>[] arr = new CompletableFuture[futures.size()]; return CompletableFuture.allOf(futures.toArray(arr)).whenComplete((r, t) -> { if (t == null) { setSessionApplied(); + var multiPackageWarnings = new ArrayList<String>(); + if (isMultiPackage()) { + // This is a parent session. Collect warnings from children. + for (CompletableFuture<InstallResult> f : futures) { + InstallResult result = f.join(); + if (result.session != this && result.extras != null) { + ArrayList<String> childWarnings = result.extras.getStringArrayList( + PackageInstaller.EXTRA_WARNINGS); + if (!ArrayUtils.isEmpty(childWarnings)) { + multiPackageWarnings.addAll(childWarnings); + } + } + } + } for (CompletableFuture<InstallResult> f : futures) { InstallResult result = f.join(); + Bundle extras = result.extras; + if (isMultiPackage() && result.session == this + && !multiPackageWarnings.isEmpty()) { + if (extras == null) { + extras = new Bundle(); + } + extras.putStringArrayList( + PackageInstaller.EXTRA_WARNINGS, multiPackageWarnings); + } result.session.dispatchSessionFinished( - INSTALL_SUCCEEDED, "Session installed", result.extras); + INSTALL_SUCCEEDED, "Session installed", extras); } } else { PackageManagerException e = (PackageManagerException) t.getCause(); @@ -3817,8 +3842,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { // Stage APK's fs-verity signature if present. maybeStageFsveritySignatureLocked(origFile, targetFile, isFsVerityRequiredForApk(origFile, targetFile)); - // Stage APK's v4 signature if present. - if (android.security.Flags.extendVbChainToUpdatedApk()) { + // Stage APK's v4 signature if present, and fs-verity is supported. + if (android.security.Flags.extendVbChainToUpdatedApk() + && VerityUtils.isFsVeritySupported()) { maybeStageV4SignatureLocked(origFile, targetFile); } // Stage dex metadata (.dm) and corresponding fs-verity signature if present. diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 700fae953ead6f591e9217e2f7549613a2f4360e..33cb85c038a0ac308ea3d67ec855c3503705e3ef 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4681,9 +4681,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService @UserIdInt int userId, @NonNull String recentCallingPackage, @NonNull String debugInfo) { synchronized (mLock) { - final PackageUserStateInternal userState = mSettings.getPackageLPr( - packageName).getUserStateOrDefault(userId); - if (userState.isQuarantined()) { + final PackageSetting pkgSetting = mSettings.getPackageLPr(packageName); + // If the package doesn't exist, don't need to proceed to setPackageStoppedState. + if (pkgSetting == null) { + return; + } + if (pkgSetting.getUserStateOrDefault(userId).isQuarantined()) { Slog.i(TAG, "Component is quarantined+suspended but being used: " + packageName + " by " + recentCallingPackage + ", debugInfo: " diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 097656cac7f7b135cbb2f0312754764dcd5e8257..dc75a98c5bdcc2b1ab3e254c114759b0939c649f 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1983,6 +1983,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void run() { if (mPendingHomeKeyEvent != null) { handleShortPressOnHome(mPendingHomeKeyEvent); + mPendingHomeKeyEvent.recycle(); mPendingHomeKeyEvent = null; } } @@ -2027,7 +2028,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mDoubleTapOnHomeBehavior != DOUBLE_TAP_HOME_PIP_MENU || mPictureInPictureVisible) { mHandler.removeCallbacks(mHomeDoubleTapTimeoutRunnable); // just in case - mPendingHomeKeyEvent = event; + mPendingHomeKeyEvent = KeyEvent.obtain(event); mHandler.postDelayed(mHomeDoubleTapTimeoutRunnable, ViewConfiguration.getDoubleTapTimeout()); return true; @@ -2035,7 +2036,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } // Post to main thread to avoid blocking input pipeline. - mHandler.post(() -> handleShortPressOnHome(event)); + final KeyEvent shortPressEvent = KeyEvent.obtain(event); + mHandler.post(() -> { + handleShortPressOnHome(shortPressEvent); + shortPressEvent.recycle(); + }); return true; } @@ -2062,9 +2067,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (repeatCount == 0) { mHomePressed = true; if (mPendingHomeKeyEvent != null) { + mPendingHomeKeyEvent.recycle(); mPendingHomeKeyEvent = null; mHandler.removeCallbacks(mHomeDoubleTapTimeoutRunnable); - mHandler.post(() -> handleDoubleTapOnHome(event)); + final KeyEvent doublePressEvent = KeyEvent.obtain(event); + mHandler.post(() -> { + handleDoubleTapOnHome(doublePressEvent); + doublePressEvent.recycle(); + }); // TODO(multi-display): Remove display id check once we support recents on // multi-display } else if (mDoubleTapOnHomeBehavior == DOUBLE_TAP_HOME_RECENT_SYSTEM_UI @@ -2074,7 +2084,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) { if (!keyguardOn) { // Post to main thread to avoid blocking input pipeline. - mHandler.post(() -> handleLongPressOnHome(event)); + final KeyEvent longPressEvent = KeyEvent.obtain(event); + mHandler.post(() -> { + handleLongPressOnHome(longPressEvent); + longPressEvent.recycle(); + }); } } return true; diff --git a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java index 87809916bcaf5fa8d921e86a7aaf7e6c118496c0..c9db343697df1bad24dd4ca2513a6159b8a0517c 100644 --- a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java +++ b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java @@ -105,6 +105,7 @@ import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; +import android.safetycenter.SafetyCenterManager; import android.service.voice.VoiceInteractionManagerInternal; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; @@ -173,6 +174,8 @@ public final class SensorPrivacyService extends SystemService { private CallStateHelper mCallStateHelper; private KeyguardManager mKeyguardManager; + private SafetyCenterManager mSafetyCenterManager; + private int mCurrentUser = USER_NULL; public SensorPrivacyService(Context context) { @@ -188,6 +191,7 @@ public final class SensorPrivacyService extends SystemService { mTelephonyManager = context.getSystemService(TelephonyManager.class); mPackageManagerInternal = getLocalService(PackageManagerInternal.class); mSensorPrivacyServiceImpl = new SensorPrivacyServiceImpl(); + mSafetyCenterManager = mContext.getSystemService(SafetyCenterManager.class); } @Override @@ -652,8 +656,11 @@ public final class SensorPrivacyService extends SystemService { String contentTitle = getUiContext().getString(messageRes); Spanned contentText = Html.fromHtml(getUiContext().getString( R.string.sensor_privacy_start_use_notification_content_text, packageLabel), 0); + String action = mSafetyCenterManager.isSafetyCenterEnabled() + ? Settings.ACTION_PRIVACY_CONTROLS : Settings.ACTION_PRIVACY_SETTINGS; + PendingIntent contentIntent = PendingIntent.getActivity(mContext, sensor, - new Intent(Settings.ACTION_PRIVACY_SETTINGS), + new Intent(action), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index d8245348d788a3e03a58db4d6d3cb2d24a13cceb..a0c78702fec55c808cde46c23a59861c88e86ba9 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2887,7 +2887,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final boolean animate; if (mStartingData != null) { if (mStartingData.mWaitForSyncTransactionCommit - || mTransitionController.inCollectingTransition(startingWindow)) { + || mTransitionController.isCollecting(this)) { mStartingData.mRemoveAfterTransaction = AFTER_TRANSACTION_REMOVE_DIRECTLY; mStartingData.mPrepareRemoveAnimation = prepareAnimation; return; diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 1ad57986353cb1f1d75d9b7287a49171c3d7a08c..901975ba3614dda9bc18cc1fa2940d0645cbd441 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -795,10 +795,19 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { return false; } - // Try pausing the existing resumed activity in the Task if any. final Task task = r.getTask(); - if (task.pauseActivityIfNeeded(r, "realStart")) { - return false; + if (andResume) { + // Try pausing the existing resumed activity in the Task if any. + if (task.pauseActivityIfNeeded(r, "realStart")) { + return false; + } + final TaskFragment taskFragment = r.getTaskFragment(); + if (taskFragment != null && taskFragment.getResumedActivity() != null) { + if (taskFragment.startPausing(mUserLeaving, false /* uiSleeping */, r, + "realStart")) { + return false; + } + } } final Task rootTask = task.getRootTask(); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 4309e72c30d70aa4ca2129d329555a8386962a81..ca42400dad26e606f600faf9dbe9734b51f10185 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2159,6 +2159,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mDwpcHelper.canShowTasksInHostDeviceRecents(); } + /** + * @see DisplayWindowPolicyController#getCustomHomeComponent() () + */ + @Nullable ComponentName getCustomHomeComponent() { + if (!supportsSystemDecorations() || mDwpcHelper == null) { + return null; + } + return mDwpcHelper.getCustomHomeComponent(); + } + /** * Applies the rotation transaction. This must be called after {@link #updateRotationUnchecked} * (if it returned {@code true}) to actually finish the rotation. diff --git a/services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java b/services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java index 6b33746ad3c4ae9ca54de72dfd7d2ef1d24ad5ba..e0d69b063573e8f381b37a54d34aecc841088f7a 100644 --- a/services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java +++ b/services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java @@ -19,6 +19,7 @@ package com.android.server.wm; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; +import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Process; @@ -200,6 +201,17 @@ class DisplayWindowPolicyControllerHelper { return mDisplayWindowPolicyController.isEnteringPipAllowed(uid); } + /** + * @see DisplayWindowPolicyController#getCustomHomeComponent + */ + @Nullable + public ComponentName getCustomHomeComponent() { + if (mDisplayWindowPolicyController == null) { + return null; + } + return mDisplayWindowPolicyController.getCustomHomeComponent(); + } + void dump(String prefix, PrintWriter pw) { if (mDisplayWindowPolicyController != null) { pw.println(); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 2fdfec04b8958edc9e663efecfd74de495b5bbff..2a3391807a2ca977f3564b5a3c2b35e4719edfa6 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -1513,10 +1513,30 @@ class RootWindowContainer extends WindowContainer<DisplayContent> throw new IllegalArgumentException( "resolveSecondaryHomeActivity: Should not be default task container"); } - // Resolve activities in the same package as currently selected primary home activity. + Intent homeIntent = mService.getHomeIntent(); ActivityInfo aInfo = resolveHomeActivity(userId, homeIntent); - if (aInfo != null) { + boolean lookForSecondaryHomeActivityInPrimaryHomePackage = aInfo != null; + + if (android.companion.virtual.flags.Flags.vdmCustomHome()) { + // Resolve the externally set home activity for this display, if any. If it is unset or + // we fail to resolve it, fallback to the default secondary home activity. + final ComponentName customHomeComponent = + taskDisplayArea.getDisplayContent() != null + ? taskDisplayArea.getDisplayContent().getCustomHomeComponent() + : null; + if (customHomeComponent != null) { + homeIntent.setComponent(customHomeComponent); + ActivityInfo customHomeActivityInfo = resolveHomeActivity(userId, homeIntent); + if (customHomeActivityInfo != null) { + aInfo = customHomeActivityInfo; + lookForSecondaryHomeActivityInPrimaryHomePackage = false; + } + } + } + + if (lookForSecondaryHomeActivityInPrimaryHomePackage) { + // Resolve activities in the same package as currently selected primary home activity. if (ResolverActivity.class.getName().equals(aInfo.name)) { // Always fallback to secondary home component if default home is not set. aInfo = null; diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index 2c142cbed5854fdf3c2f58cd729d16bded574a7d..bbb85636f1eec5caec8ebe5a80ce22f9b8b3459a 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -40,9 +40,11 @@ import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.hardware.HardwareBuffer; +import android.os.IBinder; import android.os.Trace; import android.util.Slog; import android.util.proto.ProtoOutputStream; +import android.view.DisplayAddress; import android.view.DisplayInfo; import android.view.Surface; import android.view.Surface.OutOfResourcesException; @@ -55,6 +57,7 @@ import android.window.ScreenCapture; import com.android.internal.R; import com.android.internal.policy.TransitionAnimation; import com.android.internal.protolog.common.ProtoLog; +import com.android.server.display.DisplayControl; import com.android.server.wm.SurfaceAnimator.AnimationType; import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; @@ -168,10 +171,32 @@ class ScreenRotationAnimation { try { final ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer; if (isSizeChanged) { + final DisplayAddress address = displayInfo.address; + if (!(address instanceof DisplayAddress.Physical)) { + Slog.e(TAG, "Display does not have a physical address: " + displayId); + return; + } + final DisplayAddress.Physical physicalAddress = + (DisplayAddress.Physical) address; + final IBinder displayToken = DisplayControl.getPhysicalDisplayToken( + physicalAddress.getPhysicalDisplayId()); + if (displayToken == null) { + Slog.e(TAG, "Display token is null."); + return; + } // Temporarily not skip screenshot for the rounded corner overlays and screenshot // the whole display to include the rounded corner overlays. setSkipScreenshotForRoundedCornerOverlays(false, t); - } + mRoundedCornerOverlay = displayContent.findRoundedCornerOverlays(); + final ScreenCapture.DisplayCaptureArgs captureArgs = + new ScreenCapture.DisplayCaptureArgs.Builder(displayToken) + .setSourceCrop(new Rect(0, 0, width, height)) + .setAllowProtected(true) + .setCaptureSecureLayers(true) + .setHintForSeamlessTransition(true) + .build(); + screenshotBuffer = ScreenCapture.captureDisplay(captureArgs); + } else { ScreenCapture.LayerCaptureArgs captureArgs = new ScreenCapture.LayerCaptureArgs.Builder( displayContent.getSurfaceControl()) @@ -181,6 +206,7 @@ class ScreenRotationAnimation { .setHintForSeamlessTransition(true) .build(); screenshotBuffer = ScreenCapture.captureLayers(captureArgs); + } if (screenshotBuffer == null) { Slog.w(TAG, "Unable to take screenshot of display " + displayId); diff --git a/services/core/java/com/android/server/wm/StartingData.java b/services/core/java/com/android/server/wm/StartingData.java index 2d281c476ec2d006a88f4134dcd6db3dd34d82a5..07ffa69e462a30f4d44b84192ca00ecefdceca1b 100644 --- a/services/core/java/com/android/server/wm/StartingData.java +++ b/services/core/java/com/android/server/wm/StartingData.java @@ -108,4 +108,13 @@ public abstract class StartingData { boolean hasImeSurface() { return false; } + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + Integer.toHexString(System.identityHashCode(this)) + + " waitForSyncTransactionCommit=" + mWaitForSyncTransactionCommit + + " removeAfterTransaction= " + mRemoveAfterTransaction + + "}"; + } } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index a4d43d8ef6d083c088a1f1799cca95f69d0e5cbc..9f1bccb9a27af203087054b112dc5a3c0fc07de4 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -45,7 +45,6 @@ import android.view.SurfaceControlViewHost; import android.view.WindowInfo; import android.view.WindowManager.DisplayImePolicy; import android.view.inputmethod.ImeTracker; -import android.window.ScreenCapture; import com.android.internal.policy.KeyInterceptionInfo; import com.android.server.input.InputManagerService; @@ -956,14 +955,6 @@ public abstract class WindowManagerInternal { /** Returns the SurfaceControl accessibility services should use for accessibility overlays. */ public abstract SurfaceControl getA11yOverlayLayer(int displayId); - /** - * Captures the entire display specified by the displayId using the args provided. If the args - * are null or if the sourceCrop is invalid or null, the entire display bounds will be captured. - */ - public abstract void captureDisplay(int displayId, - @Nullable ScreenCapture.CaptureArgs captureArgs, - ScreenCapture.ScreenCaptureListener listener); - /** * Device has a software navigation bar (separate from the status bar) on specific display. * diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 8fe104c23312699e0c841386ef9a74438e885a88..9a1920d7a217e293c650342d8716b0dc70c3d5e8 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8414,12 +8414,6 @@ public class WindowManagerService extends IWindowManager.Stub return null; } - @Override - public void captureDisplay(int displayId, @Nullable ScreenCapture.CaptureArgs captureArgs, - ScreenCapture.ScreenCaptureListener listener) { - WindowManagerService.this.captureDisplay(displayId, captureArgs, listener); - } - @Override public boolean hasNavigationBar(int displayId) { return WindowManagerService.this.hasNavigationBar(displayId); diff --git a/services/core/jni/TEST_MAPPING b/services/core/jni/TEST_MAPPING index ea44d06b9fc3595da8bb869adb9d4c0a10132df3..eb9db702f7f93603e567083639d447f524160c75 100644 --- a/services/core/jni/TEST_MAPPING +++ b/services/core/jni/TEST_MAPPING @@ -6,7 +6,7 @@ ], "name": "CtsVibratorTestCases", "options": [ - {"exclude-annotation": "android.platform.test.annotations.LargeTest"}, + {"exclude-annotation": "androidx.test.filters.LargeTest"}, {"exclude-annotation": "android.platform.test.annotations.FlakyTest"}, {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"} diff --git a/services/devicepolicy/TEST_MAPPING b/services/devicepolicy/TEST_MAPPING index 72bba11c5366ef28009367e3351e0486fa3b869a..fccd1ecf23c08046bb23801eee5bf8e759b65c13 100644 --- a/services/devicepolicy/TEST_MAPPING +++ b/services/devicepolicy/TEST_MAPPING @@ -7,7 +7,7 @@ "exclude-annotation": "android.platform.test.annotations.FlakyTest" }, { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" } ] } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 84d1a452fa7e3d50749c7bc04aa5f117486003ab..f60493289bfb9e0771886c8e838b95896d1315c8 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -16017,16 +16017,20 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public PackagePolicy getCredentialManagerPolicy() { + public PackagePolicy getCredentialManagerPolicy(int userId) { if (!mHasFeature) { return null; } final CallerIdentity caller = getCallerIdentity(); Preconditions.checkCallAuthorization( canWriteCredentialManagerPolicy(caller) || canQueryAdminPolicy(caller)); + if (userId != caller.getUserId()) { + Preconditions.checkCallAuthorization( + hasCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS)); + } synchronized (getLockObject()) { - ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()); + ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(userId); return (admin != null) ? admin.mCredentialManagerPolicy : null; } } diff --git a/services/foldables/devicestateprovider/OWNERS b/services/foldables/devicestateprovider/OWNERS new file mode 100644 index 0000000000000000000000000000000000000000..b2dcd0c0f3c4818e27a5ed47277632bb7881a836 --- /dev/null +++ b/services/foldables/devicestateprovider/OWNERS @@ -0,0 +1,6 @@ +akulian@google.com +kennethford@google.com +jiamingliu@google.com +kchyn@google.com +nickchameyev@google.com +nicomazz@google.com \ No newline at end of file diff --git a/services/incremental/TEST_MAPPING b/services/incremental/TEST_MAPPING index 4af880ded953cc520797352401efcc9ba14639d9..4c9403c9b21abb1d0ff269df27d8cb2ad51ad603 100644 --- a/services/incremental/TEST_MAPPING +++ b/services/incremental/TEST_MAPPING @@ -12,7 +12,7 @@ "name": "CtsPackageManagerIncrementalStatsHostTestCases", "options": [ { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" } ] }, @@ -55,7 +55,7 @@ "name": "CtsPackageManagerIncrementalStatsHostTestCases", "options": [ { - "include-annotation": "android.platform.test.annotations.LargeTest" + "include-annotation": "androidx.test.filters.LargeTest" } ] } diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java index 9174899dfe6c31a217c96c7b7b9b2327bddee432..a56b59a4a481a8b181b68e8e91c51e4354e4865d 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java @@ -1254,21 +1254,6 @@ public final class DisplayPowerController2Test { eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE), eq(false)); } - @Test - public void testPowerStateStopsOnDpcStop() { - // Set up - DisplayPowerRequest dpr = new DisplayPowerRequest(); - mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); - advanceTime(1); - - // Stop dpc - mHolder.dpc.stop(); - advanceTime(1); - - // Ensure dps has stopped - verify(mHolder.displayPowerState, times(1)).stop(); - } - @Test public void testRampRateForHdrContent_HdrClamperOff() { float hdrBrightness = 0.8f; diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java index 412b65f5835a4e57980086960d7b269d7c3a92c9..05721174b71fb4fe739de07a60bbf70cec54f993 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -1190,21 +1190,6 @@ public final class DisplayPowerControllerTest { eq(BRIGHTNESS_RAMP_RATE_SLOW_INCREASE_IDLE), eq(false)); } - @Test - public void testPowerStateStopsOnDpcStop() { - // Set up - DisplayPowerRequest dpr = new DisplayPowerRequest(); - mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); - advanceTime(1); - - // Stop dpc - mHolder.dpc.stop(); - advanceTime(1); - - // Ensure dps has stopped - verify(mHolder.displayPowerState, times(1)).stop(); - } - @Test public void testDisplayBrightnessHdr_SkipAnimationOnHdrAppearance() { Settings.System.putInt(mContext.getContentResolver(), diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.java deleted file mode 100644 index 167a412d38609deacaddd35ff9f21502e1251b97..0000000000000000000000000000000000000000 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.display; - -import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; - -import static org.mockito.Mockito.times; - -import android.os.Handler; -import android.os.test.TestLooper; -import android.view.Display; - -import androidx.test.filters.SmallTest; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - - -@SmallTest -public class DisplayPowerStateTest { - private static final int DISPLAY_ID = 123; - - private DisplayPowerState mDisplayPowerState; - private TestLooper mTestLooper; - @Mock - private DisplayBlanker mDisplayBlankerMock; - @Mock - private ColorFade mColorFadeMock; - - @Rule - public final MockitoRule mMockitoRule = MockitoJUnit.rule(); - - @Before - public void setUp() { - mTestLooper = new TestLooper(); - mDisplayPowerState = new DisplayPowerState( - mDisplayBlankerMock, mColorFadeMock, DISPLAY_ID, Display.STATE_ON, - new Handler(mTestLooper.getLooper())); - } - - @Test - public void testColorFadeStopsOnDpsStop() { - mDisplayPowerState.stop(); - verify(mColorFadeMock, times(1)).stop(); - } -} 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 552b59ce442de1e25503664bd6b830d434926dc1..a250ac75635bf79816ff014a5b3a3c17e80bcf81 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 @@ -33,7 +33,6 @@ import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX; import static com.android.server.job.JobSchedulerService.WORKING_INDEX; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import static com.android.server.job.JobSchedulerService.sSystemClock; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -75,11 +74,11 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.os.SystemClock; -import android.platform.test.annotations.LargeTest; import android.provider.DeviceConfig; import android.util.ArraySet; import android.util.SparseBooleanArray; +import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.ArrayUtils; @@ -2597,7 +2596,9 @@ public class QuotaControllerTest { @Test public void testIsWithinEJQuotaLocked_TempAllowlisting_Restricted() { setDischarging(); - JobStatus js = createExpeditedJobStatus("testIsWithinEJQuotaLocked_TempAllowlisting_Restricted", 1); + JobStatus js = + createExpeditedJobStatus( + "testIsWithinEJQuotaLocked_TempAllowlisting_Restricted", 1); setStandbyBucket(RESTRICTED_INDEX, js); setDeviceConfigLong(QcConstants.KEY_EJ_LIMIT_FREQUENT_MS, 10 * MINUTE_IN_MILLIS); final long now = JobSchedulerService.sElapsedRealtimeClock.millis(); @@ -6088,7 +6089,8 @@ public class QuotaControllerTest { Handler handler = mQuotaController.getHandler(); spyOn(handler); - JobStatus job = createExpeditedJobStatus("testEJTimerTracking_TempAllowlisting_Restricted", 1); + JobStatus job = + createExpeditedJobStatus("testEJTimerTracking_TempAllowlisting_Restricted", 1); setStandbyBucket(RESTRICTED_INDEX, job); synchronized (mQuotaController.mLock) { mQuotaController.maybeStartTrackingJobLocked(job, null); diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt index e578ea35518d9fa467cf5556a0c8aa7cf4d85cef..2f6859c14742ad7090496e757348279609e94d47 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt +++ b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt @@ -505,8 +505,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { pkg: ParsingPackage, applicationInfo: ApplicationInfo?, className: String? - ): - ActivityInfo { + ): ActivityInfo { val activityInfo = ActivityInfo() activityInfo.applicationInfo = applicationInfo activityInfo.packageName = pkg.packageName @@ -518,8 +517,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { pkg: ParsingPackage, applicationInfo: ApplicationInfo?, className: String? - ): - ServiceInfo { + ): ServiceInfo { val serviceInfo = ServiceInfo() serviceInfo.applicationInfo = applicationInfo serviceInfo.packageName = pkg.packageName @@ -699,8 +697,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { /** Override get*Folder methods to point to temporary local directories */ @Throws(IOException::class) - private fun redirectScanPartitions(partitions: List<ScanPartition>): - List<ScanPartition> { + private fun redirectScanPartitions(partitions: List<ScanPartition>): List<ScanPartition> { val spiedPartitions: MutableList<ScanPartition> = ArrayList(partitions.size) for (partition: ScanPartition in partitions) { @@ -732,6 +729,7 @@ class MockSystemRule : TestRule { } finally { mockSystem?.cleanup() mockSystem = null + Mockito.framework().clearInlineMocks() } } } diff --git a/services/tests/servicestests/src/com/android/server/accessibility/gestures/TouchExplorerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/gestures/TouchExplorerTest.java index 4a06611f397ed263220003def12798d4c8aa2500..1cd61e90126e34c5686317286db5bf2be63425e0 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/gestures/TouchExplorerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/gestures/TouchExplorerTest.java @@ -253,7 +253,8 @@ public class TouchExplorerTest { goFromStateClearTo(STATE_TOUCH_EXPLORING_1FINGER); moveEachPointers(mLastEvent, p(10, 10)); send(mLastEvent); - + // Wait 10 ms to make sure that hover enter and exit are not scheduled for the same moment. + mHandler.fastForward(10); send(upEvent()); // Wait for sending hover exit event to transit to clear state. mHandler.fastForward(USER_INTENT_TIMEOUT); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java index 8faddf8ff5412628341e55f42efc2a6f9d860e61..fcfe48ef4c03085798f5f1eb71bee6e61bfcd4b2 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java @@ -17,7 +17,6 @@ package com.android.server.accessibility.magnification; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; @@ -27,13 +26,13 @@ import static org.mockito.Mockito.when; import android.graphics.Rect; import android.os.Handler; -import android.platform.test.annotations.LargeTest; import android.testing.TestableContext; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowMetrics; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/audio/VirtualAudioControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/audio/VirtualAudioControllerTest.java index c40ad2840501f767889f1c909bde4dd3d27e23cc..1c48b8aa79f9e454eed5cc552ecaa95083b736be 100644 --- a/services/tests/servicestests/src/com/android/server/companion/virtual/audio/VirtualAudioControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/companion/virtual/audio/VirtualAudioControllerTest.java @@ -88,7 +88,8 @@ public class VirtualAudioControllerTest { /* secureWindowCallback= */ null, /* intentListenerCallback= */ null, /* displayCategories= */ new ArraySet<>(), - /* showTasksInHostDeviceRecents= */ true); + /* showTasksInHostDeviceRecents= */ true, + /* customHomeComponent= */ null); } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index 0d172fdb2a80849cbbca2ae447acb0c596e237f8..708ee352a8c9c7d56ff1332046316b5c47b122f7 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -21,8 +21,15 @@ import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV; import static com.android.server.SystemService.PHASE_BOOT_COMPLETED; import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY; +import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; +import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1; +import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2; +import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_3; import static com.android.server.hdmi.HdmiControlService.DEVICE_CLEANUP_TIMEOUT; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; +import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_HOTPLUG; +import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_SCREEN_ON; +import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_SOUNDBAR_MODE; import static com.android.server.hdmi.HdmiControlService.WAKE_UP_SCREEN_ON; import static com.google.common.truth.Truth.assertThat; @@ -51,6 +58,7 @@ import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiCecVolumeControlFeatureListener; import android.hardware.hdmi.IHdmiControlStatusChangeListener; import android.hardware.hdmi.IHdmiVendorCommandListener; +import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.Binder; import android.os.Looper; import android.os.RemoteException; @@ -71,6 +79,7 @@ import org.mockito.Mockito; import java.util.ArrayList; import java.util.Arrays; import java.util.Optional; +import java.util.concurrent.TimeUnit; /** * Tests for {@link HdmiControlService} class. @@ -137,7 +146,7 @@ public class HdmiControlServiceTest { mLocalDevices.add(mAudioSystemDeviceSpy); mLocalDevices.add(mPlaybackDeviceSpy); - mHdmiPortInfo = new HdmiPortInfo[4]; + mHdmiPortInfo = new HdmiPortInfo[5]; mHdmiPortInfo[0] = new HdmiPortInfo.Builder(1, HdmiPortInfo.PORT_INPUT, 0x2100) .setCecSupported(true) @@ -166,6 +175,13 @@ public class HdmiControlServiceTest { .setArcSupported(false) .setEarcSupported(false) .build(); + mHdmiPortInfo[4] = + new HdmiPortInfo.Builder(4, HdmiPortInfo.PORT_OUTPUT, 0x3000) + .setCecSupported(true) + .setMhlSupported(false) + .setArcSupported(false) + .setEarcSupported(false) + .build(); mNativeWrapper.setPortInfo(mHdmiPortInfo); mHdmiControlServiceSpy.initService(); mWakeLockSpy = spy(new FakePowerManagerWrapper.FakeWakeLockWrapper()); @@ -1395,6 +1411,207 @@ public class HdmiControlServiceTest { verify(mHdmiControlServiceSpy, times(0)).setEarcEnabledInHal(eq(true), anyBoolean()); } + @Test + public void triggerMultipleAddressAllocations_uniqueLocalDevicePerDeviceType() { + long allocationDelay = TimeUnit.SECONDS.toMillis(60); + mHdmiCecController.setLogicalAddressAllocationDelay(allocationDelay); + mTestLooper.dispatchAll(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + // Wake up process that will trigger the address allocation to start. + mHdmiControlServiceSpy.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SCREEN_ON)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + mTestLooper.dispatchAll(); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // Hotplug In will trigger the address allocation to start. + mHdmiControlServiceSpy.onHotplug(4, true); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_HOTPLUG)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The first allocation finished. The second allocation is still in progress. + HdmiCecLocalDevicePlayback firstAllocatedPlayback = mHdmiControlServiceSpy.playback(); + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SCREEN_ON)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The second allocation finished. + HdmiCecLocalDevicePlayback secondAllocatedPlayback = mHdmiControlServiceSpy.playback(); + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_HOTPLUG)); + // Local devices have the same identity. + assertTrue(firstAllocatedPlayback == secondAllocatedPlayback); + } + + @Test + public void triggerMultipleAddressAllocations_keepLastAllocatedAddress() { + // First logical address for playback is free. + mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.NACK); + mTestLooper.dispatchAll(); + + long allocationDelay = TimeUnit.SECONDS.toMillis(60); + mHdmiCecController.setLogicalAddressAllocationDelay(allocationDelay); + mTestLooper.dispatchAll(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + // Wake up process that will trigger the address allocation to start. + mHdmiControlServiceSpy.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SCREEN_ON)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + mTestLooper.dispatchAll(); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + + // First logical address for playback is busy. + mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); + mTestLooper.dispatchAll(); + + mHdmiControlServiceSpy.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SCREEN_ON)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + mTestLooper.dispatchAll(); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The first allocation finished. The second allocation is still in progress. + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SCREEN_ON)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The second allocation finished. Second logical address for playback is used. + HdmiCecLocalDevicePlayback allocatedPlayback = mHdmiControlServiceSpy.playback(); + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SCREEN_ON)); + assertThat(allocatedPlayback.getDeviceInfo().getLogicalAddress()) + .isEqualTo(ADDR_PLAYBACK_2); + } + + @Test + public void triggerMultipleAddressAllocations_toggleSoundbarMode_addThenRemoveAudioSystem() { + mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_ON); + long allocationDelay = TimeUnit.SECONDS.toMillis(60); + mHdmiCecController.setLogicalAddressAllocationDelay(allocationDelay); + mTestLooper.dispatchAll(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + // Enabling Dynamic soundbar mode will trigger address allocation. + mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, + HdmiControlManager.SOUNDBAR_MODE_ENABLED); + mTestLooper.dispatchAll(); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // Disabling Dynamic soundbar mode will trigger another address allocation. + mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, + HdmiControlManager.SOUNDBAR_MODE_DISABLED); + mTestLooper.dispatchAll(); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The first allocation finished. The second allocation is still in progress. + // The audio system is present in the network. + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNotNull(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The second allocation finished. The audio system is not present in the network. + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNull(); + } + + @Test + public void triggerMultipleAddressAllocations_toggleSoundbarMode_removeThenAddAudioSystem() { + mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_ON); + // Enable the setting and check if the audio system local device is found in the network. + mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, + HdmiControlManager.SOUNDBAR_MODE_ENABLED); + mTestLooper.dispatchAll(); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNotNull(); + + long allocationDelay = TimeUnit.SECONDS.toMillis(60); + mHdmiCecController.setLogicalAddressAllocationDelay(allocationDelay); + mTestLooper.dispatchAll(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + // Disabling Dynamic soundbar mode will trigger address allocation. + mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, + HdmiControlManager.SOUNDBAR_MODE_DISABLED); + mTestLooper.dispatchAll(); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // Enabling Dynamic soundbar mode will trigger another address allocation. + mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE, + HdmiControlManager.SOUNDBAR_MODE_ENABLED); + mTestLooper.dispatchAll(); + verify(mHdmiControlServiceSpy, times(1)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The first allocation finished. The second allocation is still in progress. + // The audio system is not present in the network. + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNull(); + Mockito.clearInvocations(mHdmiControlServiceSpy); + + mTestLooper.moveTimeForward(allocationDelay / 2); + mTestLooper.dispatchAll(); + // The second allocation finished. The audio system is present in the network. + verify(mHdmiControlServiceSpy, times(1)) + .notifyAddressAllocated(any(), eq(INITIATED_BY_SOUNDBAR_MODE)); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNotNull(); + } + + @Test + public void failedAddressAllocation_noLocalDevice() { + mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); + mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS); + mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_3, SendMessageResult.SUCCESS); + mNativeWrapper.setPollAddressResponse(ADDR_AUDIO_SYSTEM, SendMessageResult.SUCCESS); + mTestLooper.dispatchAll(); + + mHdmiControlServiceSpy.clearCecLocalDevices(); + mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); + mTestLooper.dispatchAll(); + + assertThat(mHdmiControlServiceSpy.playback()).isNull(); + assertThat(mHdmiControlServiceSpy.audioSystem()).isNull(); + } + @Test public void earcIdle_blocksArcConnection() { mHdmiControlServiceSpy.clearEarcLocalDevice(); diff --git a/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java b/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java index be1375310704c0b18c40712cff7f26cb7d5266c5..213e05eb788e5082baea6dc1e46ee135b06d92b1 100644 --- a/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java +++ b/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java @@ -18,7 +18,6 @@ package com.android.server.job; import static android.app.job.JobInfo.NETWORK_TYPE_ANY; import static android.app.job.JobInfo.NETWORK_TYPE_NONE; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -28,13 +27,14 @@ import static org.junit.Assert.fail; import android.app.job.JobInfo; import android.content.ComponentName; -import android.platform.test.annotations.LargeTest; import android.util.ArraySet; import android.util.Log; import android.util.SparseArrayMap; import android.util.SparseBooleanArray; import android.util.SparseLongArray; +import androidx.test.filters.LargeTest; + import com.android.server.job.controllers.JobStatus; import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java b/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java index 83fa29a5dd66225e6b940388727ce2a34cb17522..6ae26585fab2dea245d2187cf7ab0a5fd29c5e56 100644 --- a/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java +++ b/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java @@ -382,7 +382,7 @@ public class UsageStatsDatabaseTest { void runWriteReadTest(int interval) throws IOException { mUsageStatsDatabase.putUsageStats(interval, mIntervalStats); List<IntervalStats> stats = mUsageStatsDatabase.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size()); compareIntervalStats(mIntervalStats, stats.get(0), MAX_TESTED_VERSION); @@ -421,7 +421,7 @@ public class UsageStatsDatabaseTest { newDB.readMappingsLocked(); newDB.init(mEndTime); List<IntervalStats> stats = newDB.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size()); @@ -465,7 +465,7 @@ public class UsageStatsDatabaseTest { assertTrue(restoredApps.containsAll(prevDBApps), "List of restored apps does not match list backed-up apps list."); List<IntervalStats> stats = newDB.queryUsageStats( - UsageStatsManager.INTERVAL_DAILY, 0, mEndTime, mIntervalStatsVerifier); + UsageStatsManager.INTERVAL_DAILY, 0, mEndTime, mIntervalStatsVerifier, false); if (version > UsageStatsDatabase.BACKUP_VERSION || version < 1) { assertFalse(stats != null && !stats.isEmpty(), @@ -593,7 +593,7 @@ public class UsageStatsDatabaseTest { newDB.readMappingsLocked(); newDB.init(mEndTime); List<IntervalStats> stats = newDB.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size()); // The written and read IntervalStats should match @@ -620,7 +620,7 @@ public class UsageStatsDatabaseTest { db.onPackageRemoved(removedPackage, System.currentTimeMillis()); List<IntervalStats> stats = db.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size(), "Only one interval stats object should exist for the given time range."); final IntervalStats stat = stats.get(0); @@ -648,7 +648,7 @@ public class UsageStatsDatabaseTest { private void verifyPackageDataIsRemoved(UsageStatsDatabase db, int interval, String removedPackage) { List<IntervalStats> stats = db.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size(), "Only one interval stats object should exist for the given time range."); final IntervalStats stat = stats.get(0); @@ -668,7 +668,7 @@ public class UsageStatsDatabaseTest { private void verifyPackageDataIsNotRemoved(UsageStatsDatabase db, int interval, Set<String> installedPackages) { List<IntervalStats> stats = db.queryUsageStats(interval, 0, mEndTime, - mIntervalStatsVerifier); + mIntervalStatsVerifier, false); assertEquals(1, stats.size(), "Only one interval stats object should exist for the given time range."); final IntervalStats stat = stats.get(0); diff --git a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java index 8db09f9e3a16119318fdc32169084000c666ed52..61c4d06131e16bf489dcddce85ac6a8430ccf0d9 100644 --- a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java +++ b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java @@ -46,7 +46,6 @@ import static com.android.server.policy.WindowManagerPolicy.ACTION_PASS_TO_USER; import static java.util.Collections.unmodifiableMap; import android.content.Context; -import android.os.Looper; import android.os.SystemClock; import android.util.ArrayMap; import android.view.InputDevice; @@ -99,10 +98,6 @@ class ShortcutKeyTestBase { * settings values. */ protected final void setUpPhoneWindowManager(boolean supportSettingsUpdate) { - if (Looper.myLooper() == null) { - Looper.prepare(); - } - doReturn(mSettingsProviderRule.mockContentResolver(mContext)) .when(mContext).getContentResolver(); mPhoneWindowManager = new TestPhoneWindowManager(mContext, supportSettingsUpdate); diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java index ef28ffa7da8fbf5312484b023dd9cb8b0f8e1e61..6e2c4bd7e570943727a61d8d7fd256dc352253e8 100644 --- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java @@ -70,7 +70,6 @@ import android.hardware.display.DisplayManagerInternal; import android.hardware.input.InputManager; import android.media.AudioManagerInternal; import android.os.Handler; -import android.os.HandlerThread; import android.os.IBinder; import android.os.PowerManager; import android.os.PowerManagerInternal; @@ -78,6 +77,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.Vibrator; import android.os.VibratorInfo; +import android.os.test.TestLooper; import android.service.dreams.DreamManagerInternal; import android.telecom.TelecomManager; import android.util.FeatureFlagUtils; @@ -160,8 +160,8 @@ class TestPhoneWindowManager { @Mock private KeyguardServiceDelegate mKeyguardServiceDelegate; private StaticMockitoSession mMockitoSession; - private HandlerThread mHandlerThread; private Handler mHandler; + private TestLooper mTestLooper; private class TestInjector extends PhoneWindowManager.Injector { TestInjector(Context context, WindowManagerPolicy.WindowManagerFuncs funcs) { @@ -184,12 +184,11 @@ class TestPhoneWindowManager { TestPhoneWindowManager(Context context, boolean supportSettingsUpdate) { MockitoAnnotations.initMocks(this); - mHandlerThread = new HandlerThread("fake window manager"); - mHandlerThread.start(); - mHandler = new Handler(mHandlerThread.getLooper()); + mTestLooper = new TestLooper(); + mHandler = new Handler(mTestLooper.getLooper()); mContext = mockingDetails(context).isSpy() ? context : spy(context); - mHandler.runWithScissors(() -> setUp(supportSettingsUpdate), 0 /* timeout */); - waitForIdle(); + mHandler.post(() -> setUp(supportSettingsUpdate)); + mTestLooper.dispatchAll(); } private void setUp(boolean supportSettingsUpdate) { @@ -301,7 +300,6 @@ class TestPhoneWindowManager { } void tearDown() { - mHandlerThread.quitSafely(); LocalServices.removeServiceForTest(InputMethodManagerInternal.class); Mockito.reset(mPhoneWindowManager); mMockitoSession.finishMocking(); @@ -328,7 +326,7 @@ class TestPhoneWindowManager { } void waitForIdle() { - mHandler.runWithScissors(() -> { }, 0 /* timeout */); + mTestLooper.dispatchAll(); } /** diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowPolicyControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowPolicyControllerTests.java index 30a89412d946777e103284515343f54ee60e7657..cf620fe605c6579c699a4e3126206be84924f414 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowPolicyControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowPolicyControllerTests.java @@ -275,5 +275,10 @@ public class DisplayWindowPolicyControllerTests extends WindowTestsBase { public boolean isEnteringPipAllowed(int uid) { return true; } + + @Override + public ComponentName getCustomHomeComponent() { + return null; + } } } diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java index b028b474e96b673df1e348e8dc6a965e9141cea0..a8a90170ae4d4af82ec4bbed08ea0d8f1cddcb78 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java +++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java @@ -243,7 +243,7 @@ public class UsageStatsDatabase { try { for (int i = start; i < fileCount - 1; i++) { final IntervalStats stats = new IntervalStats(); - readLocked(files.valueAt(i), stats); + readLocked(files.valueAt(i), stats, false); if (!checkinAction.checkin(stats)) { return false; } @@ -542,7 +542,8 @@ public class UsageStatsDatabase { } try { IntervalStats stats = new IntervalStats(); - readLocked(new AtomicFile(files[j]), stats, version, mPackagesTokenData); + readLocked(new AtomicFile(files[j]), stats, version, mPackagesTokenData, + false); // Upgrade to version 5+. // Future version upgrades should add additional logic here to upgrade. if (mCurrentVersion >= 5) { @@ -602,7 +603,8 @@ public class UsageStatsDatabase { try { final IntervalStats stats = new IntervalStats(); final AtomicFile atomicFile = new AtomicFile(files[j]); - if (!readLocked(atomicFile, stats, mCurrentVersion, mPackagesTokenData)) { + if (!readLocked(atomicFile, stats, mCurrentVersion, mPackagesTokenData, + false)) { continue; // no data was omitted when read so no need to rewrite } // Any data related to packages that have been removed would have failed @@ -648,7 +650,7 @@ public class UsageStatsDatabase { try { final IntervalStats stats = new IntervalStats(); final AtomicFile atomicFile = new AtomicFile(files[j]); - readLocked(atomicFile, stats, mCurrentVersion, mPackagesTokenData); + readLocked(atomicFile, stats, mCurrentVersion, mPackagesTokenData, false); if (!pruneStats(installedPackages, stats)) { continue; // no stats were pruned so no need to rewrite } @@ -755,7 +757,7 @@ public class UsageStatsDatabase { try { final AtomicFile f = mSortedStatFiles[intervalType].valueAt(fileCount - 1); IntervalStats stats = new IntervalStats(); - readLocked(f, stats); + readLocked(f, stats, false); return stats; } catch (Exception e) { Slog.e(TAG, "Failed to read usage stats file", e); @@ -821,7 +823,7 @@ public class UsageStatsDatabase { */ @Nullable public <T> List<T> queryUsageStats(int intervalType, long beginTime, long endTime, - StatCombiner<T> combiner) { + StatCombiner<T> combiner, boolean skipEvents) { // mIntervalDirs is final. Accessing its size without holding the lock should be fine. if (intervalType < 0 || intervalType >= mIntervalDirs.length) { throw new IllegalArgumentException("Bad interval type " + intervalType); @@ -875,7 +877,7 @@ public class UsageStatsDatabase { } try { - readLocked(f, stats); + readLocked(f, stats, skipEvents); if (beginTime < stats.endTime && !combiner.combine(stats, false, results)) { break; @@ -990,7 +992,7 @@ public class UsageStatsDatabase { try { final AtomicFile af = new AtomicFile(f); final IntervalStats stats = new IntervalStats(); - readLocked(af, stats); + readLocked(af, stats, false); final int pkgCount = stats.packageStats.size(); for (int i = 0; i < pkgCount; i++) { UsageStats pkgStats = stats.packageStats.valueAt(i); @@ -1014,7 +1016,7 @@ public class UsageStatsDatabase { private static long parseBeginTime(File file) throws IOException { String name = file.getName(); - // Parse out the digits from the the front of the file name + // Parse out the digits from the front of the file name for (int i = 0; i < name.length(); i++) { final char c = name.charAt(i); if (c < '0' || c > '9') { @@ -1092,13 +1094,13 @@ public class UsageStatsDatabase { * method. It is up to the caller to ensure that this is the desired behavior - if not, the * caller should ensure that the data in the reused object is being cleared. */ - private void readLocked(AtomicFile file, IntervalStats statsOut) + private void readLocked(AtomicFile file, IntervalStats statsOut, boolean skipEvents) throws IOException, RuntimeException { if (mCurrentVersion <= 3) { Slog.wtf(TAG, "Reading UsageStats as XML; current database version: " + mCurrentVersion); } - readLocked(file, statsOut, mCurrentVersion, mPackagesTokenData); + readLocked(file, statsOut, mCurrentVersion, mPackagesTokenData, skipEvents); } /** @@ -1109,13 +1111,14 @@ public class UsageStatsDatabase { * caller should ensure that the data in the reused object is being cleared. */ private static boolean readLocked(AtomicFile file, IntervalStats statsOut, int version, - PackagesTokenData packagesTokenData) throws IOException, RuntimeException { + PackagesTokenData packagesTokenData, boolean skipEvents) + throws IOException, RuntimeException { boolean dataOmitted = false; try { FileInputStream in = file.openRead(); try { statsOut.beginTime = parseBeginTime(file); - dataOmitted = readLocked(in, statsOut, version, packagesTokenData); + dataOmitted = readLocked(in, statsOut, version, packagesTokenData, skipEvents); statsOut.lastTimeSaved = file.getLastModifiedTime(); } finally { try { @@ -1139,7 +1142,7 @@ public class UsageStatsDatabase { * caller should ensure that the data in the reused object is being cleared. */ private static boolean readLocked(InputStream in, IntervalStats statsOut, int version, - PackagesTokenData packagesTokenData) throws RuntimeException { + PackagesTokenData packagesTokenData, boolean skipEvents) throws RuntimeException { boolean dataOmitted = false; switch (version) { case 1: @@ -1161,7 +1164,7 @@ public class UsageStatsDatabase { break; case 5: try { - UsageStatsProtoV2.read(in, statsOut); + UsageStatsProtoV2.read(in, statsOut, skipEvents); } catch (Exception e) { Slog.e(TAG, "Unable to read interval stats from proto.", e); } @@ -1436,7 +1439,7 @@ public class UsageStatsDatabase { throws IOException { IntervalStats stats = new IntervalStats(); try { - readLocked(statsFile, stats); + readLocked(statsFile, stats, false); } catch (IOException e) { Slog.e(TAG, "Failed to read usage stats file", e); out.writeInt(0); @@ -1481,7 +1484,7 @@ public class UsageStatsDatabase { IntervalStats stats = new IntervalStats(); try { stats.beginTime = in.readLong(); - readLocked(in, stats, version, mPackagesTokenData); + readLocked(in, stats, version, mPackagesTokenData, false); } catch (Exception e) { Slog.d(TAG, "DeSerializing IntervalStats Failed", e); stats = null; @@ -1579,7 +1582,7 @@ public class UsageStatsDatabase { synchronized (mLock) { final IntervalStats stats = new IntervalStats(); try { - readLocked(mSortedStatFiles[interval].get(fileName, null), stats); + readLocked(mSortedStatFiles[interval].get(fileName, null), stats, false); return stats; } catch (Exception e) { return null; diff --git a/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java b/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java index 076eaf84de6a47914850b3328ac1bc20415ec5ba..81387471f4d679bba6326d1b0c24154f9afeb025 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java +++ b/services/usage/java/com/android/server/usage/UsageStatsProtoV2.java @@ -438,7 +438,8 @@ final class UsageStatsProtoV2 { * @param in the input stream from which to read events. * @param stats the interval stats object which will be populated. */ - public static void read(InputStream in, IntervalStats stats) throws IOException { + public static void read(InputStream in, IntervalStats stats, boolean skipEvents) + throws IOException { final ProtoInputStream proto = new ProtoInputStream(in); while (true) { switch (proto.nextField()) { @@ -492,6 +493,9 @@ final class UsageStatsProtoV2 { } break; case (int) IntervalStatsObfuscatedProto.EVENT_LOG: + if (skipEvents) { + break; + } try { final long eventsToken = proto.start( IntervalStatsObfuscatedProto.EVENT_LOG); diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index f93c7038812958b3101e2ac63d829ba8dec5f5a8..58b5ae556f19972b18b73c9b307550c5e6029e7d 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -1896,6 +1896,18 @@ public class UsageStatsService extends SystemService implements mUserState.valueAt(i).dump(idpw, pkgs, compact); idpw.println(); } + } else { + final LinkedList<Event> pendingEvents = mReportedEvents.get(userId); + if (pendingEvents != null && !pendingEvents.isEmpty()) { + final int eventCount = pendingEvents.size(); + idpw.println("Pending events: count=" + eventCount); + idpw.increaseIndent(); + for (int idx = 0; idx < eventCount; idx++) { + UserUsageStatsService.printEvent(idpw, pendingEvents.get(idx), true); + } + idpw.decreaseIndent(); + idpw.println(); + } } idpw.decreaseIndent(); } diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java index b5d8096deac0a2f49295ce38e0e1cea20dd62a87..ddb27969dd0ad24f69d266856a77886f7b8a53d4 100644 --- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java @@ -448,7 +448,7 @@ class UserUsageStatsService { */ @Nullable private <T> List<T> queryStats(int intervalType, final long beginTime, final long endTime, - StatCombiner<T> combiner) { + StatCombiner<T> combiner, boolean skipEvents) { if (intervalType == INTERVAL_BEST) { intervalType = mDatabase.findBestFitBucket(beginTime, endTime); if (intervalType < 0) { @@ -488,7 +488,7 @@ class UserUsageStatsService { // Get the stats from disk. List<T> results = mDatabase.queryUsageStats(intervalType, beginTime, - truncatedEndTime, combiner); + truncatedEndTime, combiner, skipEvents); if (DEBUG) { Slog.d(TAG, "Got " + (results != null ? results.size() : 0) + " results from disk"); Slog.d(TAG, "Current stats beginTime=" + currentStats.beginTime + @@ -518,21 +518,21 @@ class UserUsageStatsService { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } - return queryStats(bucketType, beginTime, endTime, sUsageStatsCombiner); + return queryStats(bucketType, beginTime, endTime, sUsageStatsCombiner, true); } List<ConfigurationStats> queryConfigurationStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } - return queryStats(bucketType, beginTime, endTime, sConfigStatsCombiner); + return queryStats(bucketType, beginTime, endTime, sConfigStatsCombiner, true); } List<EventStats> queryEventStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } - return queryStats(bucketType, beginTime, endTime, sEventStatsCombiner); + return queryStats(bucketType, beginTime, endTime, sEventStatsCombiner, true); } UsageEvents queryEvents(final long beginTime, final long endTime, int flags) { @@ -587,7 +587,7 @@ class UserUsageStatsService { } return true; } - }); + }, false); if (results == null || results.isEmpty()) { return null; @@ -637,7 +637,7 @@ class UserUsageStatsService { } } return true; - }); + }, false); if (results == null || results.isEmpty()) { return null; @@ -684,7 +684,7 @@ class UserUsageStatsService { accumulatedResult.add(event); } return true; - }); + }, false); if (results == null || results.isEmpty()) { return null; @@ -770,7 +770,7 @@ class UserUsageStatsService { } } return true; - }); + }, false); if (results == null || results.isEmpty()) { // There won't be any new events added earlier than endTime, so we can use endTime to @@ -1059,7 +1059,7 @@ class UserUsageStatsService { return Long.toString(elapsedTime); } - void printEvent(IndentingPrintWriter pw, Event event, boolean prettyDates) { + static void printEvent(IndentingPrintWriter pw, Event event, boolean prettyDates) { pw.printPair("time", formatDateTime(event.mTimeStamp, prettyDates)); pw.printPair("type", eventToString(event.mEventType)); pw.printPair("package", event.mPackage); @@ -1124,7 +1124,7 @@ class UserUsageStatsService { } return true; } - }); + }, false); pw.print("Last 24 hour events ("); if (prettyDates) { diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonLandscape.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonLandscape.kt index 030b29269e48520c4136947ead6ea0bfb5a68b2b..b3c9c96c614c0b0899187f7915c1b65e1a0f56ad 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonLandscape.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonLandscape.kt @@ -31,7 +31,8 @@ import org.junit.runner.RunWith @RunWith(FlickerServiceJUnit4ClassRunner::class) class CloseAppBackButton3ButtonLandscape : CloseAppBackButton(NavBar.MODE_3BUTTON, Rotation.ROTATION_90) { - @ExpectedScenarios(["APP_CLOSE_TO_HOME"]) + // TODO: Missing CUJ (b/300078127) + @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun closeAppBackButtonTest() = super.closeAppBackButtonTest() diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonPortrait.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonPortrait.kt index 770da143b184063945bbb7cde2ca05436d537fc3..29c11a4257f6a9f86d86471534638484b148b942 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonPortrait.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButton3ButtonPortrait.kt @@ -31,7 +31,8 @@ import org.junit.runner.RunWith @RunWith(FlickerServiceJUnit4ClassRunner::class) class CloseAppBackButton3ButtonPortrait : CloseAppBackButton(NavBar.MODE_3BUTTON, Rotation.ROTATION_0) { - @ExpectedScenarios(["APP_CLOSE_TO_HOME"]) + // TODO: Missing CUJ (b/300078127) + @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun closeAppBackButtonTest() = super.closeAppBackButtonTest() diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavLandscape.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavLandscape.kt index 4b2206d78276d0732baa3743bc1de4e0546f4440..1bb4a253ff41e80b28ab24968d4dce2a0ff827a2 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavLandscape.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavLandscape.kt @@ -31,7 +31,8 @@ import org.junit.runner.RunWith @RunWith(FlickerServiceJUnit4ClassRunner::class) class CloseAppBackButtonGesturalNavLandscape : CloseAppBackButton(NavBar.MODE_GESTURAL, Rotation.ROTATION_90) { - @ExpectedScenarios(["APP_CLOSE_TO_HOME"]) + // TODO: Missing CUJ (b/300078127) + @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun closeAppBackButtonTest() = super.closeAppBackButtonTest() diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavPortrait.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavPortrait.kt index 54b471e5ab2861517f5991256d8ff2924e1c15d7..17cb6e194ec3958c5c866d9cd74905ef850abd2d 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavPortrait.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/service/close/flicker/CloseAppBackButtonGesturalNavPortrait.kt @@ -31,7 +31,8 @@ import org.junit.runner.RunWith @RunWith(FlickerServiceJUnit4ClassRunner::class) class CloseAppBackButtonGesturalNavPortrait : CloseAppBackButton(NavBar.MODE_GESTURAL, Rotation.ROTATION_0) { - @ExpectedScenarios(["APP_CLOSE_TO_HOME"]) + // TODO: Missing CUJ (b/300078127) + @ExpectedScenarios(["ENTIRE_TRACE"]) @Test override fun closeAppBackButtonTest() = super.closeAppBackButtonTest() diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/service/quickswitch/scenarios/QuickSwitchBetweenTwoAppsBack.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/service/quickswitch/scenarios/QuickSwitchBetweenTwoAppsBack.kt index 93130c4680ffcf1ce987b2e57e63b88af31e6576..a1708fe3a4b6380a5ef4867aa18e698863a1d421 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/service/quickswitch/scenarios/QuickSwitchBetweenTwoAppsBack.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/service/quickswitch/scenarios/QuickSwitchBetweenTwoAppsBack.kt @@ -19,6 +19,7 @@ package com.android.server.wm.flicker.service.quickswitch.scenarios import android.app.Instrumentation import android.tools.common.NavBar import android.tools.common.Rotation +import android.tools.device.flicker.rules.ChangeDisplayOrientationRule import android.tools.device.traces.parsers.WindowManagerStateHelper import androidx.test.platform.app.InstrumentationRegistry import com.android.launcher3.tapl.LauncherInstrumentation @@ -46,7 +47,9 @@ abstract class QuickSwitchBetweenTwoAppsBack(val rotation: Rotation = Rotation.R tapl.setExpectedRotation(rotation.value) tapl.setIgnoreTaskbarVisibility(true) testApp1.launchViaIntent(wmHelper) + ChangeDisplayOrientationRule.setRotation(rotation) testApp2.launchViaIntent(wmHelper) + ChangeDisplayOrientationRule.setRotation(rotation) } @Test diff --git a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml index f867c989232d99462da7716b4603a6203b6733d0..9198ae184b188350848b370924f003955c909a81 100644 --- a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml +++ b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml @@ -102,6 +102,20 @@ <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> + <activity android:name=".PortraitImmersiveActivity" + android:taskAffinity="com.android.server.wm.flicker.testapp.PortraitImmersiveActivity" + android:immersive="true" + android:resizeableActivity="true" + android:screenOrientation="portrait" + android:theme="@android:style/Theme.NoTitleBar" + android:configChanges="screenSize" + android:label="PortraitImmersiveActivity" + android:exported="true"> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + </activity> <activity android:name=".LaunchTransparentActivity" android:resizeableActivity="false" android:screenOrientation="portrait" diff --git a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java index 7c5e9a3f86b565be4e1fc9aa088ef2d2c06aa229..8b334c0a85888dae21636dcddd8260688d1dcb04 100644 --- a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java +++ b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java @@ -73,6 +73,12 @@ public class ActivityOptions { FLICKER_APP_PACKAGE + ".NonResizeablePortraitActivity"); } + public static class PortraitImmersiveActivity { + public static final String LABEL = "PortraitImmersiveActivity"; + public static final ComponentName COMPONENT = new ComponentName(FLICKER_APP_PACKAGE, + FLICKER_APP_PACKAGE + ".PortraitImmersiveActivity"); + } + public static class TransparentActivity { public static final String LABEL = "TransparentActivity"; public static final ComponentName COMPONENT = new ComponentName(FLICKER_APP_PACKAGE, diff --git a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/PortraitImmersiveActivity.java b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/PortraitImmersiveActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..0a7f81cba747d9bf2e8025a6c5dc72f8ca781cfa --- /dev/null +++ b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/PortraitImmersiveActivity.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm.flicker.testapp; + +public class PortraitImmersiveActivity extends GameActivity { +} diff --git a/tests/NetworkSecurityConfigTest/res/raw/ca_certs_der.der b/tests/NetworkSecurityConfigTest/res/raw/ca_certs_der.der index 235bd4797b7861f430b009ac988288b1d88fd91c..fd888ec600cd6080760b109daa9c26d8ea9a88e1 100644 Binary files a/tests/NetworkSecurityConfigTest/res/raw/ca_certs_der.der and b/tests/NetworkSecurityConfigTest/res/raw/ca_certs_der.der differ diff --git a/tests/NetworkSecurityConfigTest/res/raw/ca_certs_pem.pem b/tests/NetworkSecurityConfigTest/res/raw/ca_certs_pem.pem index 413e3c07d2abb51091fe01ecbf13810ba6811ebc..66f7bfd21289c72ef90a46b750bb499081fe55e2 100644 --- a/tests/NetworkSecurityConfigTest/res/raw/ca_certs_pem.pem +++ b/tests/NetworkSecurityConfigTest/res/raw/ca_certs_pem.pem @@ -1,35 +1,31 @@ -----BEGIN CERTIFICATE----- -MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT -MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 -aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw -WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE -AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m -OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu -T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c -JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR -Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz -PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm -aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM -TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g -LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO -BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv -dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB -AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL -NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W -b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ +MIIFYjCCBEqgAwIBAgIQd70NbNs2+RrqIQ/E8FjTDTANBgkqhkiG9w0BAQsFADBX +MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE +CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIwMDYx +OTAwMDA0MloXDTI4MDEyODAwMDA0MlowRzELMAkGA1UEBhMCVVMxIjAgBgNVBAoT +GUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBMTEMxFDASBgNVBAMTC0dUUyBSb290IFIx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAthECix7joXebO9y/lD63 +ladAPKH9gvl9MgaCcfb2jH/76Nu8ai6Xl6OMS/kr9rH5zoQdsfnFl97vufKj6bwS +iV6nqlKr+CMny6SxnGPb15l+8Ape62im9MZaRw1NEDPjTrETo8gYbEvs/AmQ351k +KSUjB6G00j0uYODP0gmHu81I8E3CwnqIiru6z1kZ1q+PsAewnjHxgsHA3y6mbWwZ +DrXYfiYaRQM9sHmklCitD38m5agI/pboPGiUU+6DOogrFZYJsuB6jC511pzrp1Zk +j5ZPaK49l8KEj8C8QMALXL32h7M1bKwYUH+E4EzNktMg6TO8UpmvMrUpsyUqtEj5 +cuHKZPfmghCN6J3Cioj6OGaK/GP5Afl4/Xtcd/p2h/rs37EOeZVXtL0m79YB0esW +CruOC7XFxYpVq9Os6pFLKcwZpDIlTirxZUTQAs6qzkm06p98g7BAe+dDq6dso499 +iYH6TKX/1Y7DzkvgtdizjkXPdsDtQCv9Uw+wp9U7DbGKogPeMa3Md+pvez7W35Ei +Eua++tgy/BBjFFFy3l3WFpO9KWgz7zpm7AeKJt8T11dleCfeXkkUAKIAf5qoIbap +sZWwpbkNFhHax2xIPEDgfg1azVY80ZcFuctL7TlLnMQ/0lUTbiSw1nH69MG6zO0b +9f6BQdgAmD06yK56mDcYBZUCAwEAAaOCATgwggE0MA4GA1UdDwEB/wQEAwIBhjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTkrysmcRorSCeFL1JmLO/wiRNxPjAf +BgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo//z9SzBgBggrBgEFBQcBAQRUMFIw +JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnBraS5nb29nL2dzcjEwKQYIKwYBBQUH +MAKGHWh0dHA6Ly9wa2kuZ29vZy9nc3IxL2dzcjEuY3J0MDIGA1UdHwQrMCkwJ6Al +oCOGIWh0dHA6Ly9jcmwucGtpLmdvb2cvZ3NyMS9nc3IxLmNybDA7BgNVHSAENDAy +MAgGBmeBDAECATAIBgZngQwBAgIwDQYLKwYBBAHWeQIFAwIwDQYLKwYBBAHWeQIF +AwMwDQYJKoZIhvcNAQELBQADggEBADSkHrEoo9C0dhemMXoh6dFSPsjbdBZBiLg9 +NR3t5P+T4Vxfq7vqfM/b5A3Ri1fyJm9bvhdGaJQ3b2t6yMAYN/olUazsaL+yyEn9 +WprKASOshIArAoyZl+tJaox118fessmXn1hIVw41oeQa1v1vg4Fv74zPl6/AhSrw +9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy ++qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi +d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8= -----END CERTIFICATE----- diff --git a/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml b/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml index 5d23d36e1dbfa6f0bc06f6f5164994ccabe8b376..99106ad3778343793f4a54ffb027f246fa3a52b1 100644 --- a/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml +++ b/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml @@ -5,7 +5,7 @@ </domain> <domain> developer.android.com </domain> <pin-set> - <pin digest="SHA-256"> 7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= </pin> + <pin digest="SHA-256"> zCTnfLwLKbS9S2sbp+uFz4KZOocFvXxkV06Ce9O5M2w= </pin> </pin-set> </domain-config> </network-security-config> diff --git a/tests/NetworkSecurityConfigTest/res/xml/nested_domains.xml b/tests/NetworkSecurityConfigTest/res/xml/nested_domains.xml index d45fd77a5f0f811654b5a5c4dcf3f6e6a697e113..232f88ff6cc99c05719a3126fba4e03f8db08e4e 100644 --- a/tests/NetworkSecurityConfigTest/res/xml/nested_domains.xml +++ b/tests/NetworkSecurityConfigTest/res/xml/nested_domains.xml @@ -9,7 +9,7 @@ <domain-config> <domain>developer.android.com</domain> <pin-set> - <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> + <pin digest="SHA-256">zCTnfLwLKbS9S2sbp+uFz4KZOocFvXxkV06Ce9O5M2w=</pin> </pin-set> </domain-config> </domain-config> diff --git a/tests/NetworkSecurityConfigTest/res/xml/pins1.xml b/tests/NetworkSecurityConfigTest/res/xml/pins1.xml index 1773d28094a3a666a6b59e0f9851943077b82b8a..7cc81b0101f121c0edb0e5ba32eb88de0bab6b68 100644 --- a/tests/NetworkSecurityConfigTest/res/xml/pins1.xml +++ b/tests/NetworkSecurityConfigTest/res/xml/pins1.xml @@ -3,7 +3,7 @@ <domain-config> <domain>android.com</domain> <pin-set> - <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> + <pin digest="SHA-256">zCTnfLwLKbS9S2sbp+uFz4KZOocFvXxkV06Ce9O5M2w=</pin> </pin-set> </domain-config> </network-security-config> diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java index 047be162e6425a0c633e4ea3abb7eb5c76813e59..0494f174f19118019022e46354061861bc07a619 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java @@ -22,23 +22,17 @@ import android.os.Build; import android.test.ActivityUnitTestCase; import android.util.ArraySet; import android.util.Pair; + +import com.android.org.conscrypt.TrustedCertificateStore; + import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.net.Socket; -import java.net.URL; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.Set; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLHandshakeException; -import javax.net.ssl.TrustManager; -import com.android.org.conscrypt.TrustedCertificateStore; +import javax.net.ssl.SSLContext; public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { @@ -46,9 +40,9 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { super(Activity.class); } - // SHA-256 of the G2 intermediate CA for android.com (as of 10/2015). - private static final byte[] G2_SPKI_SHA256 - = hexToBytes("ec722969cb64200ab6638f68ac538e40abab5b19a6485661042a1061c4612776"); + // SHA-256 of the GTS intermediate CA (CN = GTS CA 1C3) for android.com (as of 09/2023). + private static final byte[] GTS_INTERMEDIATE_SPKI_SHA256 = + hexToBytes("cc24e77cbc0b29b4bd4b6b1ba7eb85cf82993a8705bd7c64574e827bd3b9336c"); private static final byte[] TEST_CA_BYTES = hexToBytes( @@ -161,7 +155,7 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { public void testGoodPin() throws Exception { ArraySet<Pin> pins = new ArraySet<Pin>(); - pins.add(new Pin("SHA-256", G2_SPKI_SHA256)); + pins.add(new Pin("SHA-256", GTS_INTERMEDIATE_SPKI_SHA256)); NetworkSecurityConfig domain = new NetworkSecurityConfig.Builder() .setPinSet(new PinSet(pins, Long.MAX_VALUE)) .addCertificatesEntryRef( @@ -247,7 +241,7 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { public void testWithUrlConnection() throws Exception { ArraySet<Pin> pins = new ArraySet<Pin>(); - pins.add(new Pin("SHA-256", G2_SPKI_SHA256)); + pins.add(new Pin("SHA-256", GTS_INTERMEDIATE_SPKI_SHA256)); NetworkSecurityConfig domain = new NetworkSecurityConfig.Builder() .setPinSet(new PinSet(pins, Long.MAX_VALUE)) .addCertificatesEntryRef( @@ -304,7 +298,7 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { } finally { // Delete the user added CA. We don't know the alias so just delete them all. for (String alias : store.aliases()) { - if (store.isUser(alias)) { + if (TrustedCertificateStore.isUser(alias)) { try { store.deleteCertificateEntry(alias); } catch (Exception ignored) { diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestUtils.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestUtils.java index 9dec21be7f37f664066d87e2667a542b81b865ff..39b5cb4c4f0d3274036f9fe39894d7d1b81bc62a 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestUtils.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestUtils.java @@ -16,19 +16,20 @@ package android.security.net.config; +import static org.junit.Assert.fail; + import android.content.pm.ApplicationInfo; import android.os.Build; -import java.net.Socket; + import java.net.URL; + import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLHandshakeException; -import javax.net.ssl.TrustManager; +import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManagerFactory; -import junit.framework.Assert; - -public final class TestUtils extends Assert { +public final class TestUtils { private TestUtils() { } @@ -36,8 +37,8 @@ public final class TestUtils extends Assert { public static void assertConnectionFails(SSLContext context, String host, int port) throws Exception { try { - Socket s = context.getSocketFactory().createSocket(host, port); - s.getInputStream(); + SSLSocket s = (SSLSocket) context.getSocketFactory().createSocket(host, port); + s.startHandshake(); fail("Expected connection to " + host + ":" + port + " to fail."); } catch (SSLHandshakeException expected) { } @@ -45,7 +46,8 @@ public final class TestUtils extends Assert { public static void assertConnectionSucceeds(SSLContext context, String host, int port) throws Exception { - Socket s = context.getSocketFactory().createSocket(host, port); + SSLSocket s = (SSLSocket) context.getSocketFactory().createSocket(host, port); + s.startHandshake(); s.getInputStream(); } diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java index 4b7a014f25dc1b130c7dfae5f7c6f4da950e578d..81e05c1d4e42caa07d7af55d32a21a70ac75ba8f 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java @@ -16,26 +16,18 @@ package android.security.net.config; -import android.content.Context; import android.content.pm.ApplicationInfo; import android.test.AndroidTestCase; import android.test.MoreAsserts; -import android.util.ArraySet; -import android.util.Pair; + import java.io.IOException; import java.net.InetAddress; -import java.net.Socket; -import java.net.URL; import java.security.KeyStore; import java.security.Provider; -import java.security.Security; import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collections; import java.util.Set; -import javax.net.ssl.HttpsURLConnection; + import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; @@ -52,7 +44,7 @@ public class XmlConfigTests extends AndroidTestCase { NetworkSecurityConfig config = appConfig.getConfigForHostname(""); assertNotNull(config); // Check defaults. - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); assertFalse(config.getTrustAnchors().isEmpty()); PinSet pinSet = config.getPins(); @@ -72,7 +64,7 @@ public class XmlConfigTests extends AndroidTestCase { NetworkSecurityConfig config = appConfig.getConfigForHostname(""); assertNotNull(config); // Check defaults. - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); assertTrue(config.getTrustAnchors().isEmpty()); PinSet pinSet = config.getPins(); @@ -91,14 +83,14 @@ public class XmlConfigTests extends AndroidTestCase { NetworkSecurityConfig config = appConfig.getConfigForHostname(""); assertNotNull(config); // Check defaults. - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); assertTrue(config.getTrustAnchors().isEmpty()); PinSet pinSet = config.getPins(); assertTrue(pinSet.pins.isEmpty()); // Check android.com. config = appConfig.getConfigForHostname("android.com"); - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); assertFalse(config.getTrustAnchors().isEmpty()); pinSet = config.getPins(); @@ -188,7 +180,7 @@ public class XmlConfigTests extends AndroidTestCase { ApplicationConfig appConfig = new ApplicationConfig(source); assertTrue(appConfig.hasPerDomainConfigs()); NetworkSecurityConfig config = appConfig.getConfigForHostname("android.com"); - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); assertFalse(config.getTrustAnchors().isEmpty()); PinSet pinSet = config.getPins(); @@ -250,9 +242,9 @@ public class XmlConfigTests extends AndroidTestCase { ApplicationConfig appConfig = new ApplicationConfig(source); // Check android.com. NetworkSecurityConfig config = appConfig.getConfigForHostname("android.com"); - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); - assertEquals(2, config.getTrustAnchors().size()); + assertEquals(1, config.getTrustAnchors().size()); // Try connections. SSLContext context = TestUtils.getSSLContext(source); TestUtils.assertConnectionSucceeds(context, "android.com", 443); @@ -267,9 +259,9 @@ public class XmlConfigTests extends AndroidTestCase { ApplicationConfig appConfig = new ApplicationConfig(source); // Check android.com. NetworkSecurityConfig config = appConfig.getConfigForHostname("android.com"); - assertTrue(config.isCleartextTrafficPermitted()); + assertFalse(config.isCleartextTrafficPermitted()); assertFalse(config.isHstsEnforced()); - assertEquals(2, config.getTrustAnchors().size()); + assertEquals(1, config.getTrustAnchors().size()); // Try connections. SSLContext context = TestUtils.getSSLContext(source); TestUtils.assertConnectionSucceeds(context, "android.com", 443); diff --git a/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java b/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java index f695cbd5daf9e4dad9612052062459615d55881b..5160df8e9b6d1c958cc143bf6282a97938dff2d8 100644 --- a/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java +++ b/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java @@ -122,7 +122,7 @@ public class UsageStatsDatabasePerfTest { while (benchmarkState.keepRunning(elapsedTimeNs)) { final long startTime = SystemClock.elapsedRealtimeNanos(); List<UsageEvents.Event> temp = sUsageStatsDatabase.queryUsageStats( - UsageStatsManager.INTERVAL_DAILY, 0, 2, sUsageStatsCombiner); + UsageStatsManager.INTERVAL_DAILY, 0, 2, sUsageStatsCombiner, false); final long endTime = SystemClock.elapsedRealtimeNanos(); elapsedTimeNs = endTime - startTime; assertEquals(packageCount * eventsPerPackage, temp.size()); diff --git a/tests/utils/testutils/TEST_MAPPING b/tests/utils/testutils/TEST_MAPPING index d9eb44fc422270204a621391f5c297fbfff94937..6468d8cc99a679ac97c5c614d68d7abe4035b5ea 100644 --- a/tests/utils/testutils/TEST_MAPPING +++ b/tests/utils/testutils/TEST_MAPPING @@ -4,7 +4,7 @@ "name": "frameworks-base-testutils-tests", "options": [ { - "exclude-annotation": "android.platform.test.annotations.LargeTest" + "exclude-annotation": "androidx.test.filters.LargeTest" }, { "exclude-annotation": "android.platform.test.annotations.FlakyTest"